Lambda 関数の Inactive 状態を回避するにはどうすればよいですか?

2022.04.14

困っていた内容

Lambda 関数をコンテナとしてデプロイしたのですが、数週間利用しないと Inactive 状態になり、Inactive 状態だと呼び出しに失敗します。 Inactive 状態を回避するにはどうすればよいですか?

どう対応すればいいの?

Lambda 関数をコンテナとしてデプロイした場合、数週間利用しないと Inactive 状態になることが、以下の AWS 公式ドキュメントに記載されています。

コンテナイメージとして定義された関数の呼び出し - AWS Lambda

数週間にわたって関数が呼び出されない場合、Lambda は最適化されたバージョンを再利用し、関数は Inactive 状態に移行します。関数を再度アクティブにするには、関数を呼び出す必要があります。Lambda は最初の呼び出しを拒否し、関数は Lambda がイメージを再最適化するまで Pending 状態に入ります。その後、関数は Active 状態に戻ります。

Lambda 関数が Inactive な状態で呼び出すと、呼び出しに失敗します。

Lambda 関数の状態 - AWS Lambda

Inactive — Lambda 用に設定された外部リソースを再利用するのに十分な時間アイドル状態を維持した関数は非アクティブになります。非アクティブな関数を呼び出そうとすると、呼び出しは失敗し、関数リソースが再作成されるまで、Lambda は関数を保留状態に設定します。Lambda がリソースの再作成に失敗した場合、関数は非アクティブ状態に設定されます。

Lambda 関数の Inactive 状態への移行を避けるには、2 つの方法があります。

1. プロビジョニング済み同時実行を設定する

プロビジョニング済み同時実行の設定をすることで、Lambda 関数が Inactive 状態となることを避けることが可能です。 なお、プロビジョニング済み同時実行を設定した場合、Lambda 関数を呼び出していなくても料金が発生する点にはご注意ください。

インスタンスでリクエストが処理されない場合でも、初期化の料金は発生します。関数はプロビジョニングされた同時実行数で継続的に実行され、初期化および呼び出しのコストとは別に料金が発生します。詳細については、「AWS Lambda 料金表」を参照してください。

2. 定期的に Lambda 関数を呼び出す

1 週間に 1 回程度の頻度で該当の Lambda 関数を呼び出すことでも実現可能です。 定期的な呼び出しには Amazon EventBridge などを利用し、Lambda 関数を定期的に呼び出してください。

参考資料