Lambda の主要な概念を理解する
Lambda は、関数のインスタンスを実行してイベントを処理するイベント駆動型のコンピューティングサービスです。Lambda API を使用して関数を直接呼び出すことができます。または、AWS のサービスあるいはリソースを設定して関数を呼び出すことができます。
以下のセクションでは、Lambda 関数、イベント駆動型プログラミングモデル、および関数が実行される環境の主要な概念について説明します。
機能
関数とは、Lambda でコードを実行するために呼び出すことができるリソースです。関数には、ユーザーがその関数に渡す、または他の AWS のサービスから関数に送信されるイベントを処理するためのコードが記述されています。
Trigger トリガー)
トリガーは、Lambda 関数を呼び出すリソースまたは設定です。トリガーの例としては、関数を呼び出すように設定できる AWS のサービスやイベントソースマッピングなどがあります。イベントソースマッピングは、ストリームまたはキューからアイテムを読み取り、関数を呼び出す Lambda のリソースです。詳細については、Lambda 関数の呼び出しメソッドについておよび他の AWS サービスからのイベントを使用した Lambda の呼び出しを参照してください。
イベント
イベントは、処理する Lambda 関数のデータを含む JSON 形式のドキュメントです。イベントは、ランタイムによりオブジェクトに変換された上で、関数のコードに渡されます。関数を呼び出すときは、イベントの構造とコンテンツを決定します。
例 カスタムイベント - 気象データ
{ "TemperatureK": 281, "WindKmh": -3, "HumidityPct": 0.55, "PressureHPa": 1020 }
AWS のサービスで関数を呼び出す場合、そのイベントのシェイプはサービスによって定義されます。
例 サービスイベント — Amazon SNS 通知
{ "Records": [ { "Sns": { "Timestamp": "2019-01-02T12:45:07.000Z", "Signature": "tcc6faL2yUC6dgZdmrwh1Y4cGa/ebXEkAi6RibDsvpi+tE/1+82j...65r==", "MessageId": "95df01b4-ee98-5cb9-9903-4c221d41eb5e", "Message": "Hello from SNS!", ...
AWS のサービスのイベントの詳細については、「他の AWS サービスからのイベントを使用した Lambda の呼び出し」を参照してください。
実行環境
実行環境は、Lambda 関数のための、安全で分離されたランタイム環境を提供します。関数の実行に必要なプロセスとリソースが、実行環境により管理されます。実行環境からは、関数と、その関数に関連付けられた任意の拡張機能のために、ライフサイクルのサポートが提供されます。
詳細については、「Lambda 実行環境のライフサイクルを理解する」を参照してください。
デプロイパッケージ
Lambda 関数コードをデプロイするには、デプロイパッケージを使用します。Lambda では、次の 2 種類のデプロイパッケージがサポートされます。
-
関数コードとその依存関係を格納している ZIP ファイルアーカイブ。Lambda は、関数のためのオペレーティングシステムとランタイムを提供します。詳細については、「Lambda 関数の .zip ファイルアーカイブとしてのデプロイ」を参照してください。
-
Open Container Initiative (OCI)
の仕様に準拠したコンテナーイメージ。関数のコードと依存関係をイメージに追加します。また、オペレーティングシステムと Lambda ランタイムを含める必要があります。詳細については、「コンテナイメージを使用した Lambda 関数の作成」を参照してください。
ランタイム
ランタイムでは、実行環境で実行される言語固有の環境が提供されます。ランタイムは、呼び出しイベント、コンテキスト情報、およびレスポンスを Lambda と関数の間で中継します。Lambda が提供するランタイムを使用することも、独自に構築することもできます。コードを .zip ファイルアーカイブとしてパッケージ化する場合は、プログラミング言語に適合したランタイムを使用するように、その関数を設定する必要があります。コンテナイメージの場合は、イメージをビルドするときにランタイムをインクルードします。
詳細については、「Lambda ランタイム」を参照してください。
Layer
Lambda レイヤーは、追加のコードまたはデータを含むことができる .zip ファイルアーカイブです。レイヤーには、ライブラリ、 カスタムランタイム 、データ、または設定ファイルを含めることができます。
レイヤーにより、Lambda 関数で使用するライブラリとその他の依存関係をパッケージ化する便利な方法が利用できます。レイヤーを使用することで、アップロードされたデプロイメントアーカイブのサイズを削減し、コードをデプロイするスピードを速めることができます。レイヤーを使用すると、コードの共有と責任の分離を促進し、ビジネスロジックの記述をより迅速に繰り返すことができます。
各関数につき最大 5 つのレイヤーを含めることができます。レイヤーは、標準の Lambda デプロイサイズクォータに対してカウントされます。関数にレイヤーを含むと、実行環境においてコンテンツが /opt
ディレクトリに抽出されます。
デフォルトでは、作成したレイヤーは AWS アカウントに対してプライベートになります。レイヤーを他のアカウントと共有するか、またはパブリックにするか選ぶことができます。別のアカウントによって公開されたレイヤーを関数が消費する場合、関数は削除後にレイヤーバージョンを引き続き使用することができます。または、レイヤーへのアクセス権限が呼び出されます。しかし、削除されたレイヤーバージョンを使用して新しい関数を作成したり、関数を更新することはできません。
コンテナイメージとしてデプロイされた関数はレイヤーを使用しません。代わりに、コンテナイメージをビルドする際、必要なランタイム、ライブラリ、およびその他の依存関係を、そのイメージ内にパッケージ化します。
詳細については、「レイヤーによる Lambda 依存関係の管理」を参照してください。
同時実行
同時実行数とは、ある時点で関数が処理しているリクエストの数を指します。関数が呼び出されると、Lambda はその関数のインスタンスをプロビジョニングしてイベントを処理します。関数コードの実行が完了すると、別のリクエストを処理できます。リクエストの処理中に関数が再度呼び出されると、別のインスタンスがプロビジョンされるため、関数の同時実行数が増加します。
同時実行数は、AWS リージョンレベルのクォータの対象となります。個々の関数を設定して、同時実行数を制限したり、特定の同時実行数を達成できるようにしたりすることもできます。詳細については、「関数に対する予約済み同時実行数の設定」を参照してください。
修飾子
関数を呼び出したり表示したりするときに、バージョンまたはエイリアスを指定するための修飾子を含めることができます。バージョンは、数値修飾子を持つ関数のコードと設定の変更不可能なスナップショットです。例えば、my-function:1
と指定します。エイリアスは、バージョンを指すポインタです。このポインタでは、別のバージョンにマップしたり、2 つのバージョン間でトラフィックを分割したりするための更新が可能です。例えば、my-function:BLUE
と指定します。バージョンとエイリアスを一緒に使用して、クライアントが関数を呼び出すための安定したインターフェイスを提供することができます。
詳細については、「Lambda 関数のバージョンを管理する」を参照してください。
デスティネーション
送信先は、Lambda が非同期呼び出しからイベントを送信できる AWS リソースです。処理に失敗したイベントの送信先を設定できます。一部のサービスでは、正常に処理されたイベントの宛先もサポートします。
詳細については、「送信先の追加」を参照してください。