Amazon Kinesis Data Firehose
Amazon Kinesis Data Firehose は、ストリーミングデータを確実にキャプチャおよび変換し、データレイク、データストア、および分析サービスに配信する、抽出、変換、ロード (ETL) サービスです。
大量のデータをS3に送る要件があったため、Kinesis Data Firehoseを検証してみた。
概要
たくさんのデータがくるので、それをさっさとS3に放り投げたい。
前提
- S3バケットは作成済み。
- EC2インスタンスも作成済み。
配信ストリームを作る。
バッファサイズを指定する。
あまりバッファしないで、S3にバケツリレーでさっさと流してほしいので、最小の60秒に指定。
データの加工をするかを選択。gzipやzipにすることができる。今回は特にないのでdisable。
データを暗号化するかの選択。暗号化はしないのでdisable。
Kinesisエージェントインストール
- Kinesis エージェントを使用して Amazon Kinesis データストリームへの書き込み:エージェントのダウンロードとインストール
https://docs.aws.amazon.com/ja_jp/streams/latest/dev/writing-with-agents.html#download-install
OS種別に応じてインストールする。
以下はRHELの場合。
$ sudo yum install https://s3.amazonaws.com/streaming-data-agent/aws-kinesis-agent-latest.amzn2.noarch.rpm
自動起動に指定。
$ sudo systemctl enable aws-kinesis-agent.service
サービスを起動。
$ sudo systemctl start aws-kinesis-agent.service
サービスの起動確認。
$ sudo systemctl status aws-kinesis-agent.service
設定ファイルを確認。
$ sudo ls -l /etc/aws-kinesis/agent.json
設定ファイルデフォルト版をコピー。
$ sudo cp -p /etc/aws-kinesis/agent.json /etc/aws-kinesis/agent.json.default
設定ファイルを編集。
$ sudo vi /etc/aws-kinesis/agent.json
{
"cloudwatch.emitMetrics": false,
"kinesis.endpoint": "",
"firehose.endpoint": "https://firehose.ap-northeast-1.amazonaws.com",
"flows": [
{
"filePattern": "READFILE",
"deliveryStream": "KDF-STREAMNAME"
}
]
}
"filePattern": "READFILE"のREADFILEは、読み取ってS3送るデータのファイルを指定。
"deliveryStream": "KDF-STREAMNAME"は、先ほど作ったKDFの配信ストリーム名を指定。ARNなどではなく、名前でOK。
"firehose.endpoint": "https://firehose.ap-northeast-1.amazonaws.com"
はEC2インスタンスのリージョンに応じた名前に変更する。これでファイルを保存する。
設定ファイルを再読み込みさせるため、サービスの再起動。
$ sudo systemctl restart aws-kinesis-agent.service
$ sudo systemctl status aws-kinesis-agent.service
これでKinesisDataFirehoseでデータが送られるようになった。
S3でデータが届いたか確認
S3を開くと、勝手に日付ディレクトリが切られて、ファイルが生成されている。
このファイルをダウンロードして開くと、EC2インスタンスでKinesisエージェントが読み取ったデータであることを確認できた。
超簡単にストリーミングデータ処理ができてしまった。。。クラウドはこういうところが本当に素晴らしい。