はじめに
以前、Kinesis Data Streamsと連携させるブログを書きましたが、今回はKinesis Data Firehoseでプロキシを作成、S3にデータ保管するパターンを記載します。
API GatewayでKinesis Data Streamsのプロキシを作成する - Techfirm Cloud Architect Blog
同じユースケース(センサーデータなど定期的なデータ収集、最終的には集計・分析する)でも、リアルタイム性がそこまで必要でなければ、こちらのパターンの方がさらに簡単にやりたいことが実現できると思います。
構築
S3の準備
Kinesis Data Firehoseの送信先として指定するS3バケットを作成しておきます。
※こちらは手順省略、動作確認するだけであればバケット名だけ指定してデフォルトのまま作成して大丈夫です。
Kinesis Data Firehoseの作成
マネジメントコンソールから下図のように作成します。
作成する際は、画像以外の箇所もありますがすべてデフォルトのまま作成しています。
IAMロールの許可ポリシー追加
API GatewayからKinesis Data Firehoseにアクセスさせるため、以前のブログで作成したIAMロール「apigateway-kinesis-role」にIAMポリシー「AmazonKinesisFirehoseFullAccess」の許可を追加します。
API Gateway
こちらも以前のブログで作成した、API Gatewayを流用して作成します。
まずは/{stream-name}配下に新規「firehoserecord」の子リソースを作成します。
続いて「POST」メソッドを作成します。
前回ブログとの差異はAWSサービスが「Firehose」になったのみです。
こちらも前回ブログと同じように「統合リクエスト」を選択し、「HTTPヘッダー」と「マッピングテンプレート」を追加します。
マッピングテンプレートはPutRecord - Amazon Kinesis Data Firehoseを参考に修正しました。
{ "DeliveryStreamName": "$input.params('stream-name')", "Record": { "Data": "$util.base64Encode($input.json('$.Data'))" } }
動作確認
{stream-name}には作成したストリーム名「PUT-S3-Ksx04」を入力、リクエスト本文も、マッピングテンプレートに合わせて下記のように入力します。
{ "Data": "some data" }
テストを実行するとStatus: 200およびLogs上もエラーない旨確認できるかと思います。
最後に、S3バケットの方にデータが格納されているか確認します。
オブジェクトが作成されていて、先ほどPOSTしたデータが確認できました。
"some data"
最後に
前回はKinesis Data Streamsへデータが入るところまででしたが、Kinesis Data Firehoseを選択することでS3への保存までより簡単に構築できました。 リアルタイム性が不要(Kinesis Data Firehoseの最小バッファ間隔:60秒)で最終的にS3等の連携サービスにデータ保管する場合は、こちらを選択する方が多くなるかと思います。