メニュー
AWS Lambda
開発者ガイド

AWS Lambda: 仕組み

AWS Lambda はどのようにコードを実行するのですか?コンテナモデル

AWS Lambda がユーザーに代わって Lambda 関数を実行する場合、Lambda 関数の実行に必要なリソースのプロビジョニングと管理を処理します。Lambda 関数を作成する際に、Lambda 関数に許可するメモリ容量や最大実行時間などの設定情報を指定します。Lambda 関数が呼び出されると、AWS Lambda は指定された構成設定い基づいてコンテナ (実行環境) を起動します。

注記

このセクションの内容は情報のみです。AWS Lambda はコンテナの作成と削除を管理します。お客様がコンテナを管理するための AWS Lambda API はありません。

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

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

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

     

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

     

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

注記

Lambda 関数を記述する場合、AWS Lambda が常にコンテナを再利用することを前提にしないでください。AWS Lambda がコンテナを再利用しない場合もあります。その他さまざまな要因によって、AWS Lambda が既存コンテナを再利用せずに、単純に新しいコンテナを作成する場合もあります。