Techfirm Cloud Architect Blog

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

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

はじめに

センサーデータなど定期的なデータ収集、最終的には集計・分析するユースケースを想定し、まずはデータ収集するインターフェイスとしてAPI GatewayとKinesis Data Streamsの組み合わせについて試してみました。

チュートリアル: API Gateway で REST API を Amazon Kinesis のプロキシとして作成する - Amazon API Gateway

構築

APIがKinesisにアクセスするためのIAMロールとIAMポリシーを作成する

チュートリアルの順序にしたがって、まずはIAMロールを作成します。

信頼されたエンティティタイプは「AWSのサービス」を選択して、ユースケースの箇所は「API Gateway」を選択します。 IAMロール設定1

デフォルトのまま次へ。 IAMロール設定2

ロール名を入力、ここでは「apigateway-kinesis-role」を入力します。 IAMロール設定3

作成したロールに「AmazonKinesisFullAccess」ポリシーを付与します。 IAMロール設定4

Kinesis Data Streamsの作成

チュートリアルには記載ありませんが、データ送信先のKinesis streamを先に作成します。 データストリーム名は「apigateway-kinesis-stream」としておきます。 Kinesisデータストリーム設定

APIをKinesisのプロキシとして作成する

チュートリアル通り進めていきます。 API nameについてもチュートリアル同様、「KinesisProxy」で進めていきます。 API Gateway設定1

Kinesisのストリームに対してレコードの取得や追加を行う

チュートリアルでは以下についても記載がありますが、今回のユースケースでは不要なので除外してます。

・Kinesisのストリームを一覧表示する

・Kinesisでストリームを作成、表示、削除する

また、チュートリアルではGetRecordsアクションや、PutRecordsアクション(複数レコード追加)の記載もありますが、今回はシンプルにPutRedordアクション(1つのレコード追加)のみとしています。

子リソースを作成します。 API Gateway設定2 API Gateway設定3 API Gateway設定4

次に、先ほど作成したrecordリソースにPOSTメソッドを作成します。

※チュートリアル上の「Kinesisのストリームに対してレコードの取得や追加を行う」ではPUTが使われていますが、今回はPOSTに置き換えて作成しています。 API Gateway設定5

「保存」ボタン後には下記の画面となるので「統合リクエスト」を選択します。 API Gateway設定6

「HTTPヘッダー」箇所にContent-Typeヘッダーを統合リクエストのAWS準拠のJSONに設定します。 API Gateway設定7

「マッピングテンプレート」箇所は下図のように設定します。

※テンプレート箇所はチュートリアルにあるものをそのままコピペしています API Gateway設定8

動作確認

{stream-name}には作成したデータストリーム名「apigateway-kinesis-stream」を入力します。 リクエスト本文にはチュートリアルにあったものをそのままコピペで入力します。 API Gatewayのテスト

テストを実行すると以下のような画面が表示されます。 API Gatewayのテスト結果

追加確認

結合テスト的にAPI Gatewayが実行されて、データがKinesis Data Streamsに入るところまでの一連の確認をおこないました。

ステージ名「test」でAPI Gatewayのデプロイを行います。 API Gatewayのデプロイ

CloudShell等からデプロイしたAPI Gatewayにリクエストを送信します。

curl -X POST https://{払い出されたID}.execute-api.ap-northeast-1.amazonaws.com/test/streams/apigateway-kinesis-stream/record -H 'Content-type: application/json'  -d '{"Data": "some data","PartitionKey": "some key"}'

マネジメントコンソールのKinesis画面(データビューアー)上にて送信したデータが入っていることが確認できました。 Kinesis画面での確認

まとめ

今回のようなユースケースに対して、サーバレスで簡単に構築可能なことが最大のメリットではないでしょうか。 今回は記載しなかった、集計・分析の箇所もそのうち記載できればなと思います。