Lambda 関数ごとに同時実行数の上限値を設定する方法を教えてください

2024.04.22

困っていた内容

1 つのアカウント内で複数の Lambda 関数を実行します。
A の関数の同時実行数がクォータ上限値に達したことによって、B の関数がスロットリングするような状況は避けたいです。
一方で、アカウント全体の同時実行数の上限値は引き上げたくありません。
関数ごとに同時実行数の上限値を割り振ることは可能なのか教えてください。

どう対応すればいいの?

予約済み同時実行(reserved concurrency,予約された同時実行)をご利用ください。
関数ごとに同時実行数の上限値を確保することができます。
予約済み同時実行の設定に追加料金は発生しません。

Lambda 関数のスケーリング - AWS Lambda

関数のために一定数の同時実行が常に利用可能であることを確実にしたい場合は、予約された同時実行を使用します。

予約された同時実行は、関数に割り当てる同時インスタンスの最大数です。予約された同時実行を 1 つの関数専用の同時実行にすると、他の関数がその同時実行を使用することはできません。つまり、予約された同時実行の設定は、他の関数が利用できる同時実行のプールに影響を与える可能性があります。予約された同時実行がない関数は、残りの予約されていない同時実行のプールを共有します。

予約された同時実行の設定は、アカウント全体の同時実行上限にカウントされます。関数に対して予約済み同時実行を設定する場合、料金はかかりません。

なお、プロビジョニング済み同時実行(Configuring provisioned concurrency)では同時実行数の上限値を設定することはできません。
また、別途追加料金が発生します。
予約済み同時実行と間違えないように注意してください

予約済み同時実行とプロビジョニング済み同時実行の併用は可能です。

Lambda 関数のスケーリング - AWS Lambda

同時実行コントロールには、予約された同時実行とプロビジョニングされた同時実行の 2 つのタイプのコントロールがあります。

・予約された同時実行は、関数のためにアカウントの同時実行の一部を予約するために使用します。これは、他の関数が利用可能な予約されていない同時実行のすべてを使い切ってしまわないようにするために役立ちます。

・プロビジョニングされた同時実行は、関数用の多数の環境インスタンスを事前に初期化するために使用します。これはコールドスタートレイテンシーの削減に役立ちます。

やってみた

マネジメントコンソールから予約済み同時実行を設定してみます。

1.同時実行を予約する関数を選択します。
2.「設定」のタブから「同時実行」を選択します。
3.同時実行の「編集」をクリックします。

4.「同時実行の予約」を選択し、予約したい同時実行数を入力します。
5.入力が完了したら「保存」をクリックします。

これで予約済み同時実行の設定は完了です。

参考資料

予約済同時実行数の設定 - AWS Lambda
Lambda 関数のスケーリング - AWS Lambda
AWS Lambda の予約済同時実行数の設定によるテナント多層化戦略の実装 | Amazon Web Services ブログ