

# Lambda を使用したコードの実行
<a name="concepts-how-lambda-runs-code"></a>

Lambda 関数を記述する際、独自のサーバーレス環境で実行するコードを作成します。Lambda が実際にコードを実行する方法を理解するには、コードが Lambda とやり取りする方法を定義するプログラミングモデルと、Lambda がコードのランタイム環境を管理する方法を決定する実行環境ライフサイクルの 2 つが重要となります。

## Lambda プログラミングモデル
<a name="concepts-progmodel-overview"></a>

Python、Java、その他のサポートされている言語で記述しているかを問わず、Lambda がコードと連携するための共通のルールセットとしてモデル関数をプログラミングします。プログラミングモデルには、ランタイムとハンドラーが含まれています。

**標準関数の場合**

1. Lambda はイベントを受け取ります。

1. Lambda はランタイムを使用して、コードで使用できる形式でイベントを準備します。

1. ランタイムは、フォーマットされたイベントをハンドラーに送信します。

1. ハンドラーは、記述したコードを使用してイベントを処理します。

**耐久性のある関数の場合**

1. Lambda はイベントを受け取る

1. ランタイムはイベントと DurableContext の両方を準備します

1. ハンドラーは次のことができます。
   + 自動チェックポイントを使用してステップを処理する
   + リソースを消費せずに実行を一時停止する
   + 最後に成功したチェックポイントから再開する
   + ステップ間で状態を維持する

このモデルで重要なのは*ハンドラー*であり、Lambda がコードによって処理されるイベントを送信します。これをコードへのエントリポイントと考えてください。Lambda はイベントを受信すると、このイベントと一部のコンテキスト情報をハンドラーに渡します。次に、ハンドラーはコードを実行してこれらのイベントを処理します。例として、Amazon S3 へのファイルアップロード、画像分析、データベース更新などが挙げられます。コードがイベントの処理を完了すると、ハンドラーは次のイベントを処理する準備が整います。

## Lambda 実行モデル
<a name="concepts-exec-env-overview"></a>

プログラミングモデルは Lambda がコードとやり取りする方法を定義しますが、実行環境は Lambda が関数を実際に実行する場所です。関数専用に作成された安全で分離されたコンピューティングスペースです。

**各環境は、標準関数と耐久性のある関数によって異なるライフサイクルに従います。**

**標準関数 (最大 15 分):**

1. **初期化:** 環境セットアップとコードの読み込み

1. **呼び出し:** 関数コードの単一実行

1. **シャットダウン:** 環境クリーンアップ

**耐久性のある関数 (最大 1 年):**

1. **初期化:** 環境と耐久性のある状態のセットアップ

1. **呼び出し:** 自動チェックポイントを使用した複数ステップ

1. **待機状態:** リソースを消費せずに実行を一時停止

1. **再開:** 最後のチェックポイントから再開

1. **シャットダウン:** 耐久性のある状態のクリーンアップ

この環境は、関数の実行の重要な側面を担っています。関数にメモリと一時的なストレージ用の `/tmp` ディレクトリを提供します。**耐久性のある関数では、以下の内容も管理します。**
+ ステップ間の自動的な状態永続性
+ チェックポイントのストレージと復旧
+ 待機状態の調整
+ 長時間の実行での進捗状況の追跡