AWS Lambda
開発者ガイド

AWS Lambda 実行コンテキスト

AWS Lambda が Lambda 関数を実行するとき、Lambda 関数を実行するために必要なリソースがプロビジョニングおよび管理されます。Lambda 関数を作成する際に、Lambda 関数に許可するメモリ容量や最大実行時間などの設定情報を指定します。Lambda 関数が呼び出されると、AWS Lambda は指定する構成設定に基づいて実行コンテキストを起動します。実行コンテキストとは、データベース接続あるいは HTTP エンドポイントなど、Lambda 関数コードのすべての外部依存関係を初期化する一時的なランタイム環境です。これにより、次に説明するように、「コールドスタート」やこれらの外部依存関係を初期化する必要がなくなるため、後続の呼び出しパフォーマンスが向上します。

実行コンテキストの設定には時間がかかります。また、「ブートストラップ」が必要なため、Lambda 関数を呼び出すたびに若干のレイテンシーが発生します。通常、この遅延は Lambda 関数を初めて呼び出したとき、または更新されたときに発生します。Lambda 関数を連続して呼び出す場合、AWS Lambda はできる限り実行コンテキストを再利用します。

Lambda 関数が実行されると、AWS Lambda は別の Lambda 関数呼び出しに備えて、実行コンテキストを一定期間維持します。実際には、サービスは Lambda 関数の完了後実行コンテキストをフリーズさせ、再び Lambda 関数が呼び出された際に AWS Lambda がコンテキストを再利用する場合は、コンテキストを解凍して再利用します。実行コンテキストを再利用するこのアプローチには、次のような影響があります。

  • Lambda 関数内の宣言 (handler コード以外は、「プログラミングモデル」を参照) は、関数が再度呼び出された際に追加で最適化されない限り、初期化状態を維持します。たとえば、Lambda 関数がデータベース接続を確立する場合、連続した呼び出しでは接続を再確立する代わりに元の接続が使用されます。接続を作成する前に接続が存在するかどうかを確認するロジックをコードに追加することをお勧めします。

  • 各実行コンテキストには、/tmp ディレクトリに 512 MB の追加ディスク領域があります。ディレクトリのコンテンツは、実行コンテキストが停止された際に維持され、複数の呼び出しに使用できる一時的なキャッシュを提供します。キャッシュに保存したデータが存在するかどうかを確認するための追加コードを追加できます。デプロイ制限の詳細については、「AWS Lambda の制限」を参照してください。

  • Lambda 関数で開始され、関数の終了時に完了しなかったバックグラウンド処理やコールバックは、AWS Lambda が実行コンテキストを再利用する場合に再開されます。コードのバックグラウンド処理またはコールバック (Node.js の場合) はコード終了までに完了させてください。

Lambda 関数コードを記述するときは、AWS Lambda によって後続の関数の呼び出しに実行コンテキストが自動的に再利用されると想定しないでください。他の要因で AWS Lambda によって新しい実行コンテキストが作成される場合があるため、データベース接続の失敗など予期しない結果になることがあります。