Techfirm Cloud Architect Blog

テックファーム株式会社クラウドインフラグループのブログ

API GatewayでKinesis Data Firehoseのプロキシを作成する

はじめに

以前、Kinesis Data Streamsと連携させるブログを書きましたが、今回はKinesis Data Firehoseでプロキシを作成、S3にデータ保管するパターンを記載します。

API GatewayでKinesis Data Streamsのプロキシを作成する - Techfirm Cloud Architect Blog

同じユースケース(センサーデータなど定期的なデータ収集、最終的には集計・分析する)でも、リアルタイム性がそこまで必要でなければ、こちらのパターンの方がさらに簡単にやりたいことが実現できると思います。

構築

S3の準備

Kinesis Data Firehoseの送信先として指定するS3バケットを作成しておきます。

※こちらは手順省略、動作確認するだけであればバケット名だけ指定してデフォルトのまま作成して大丈夫です。

Kinesis Data Firehoseの作成

マネジメントコンソールから下図のように作成します。 KinesisDataFirehose設定1 KinesisDataFirehose設定2

作成する際は、画像以外の箇所もありますがすべてデフォルトのまま作成しています。

IAMロールの許可ポリシー追加

API GatewayからKinesis Data Firehoseにアクセスさせるため、以前のブログで作成したIAMロール「apigateway-kinesis-role」にIAMポリシー「AmazonKinesisFirehoseFullAccess」の許可を追加します。 IAMロール設定

API Gateway

こちらも以前のブログで作成した、API Gatewayを流用して作成します。

まずは/{stream-name}配下に新規「firehoserecord」の子リソースを作成します。 API Gateway設定1

続いて「POST」メソッドを作成します。 前回ブログとの差異はAWSサービスが「Firehose」になったのみです。 API Gateway設定2

こちらも前回ブログと同じように「統合リクエスト」を選択し、「HTTPヘッダー」と「マッピングテンプレート」を追加します。 API Gateway設定3

マッピングテンプレートは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"
}

API Gatewayのテスト

テストを実行するとStatus: 200およびLogs上もエラーない旨確認できるかと思います。

最後に、S3バケットの方にデータが格納されているか確認します。 オブジェクトが作成されていて、先ほどPOSTしたデータが確認できました。 S3上のデータ確認

"some data"

最後に

前回はKinesis Data Streamsへデータが入るところまででしたが、Kinesis Data Firehoseを選択することでS3への保存までより簡単に構築できました。 リアルタイム性が不要(Kinesis Data Firehoseの最小バッファ間隔:60秒)で最終的にS3等の連携サービスにデータ保管する場合は、こちらを選択する方が多くなるかと思います。