【AWS発表】Amazon Kinesis Firehose - シンプルでスケーラブルなデータ収集
2年前、私たちは Amazon Kinesis を発表しました。現在、私たちが Amazon Kinesis Streams と呼んでいるこのサービスによって、皆さんにストリーミングデータを非常に高いスループットで収集・処理・分析してもらえるようになりました。もはや皆さんはデータを収集するサーバー群の構築・運用について検討したり、監視と拡張、データ配信の信頼性などについて心配する必要はありません。
Amazon Kinesis Firehose はストリーミングデータをさらに簡単に AWS にロードするために開発されました。皆さんは配信ストリームを作成したのち、そのストリームを Amazon Simple Storage Service (S3) のバケットや Amazon Redshift のテーブルへとルーティングし、あとはストリームへデータ(各データサイズの上限は 1,000KB です)を書き込むだけです。その裏側で、Firehose が皆さんのために監視と拡張、データ管理の全てを引き受けます。
大切なことなので何度も言いますが(私は決して疲れませんよ)、皆さんはアプリケーションのためにもっと多くの時間を使うことができます。そして、インフラストラクチャーのために使う時間をもっと少なくすることができます。
Kinesis Firehose の内部
様々なことをシンプルに保つため、Firehose が何らかの方法で生データに介在したり、処理することはありません。皆さんは配信ストリームを作成し、そこにレコードを書き込んで下さい。クライアントサイドでのデータ圧縮とサーバーサイドでの暗号化ののち、そのレコードは指定された S3 バケットへと書き込まれます。私の同僚である James Hamilton が(別の文脈で)よく言うように、「これは本当にシンプル」です。皆さんはストリームに対するバッファーの大きさや間隔を調整することもできます。
もし、皆さんのクライアントコードがレコードを論理的に分割して Firehose へ送信している場合、区切り文字を追加することができますし、データがクラウドに置かれた後で、レコードの境界を指定することもできます。
S3 に保存されたデータを分析・処理する方法は様々です。例えば、AWS Lambda ファンクションをバケットに関連付け、オブジェクトが書き込まれるたびに処理を行ったり、既存の Amazon EMR ジョブを修正せずに、バケットにある最もフレッシュなデータを処理したりすることができます。
Amazon Redshift クラスターへデータを書き込むために Firehose を使うこともできます。Firehose は生データを S3 に保存した後、それぞれのオブジェクトへ Redshift の COPY コマンドを発行します。このコマンドはとても柔軟で、複数の形式(CSV, JSON, AVRO, その他)のデータを処理したり、特定のカラムのみを選択して保存したり、データを他の型に変換したりすることができます。
Kinesis Firehose をコンソールから利用する
皆さんは AWS マネジメントコンソール、AWS コマンドラインインターフェース(CLI)、Firehose API 経由で全てを行うことができます。
Firehose コンソールを利用して配信ストリームをセットアップしてみましょう。コンソールを開き、[Create Delivery Stream] をクリックして下さい。次に、ストリームの名前を入力し、S3 バケットを選択します。そして IAM ロールをセットアップし、Firehose に対象バケットへの書き込み権限を与えます:
配信ストリームに対する遅延と圧縮の設定を行うことができます。AWS Key Management Service (KMS) の鍵を選択してデータを暗号化することもできます:
作成したストリームはコンソールから確認することができます。
配信ストリームへデータをパブリッシュする
これはストリームへレコード("some data" という文字列)をパブリッシュするシンプルな Java コードです:
PutRecordRequest putRecordRequest = new PutRecordRequest();
putRecordRequest.setFirehoseName("incoming-stream");
String data = "some data" + "\n"; // add \n as a record separator
Record record = new Record();
record.setData(ByteBuffer.wrap(data.getBytes(StandardCharsets.UTF_8)));
putRecordRequest.setRecord(record);
firehoseClient.putRecord(putRecordRequest);
CLI ではこのようになります:
$ aws firehose put-record --firehose-name incoming-stream --record Data="some data\n"
私たちは Linux 上で稼働するエージェントも提供します。複数のログファイルを追跡し、Firehose へログを転送するようエージェントを構成することができます。
Kinesis Firehose 配信ストリームの監視
コンソールからそれぞれの配信ストリームに対する CloudWatch メトリクスを監視することができます:
数字で見ると
1時間あたり数ギガバイトのデータを受け取るように配信ストリームをスケールさせることができます。デフォルトでそれぞれのストリームは1秒あたり2500回の PutRecord
もしくは PutRecordBatch
呼び出しを許可しています。また、AWS アカウントごとに最大5つのストリームを持つことができます(これらの値は引き上げることができます。より多くキャパシティを必要としている場合は、上限緩和申請を行って下さい)。
この新機能は既に利用可能になっており、本日から使い始めることができます。料金はそれぞれの Firehose が収集したデータの容量に応じて発生します。
— Jeff;
(翻訳はソリューションアーキテクト内海が担当しました。原文: https://aws.amazon.com/jp/blogs/aws/amazon-kinesis-firehose-simple-highly-scalable-data-ingestion/)
コメント