Lambda 関数の「プロビジョニングされた同時実行」が利用されない事象を回避するには
困っていた内容
SQS のメッセージを処理する Lambda 関数を構築しました。
「プロビジョニングされた同時実行」を設定しましたが、ProvisionedConcurrentExecutions
メトリクスが記録されず、プロビジョニングされた同時実行が使用されていないようです。
なぜでしょうか。確認すべき点を教えてください。
どう対応すればいいの?
「プロビジョニングされた同時実行」を設定したエイリアス(バージョン)に、イベントソースマッピングを設定しているかを確認してください。
関数に対するプロビジョニングされた同時実行数の設定 - AWS Lambda
注記
プロビジョニング済み同時実行は、どの関数の $LATEST バージョンでも使用できません。
関数にイベントソースがある場合は、そのイベントソースが正しい関数エイリアスまたはバージョンを指していることを確認してください。正しくない場合、関数はプロビジョニング済み同時実行環境を使用しません。
「プロビジョニングされた同時実行」は、Lambda のエイリアスもしくはバージョンに対して設定し$LATEST
には設定できません。
また、SQS 等のトリガー(イベントソースマッピング)設定は、バージョン毎に独立して設定が可能です。
そのため、 Lambda 関数自体は正常に呼び出されているが、プロビジョニングされた同時実行が使用されない場合は、「プロビジョニングされた同時実行」とイベントソースマッピングのエイリアスやバージョンが一致しているかを確認してください。
確認方法として、例えば、Lambda コンソール(AWS マネジメントコンソール)から、トリガーの設定状況を確認する場合は、エイリアス等を選択した状態になっているかを確認してください。
また、Lambda 関数で出力される CloudWatch Logs のログストリーム名は実行しているバージョンが含まれます。
処理のログが出力されているログストリーム名から、$LATEST
や別のバージョン等を実行していないかを確認してください。
参考資料
Lambda には、ログストリームの標準的な命名規則があり、YYYY/MM/DD/[<FunctionVersion>]<InstanceId> の形式で設定します。
- Lambda 関数のメトリクスのタイプ - AWS Lambda
- 関数に対するプロビジョニングされた同時実行数の設定 - AWS Lambda
- Lambda でのプロビジョニングされた同時実行に関する問題をトラブルシューティングする | AWS re:Post
Lambda 関数を、プロビジョニングされた同時実行を設定した関数バージョンではなく、$LATEST バージョンで呼び出した。