シャード数を増やさずに Kinesis Data Streams からトリガーされる Lambda の実行数を増やしたい時の対処方法
困っていた内容
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
で指定することにより変更が可能です。
--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 )
まとめ
シャードを追加してスループットの改善を図る方法以外に、シャードあたりの同時バッチ数を上げることによっても、コンシューマー側のボトルネックが解消できる可能性があることをお忘れなく。
この記事がどなたかのお役に立てば幸いです。