はじめに
センサーデータなど定期的なデータ収集、最終的には集計・分析するユースケースを想定し、まずはデータ収集するインターフェイスとしてAPI GatewayとKinesis Data Streamsの組み合わせについて試してみました。
チュートリアル: API Gateway で REST API を Amazon Kinesis のプロキシとして作成する - Amazon API Gateway
構築
APIがKinesisにアクセスするためのIAMロールとIAMポリシーを作成する
チュートリアルの順序にしたがって、まずはIAMロールを作成します。
信頼されたエンティティタイプは「AWSのサービス」を選択して、ユースケースの箇所は「API Gateway」を選択します。
デフォルトのまま次へ。
ロール名を入力、ここでは「apigateway-kinesis-role」を入力します。
作成したロールに「AmazonKinesisFullAccess」ポリシーを付与します。
Kinesis Data Streamsの作成
チュートリアルには記載ありませんが、データ送信先のKinesis streamを先に作成します。
データストリーム名は「apigateway-kinesis-stream」としておきます。
APIをKinesisのプロキシとして作成する
チュートリアル通り進めていきます。
API nameについてもチュートリアル同様、「KinesisProxy」で進めていきます。
Kinesisのストリームに対してレコードの取得や追加を行う
チュートリアルでは以下についても記載がありますが、今回のユースケースでは不要なので除外してます。
・Kinesisのストリームを一覧表示する
・Kinesisでストリームを作成、表示、削除する
また、チュートリアルではGetRecordsアクションや、PutRecordsアクション(複数レコード追加)の記載もありますが、今回はシンプルにPutRedordアクション(1つのレコード追加)のみとしています。
子リソースを作成します。
次に、先ほど作成したrecordリソースにPOSTメソッドを作成します。
※チュートリアル上の「Kinesisのストリームに対してレコードの取得や追加を行う」ではPUTが使われていますが、今回はPOSTに置き換えて作成しています。
「保存」ボタン後には下記の画面となるので「統合リクエスト」を選択します。
「HTTPヘッダー」箇所にContent-Typeヘッダーを統合リクエストのAWS準拠のJSONに設定します。
「マッピングテンプレート」箇所は下図のように設定します。
※テンプレート箇所はチュートリアルにあるものをそのままコピペしています
動作確認
{stream-name}には作成したデータストリーム名「apigateway-kinesis-stream」を入力します。
リクエスト本文にはチュートリアルにあったものをそのままコピペで入力します。
テストを実行すると以下のような画面が表示されます。
追加確認
結合テスト的にAPI Gatewayが実行されて、データがKinesis Data Streamsに入るところまでの一連の確認をおこないました。
ステージ名「test」で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画面(データビューアー)上にて送信したデータが入っていることが確認できました。
まとめ
今回のようなユースケースに対して、サーバレスで簡単に構築可能なことが最大のメリットではないでしょうか。 今回は記載しなかった、集計・分析の箇所もそのうち記載できればなと思います。