Kinesis Data Streams のチュートリアルをやってみた
今回は Amazon Kinesis Data Streams の AWS 公式チュートリアルをやってみました。
Lambda の実行ログがチュートリアル内での想定と異なっていたので、その点についても紹介します。
動画
AWS 公式ドキュメント
今回参考にした AWS 公式ドキュメントは以下です。
手順
AWS 公式ドキュメントでは CLI を使用していますが、今回はマネジメントコンソール上で実施します。
1. IAM ロール作成
以下の設定で IAM ロールを作成します。
・信頼されたエンティティ: AWS Lambda
・アクセス許可: AWSLambdaKinesisExecutionRole
・Role name: lambda-kinesis-role
2. Lambda 関数作成
以下の設定で Lambda 関数を作成します。
・関数名: ProcessKinesisRecords
・ランタイム: Node.js 16.x
・アクセス権限: 1 で作成した IAM ロール
関数作成後に、AWS 公式ドキュメントから以下のコードをコピペしてデプロイします。
console.log('Loading function');
exports.handler = function(event, context) {
//console.log(JSON.stringify(event, null, 2));
event.Records.forEach(function(record) {
// Kinesis data is base64 encoded so decode here
var payload = Buffer.from(record.kinesis.data, 'base64').toString('ascii');
console.log('Decoded payload:', payload);
});
};
3. Kinesis Stream 作成
以下の設定で Kinesis Stream を作成します。
・データストリーム名: lambda-stream
・容量モード: プロビジョンド
4. Lambda トリガーに Kinesis Stream を設定
Lambda トリガーに、3 で作成した Kinesis Stream を指定します。
トリガーはすぐに有効になりました。
5. CloudShell から Kinesis Stream にデータ追加
Kinesis Stream へのデータ追加は AWS CLI の put-record
で行います。
今回は CloudShell から 実行します。
ここで AWS 公式ドキュメントの手順に 1 つ追加することがあります。
メッセージをエンコードする
AWS 公式ドキュメント内では、以下のコマンドが記載されています。
aws kinesis put-record --stream-name lambda-stream --partition-key 1 \
--data "Hello, this is a test."
上記のコマンドを実行することで、Kinesis Stream へのデータの追加は成功し、Lambda 関数も実行されます。
しかし、Lambda の実行ログを CloudWatch Logs で見ると、メッセージが文字化けしていました。
そこで、Kinesis Stream へ追加するデータを事前に base64 でエンコードします。
エンコードツールは何でも良いです。
僕は以下のサイトを使用しました。
AWS 公式ドキュメント内の、Hello, this is a test.
をエンコードすると、以下のようになります。
SGVsbG8sIHRoaXMgaXMgYSB0ZXN0Lg==
この文字列を put-record
の --data
に指定します。
aws kinesis put-record --stream-name lambda-stream --partition-key 1 \
--data "SGVsbG8sIHRoaXMgaXMgYSB0ZXN0Lg=="
CloudShell でコマンドを実行
put-record
でエンコードしたメッセージを Kinesis Stream に追加します。
6. Lambda の実行ログを CloudWatch Logs で確認
先ほど Kinesis Stream に追加したメッセージが Lambda で取得され、出力されているかを CloudWatch Logs で確認します。
メッセージがデコードされて出力されていることが確認できました。
AWS 公式ドキュメント内にも記載のある通り、メッセージを複数回追加すると、その分 Lambda 関数が実行されることも確認できます。
まとめ
今回は Amazon Kinesis Data Streams の AWS 公式チュートリアルをやってみました。
Kinesis Stream に追加するメッセージを base64 でエンコードするという点については勉強になりました。
参考になれば幸いです。
Discussion