シャード数を増やさずに Kinesis Data Streams からトリガーされる Lambda の実行数を増やしたい時の対処方法

2022.10.27

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

困っていた内容

Kinesis Data Streams のコンシューマーに Lambda を利用しているのですが、将来的にはプロデューサーからのデータ量が増えることで Lambda の実行数がボトルネックになることを心配しています。

極力シャード数を増やさずにデータ量の増加に対応したいのですが、Kinesis Data Streams からトリガーされる Lambda の実行数を増やす方法はありますか?

結論

ParallelizationFactor の設定値を変更することで、シャードあたりの Lambda 実行数を増加させることが可能です。

Amazon Kinesis で AWS Lambda を使用する

ParallelizationFactor 設定を使用することで、複数の Lambda 呼び出しを同時に実行して Kinesis または DynamoDB データストリームの 1 つのシャードを処理します。Lambda がシャードからポーリングする同時バッチの数は、1 (デフォルト)~10 の並列化係数で指定できます。例えば、ParallelizationFactor を 2 に設定すると、最大 200 個の Lambda 呼び出しを同時に実行して、100 個の Kinesis データシャードを処理できます。

なお、AWS CLI を利用して ParallelizationFactor を変更する場合は、AWS CLI コマンドaws lambda update-event-source-mappingのオプション--parallelization-factorで指定することにより変更が可能です。

update-event-source-mapping

--parallelization-factor (integer) (Streams only) The number of batches to process from each shard concurrently.

マネジメントコンソール上で設定変更をする場合は、Lambda トリガーの編集画面にある追加設定「シャードあたりの同時バッチ」を変更します。

マネジメントコンソール上での設定箇所

1. Kinesis Data Streams のコンシューマーとなる Lambda を選択し、次画面上部にある「トリガーを追加」ボタンを押下
既にトリガーを作成済みの場合は、画面下部にトリガーが表示されているのでチェックボックスにチェックを入れてから、「編集」ボタンを押下

2. トリガーの設定画面にある「追加設定」を開く

3. シャードあたりの同時バッチに 1 ~ 10 の間で希望する値を入力(デフォルト値 1 )

まとめ

シャードを追加してスループットの改善を図る方法以外に、シャードあたりの同時バッチ数を上げることによっても、コンシューマー側のボトルネックが解消できる可能性があることをお忘れなく。

この記事がどなたかのお役に立てば幸いです。

参考資料