Lambda プログラミングモデルを理解する - AWS Lambda

Lambda プログラミングモデルを理解する

Lambda では、すべてのランタイムに共通のプログラミングモデルを提供しています。プログラミングモデルとは、コードと Lambda システムとの間のインターフェイスを定義するものです。関数設定のハンドラを定義して、関数へのエントリポイントを Lambda に伝えます。ランタイムは、呼び出しイベント、および関数名やリクエスト ID などのコンテキストを含むオブジェクトをハンドラーに渡します。

ハンドラーが最初のイベントの処理を終了すると、ランタイムは別のイベントを送信します。関数のクラスはメモリ内にとどまるため、初期化コードにおいて、ハンドラーメソッドの外部で宣言されたクライアントおよび変数は再利用が可能です。後続のイベントの処理時間を短縮するには、初期化中に AWS SDK クライアントなどの再利用可能なリソースを作成します。初期化されると、関数の各インスタンスは数千件のリクエストを処理できます。

また、関数は、/tmp ディレクトリ内のローカルストレージにもアクセスできます。ディレクトリのコンテンツは、実行環境が停止された際に維持され、複数の呼び出しに使用できる一時的なキャッシュを提供します。詳細については、「Lambda 実行環境」を参照してください。

AWS X-Ray トレースが有効な場合、ランタイムは初期化と実行のために、別個のサブセグメントを記録します。

ランタイムは、関数からのログ出力をキャプチャし、Amazon CloudWatch Logs に送信します。ランタイムは、関数の出力をログに記録するだけでなく、関数の呼び出しの開始時と終了時にエントリも記録します。これには、リクエスト ID、請求期間、初期化期間、およびその他の詳細を含むレポートログが含まれます。関数によりエラーがスローされた場合、そのエラーは、ランタイムにより呼び出し元に返信されます。

注記

ログ記録は、CloudWatch Logs クォータの対象となります。ログデータは、スロットリングが原因で失われることがあります。また、場合によっては、関数のインスタンス停止時に失われることがあります。

Lambda は、需要の増加に応じて追加のインスタンスを実行し、需要の減少に応じてインスタンスを停止することで関数をスケーリングします。このモデルは、次のようなアプリケーションアーキテクチャにおいてばらつきが生じます。

  • 特に明記されていない限り、受信リクエストは、順不同または同時に処理されます。

  • 関数のインスタンスが長く存続することを想定せず、アプリケーションの状態を別の場所に保存します。

  • ローカルストレージとクラスレベルのオブジェクトを使用することで、パフォーマンスを向上させられます。その場合でも、デプロイパッケージのサイズと実行環境に転送するデータの量は最小限に抑えてください。

プログラミング言語別のプログラミングモデルの実践的な入門ガイドについては、以下の章を参照してください。