カスタムランタイムに Lambda ランタイム API を使用する
AWS Lambda では、カスタムランタイムの HTTP API を使用して Lambda の呼び出しイベントを受け取り、レスポンスデータを Lambda の実行環境に送り返します。このセクションでは、Lambda ランタイム API の API リファレンスについて説明します。
Lambda マネージドインスタンスが同時リクエストをサポートする
Lambda マネージドインスタンスは、Lambda (デフォルト) 関数と同じランタイム API を使用します。主な違いは、マネージドインスタンスは、設定された AWS_LAMBDA_MAX_CONCURRENCY 制限まで同時 /next および /response リクエストを受け入れることができることです。これにより、1 つの実行環境内で複数の呼び出しを同時に処理できます。マネージドインスタンスの詳細については、「Lambda マネージドインスタンスの実行環境について理解する」を参照してください。
ランタイム API バージョン 2018-06-01 の OpenAPI 仕様は、runtime-api.zip から入手できます。
API リクエスト URL を作成するには、ランタイムは AWS_LAMBDA_RUNTIME_API 環境変数から API エンドポイントを取得し、API バージョンを追加し、目的のリソースパスを追加します。
例リクエスト
curl "http://${AWS_LAMBDA_RUNTIME_API}/2018-06-01/runtime/invocation/next"
次の呼び出し
パス – /runtime/invocation/next
メソッド - GET
ランタイムは、このメッセージを Lambda に送信して、呼び出しイベントをリクエストします。レスポンス本文には、呼び出しのペイロードが含まれます。これは、関数トリガーのイベントデータを含む JSON ドキュメントです。レスポンスヘッダーには、呼び出しに関する追加データが含まれます。
レスポンスヘッダー
-
Lambda-Runtime-Aws-Request-Id– 関数の呼び出しをトリガーしたイベント。イベントソースがリクエスト ID を提供するか、Lambda が取り込み時にリクエスト ID を自動生成します。1 つのリクエスト ID で呼び出しが複数行われることがあります。レスポンスまたはエラーを送信するときは URL パスでこれを使用します。例えば、
8476a536-e9f4-11e8-9739-2dfe598c3fcd。 -
Lambda-Runtime-Deadline-Ms- 関数がタイムアウトした日付 (Unix 時間のミリ秒)。例えば、
1542409706888。 -
Lambda-Runtime-Invoked-Function-Arn- 呼び出しで指定されている Lambda 関数、バージョン、またはエイリアスの ARN。例えば、
arn:aws:lambda:us-east-2:123456789012:function:custom-runtime。 -
Lambda-Runtime-Trace-Id- AWS X-Ray トレースヘッダー。例えば、
Root=1-5bef4de7-ad49b0e87f6ef6c87fc2e700;Parent=9a9197af755a6419;Sampled=1。 -
Lambda-Runtime-Client-Context- AWS Mobile SDK の呼び出しにおいて、クライアントアプリケーションおよびデバイスに関するデータ。 -
Lambda-Runtime-Cognito-Identity- AWS Mobile SDK からの呼び出しの場合は、Amazon Cognito ID プロバイダーに関するデータ。 -
Lambda-Runtime-Invocation-Id– この呼び出しの一意の識別子。
応答が遅れる可能性があるため、GET リクエストにタイムアウトを設定しないでください。Lambda がランタイムをブートストラップするときと、返すイベントがランタイムにあるときとの間に、ランタイムプロセスが数秒間停止する可能性があります。
リクエスト ID (Lambda-Runtime-Aws-Request-Id) は一意のイベントを特定します。リクエスト ID はイベントソースから提供されるか Lambda が取り込み時に自動生成します。レスポンスまたはエラーを送信するときはこれを URL パスで使用します。
呼び出し ID (Lambda-Runtime-Invocation-Id) は、1 回のイベントの呼び出し試行を表します。1 つのリクエスト ID で呼び出しが複数行われることがあり、それぞれ固有の呼び出し ID が付きます。Lambda は各呼び出し ID を 1 回のみ使用し、再利用はしません。この値を /response および /error 呼び出し時にエコーバックします。ヘッダーは既存のランタイムとの下位互換性を保つためのオプションです。このヘッダーを省略しても拒否がトリガーされることはありません。Lambda は、ヘッダーはあるがその値がアクティブな呼び出しと一致しない場合にのみ、400 InvalidInvocationId を使って拒否します。
トレースヘッダーには、トレース ID、親 ID、サンプリングデシジョンが含まれます。リクエストがサンプリングされている場合、リクエストが Lambda、またはアップストリームサービスによってサンプリングされた場合。ランタイムは、_X_AMZN_TRACE_ID をヘッダーの値に設定します。X-Ray SDK はこの値を読み込んで ID を取得し、リクエストを追跡するかどうかを判断します。
呼び出しレスポンス
パス – /runtime/invocation/AwsRequestId/response
メソッド - POST
関数が実行されて完了すると、ランタイムは呼び出し応答を Lambda に送信します。同期呼び出しの場合、Lambda はそのレスポンスをクライアントに送ります。
リクエストヘッダー
Lambda-Runtime-Invocation-Id – /next から届いた値をエコーバックします。Lambda は、値がアクティブな呼び出しと一致しない場合に 400 InvalidInvocationId を使ってリクエストを拒否します。
例成功リクエスト
REQUEST_ID=156cb537-e2d4-11e8-9b34-d36013741fb9 INVOCATION_ID=<value from Lambda-Runtime-Invocation-Id response header> curl "http://${AWS_LAMBDA_RUNTIME_API}/2018-06-01/runtime/invocation/$REQUEST_ID/response" -d "SUCCESS" --header "Lambda-Runtime-Invocation-Id: $INVOCATION_ID"
初期化エラー
関数がエラーを返すか、初期化中にランタイムでエラーが発生した場合、ランタイムはこのメソッドを使用してエラーを Lambda に報告します。
パス – /runtime/init/error
メソッド - POST
ヘッダー
Lambda-Runtime-Function-Error-Type – ランタイムで発生したエラータイプ。このヘッダーはオプションです。Lambda は任意の文字列値を受け入れていますが、<Category.Reason> の形式 (Category が Runtime または Function、Reason が大文字で始まる) を使用することが推奨されます。例えば、次のようになります。
Runtime.NoSuchHandlerRuntime.APIKeyNotFoundRuntime.ConfigInvalidRuntime.BeforeSnapshotError(SnapStart の場合)Runtime.UnknownReason
このパターンに一致しない値は Runtime.Unknown または Function.Unknown に正規化されます。
Body パラメータ
ErrorRequest - エラーに関する情報。必須: いいえ。
このフィールドは、次の構造を持つ JSON オブジェクトです。
{ errorMessage: string (text description of the error), errorType: string, stackTrace: array of strings }
Lambda は、errorType として任意の値を受け入れることに注意してください。
次の例は、呼び出しで指定されたイベントデータを関数で解析できなかった Lambda 関数のエラーメッセージを示しています。
例関数エラー
{ "errorMessage" : "Error parsing event data.", "errorType" : "InvalidEventDataException", "stackTrace": [ ] }
レスポンス本文のパラメータ
StatusResponse– 文字列。202 応答コードとともに送信されるステータス情報。ErrorResponse- エラー応答コードとともに送信される追加のエラー情報。ErrorResponse には、エラータイプとエラーメッセージが含まれています。
レスポンスコード
-
202 - Accepted
-
403 – Forbidden
-
500 – Container error 回復不能な状態。ランタイムはすぐに終了することが望ましいです。
例初期化エラーリクエスト
ERROR="{\"errorMessage\" : \"Failed to load function.\", \"errorType\" : \"InvalidFunctionException\"}" curl "http://${AWS_LAMBDA_RUNTIME_API}/2018-06-01/runtime/init/error" -d "$ERROR" --header "Lambda-Runtime-Function-Error-Type: Unhandled"
呼び出しエラー
関数がエラーを返すか、ランタイムでエラーが発生した場合、ランタイムはこのメソッドを使用してエラーを Lambda に報告します。
パス – /runtime/invocation/AwsRequestId/error
メソッド - POST
ヘッダー
Lambda-Runtime-Function-Error-Type – ランタイムで発生したエラータイプ。必須: いいえ。
このヘッダーは、文字列値で構成されています。Lambda はどのような文字列でも受け入れますが、形式は <category.reason> にすることが推奨されます。以下に例を示します。
Runtime.NoSuchHandler
Runtime.APIKeyNotFound
Runtime.ConfigInvalid
Runtime.UnknownReason
Lambda-Runtime-Invocation-Id – /next から届いた値をエコーバックします。Lambda は、値がアクティブな呼び出しと一致しない場合に 400 InvalidInvocationId を使ってリクエストを拒否します。
Body パラメータ
ErrorRequest - エラーに関する情報。必須: いいえ。
このフィールドは、次の構造を持つ JSON オブジェクトです。
{ errorMessage: string (text description of the error), errorType: string, stackTrace: array of strings }
Lambda は、errorType として任意の値を受け入れることに注意してください。
次の例は、呼び出しで指定されたイベントデータを関数で解析できなかった Lambda 関数のエラーメッセージを示しています。
例関数エラー
{ "errorMessage" : "Error parsing event data.", "errorType" : "InvalidEventDataException", "stackTrace": [ ] }
レスポンス本文のパラメータ
StatusResponse– 文字列。202 応答コードとともに送信されるステータス情報。ErrorResponse- エラー応答コードとともに送信される追加のエラー情報。ErrorResponse には、エラータイプとエラーメッセージが含まれています。
レスポンスコード
-
202 - Accepted
-
400 – Bad Request
-
403 – Forbidden
-
500 – Container error 回復不能な状態。ランタイムはすぐに終了することが望ましいです。
例エラーリクエスト
REQUEST_ID=156cb537-e2d4-11e8-9b34-d36013741fb9 ERROR="{\"errorMessage\" : \"Error parsing event data.\", \"errorType\" : \"InvalidEventDataException\"}" curl "http://${AWS_LAMBDA_RUNTIME_API}/2018-06-01/runtime/invocation/$REQUEST_ID/error" -d "$ERROR" --header "Lambda-Runtime-Function-Error-Type: Unhandled"
復元後 (SnapStart にのみ適用)
パス – /runtime/restore/next
メソッド - GET
スナップショット前のフックが完了すると、ランタイムが GET /runtime/restore/next を呼び出します。これは、/runtime/invocation/next と同様に、ランタイムで実行環境のスナップショットを作成する準備が整ったことを Lambda に知らせるイテレーター形式のブロッキング呼び出しです。リクエストは、Lambda がスナップショットから実行環境を復元するまでブロックされ、その後、HTTP 200 レスポンスを本文が空の状態で返します。
ヘッダー。
必要なヘッダーはありません。
レスポンスコード
-
200 – Lambda が実行環境を復元しました。復元後のフックを実行します。レスポンスの本文は空です。
-
403 – Forbidden ランタイムは
/restore/nextが許可される状態ではありません (ランタイムが既に/invocation/nextまたは/restore/nextを呼び出しているなど)。 -
404 – SnapStart is not enabled for this function.
-
500 – Container error 実行環境は回復不可能な状態です。ランタイムのプロセスを終了します。
リクエストの構文
GET /2018-06-01/runtime/restore/next HTTP/1.1 Host: ${AWS_LAMBDA_RUNTIME_API}
レスポンスの構文
HTTP/1.1 200 OK Content-Length: 0
注記
このランタイム API リクエスト (またはその他ランタイム API リクエスト) にはクライアント側のソケットまたは読み取りタイムアウトを設定しないでください。こちらはイテレーター方式のブロッキング呼び出しです。Lambda はリクエストが開いている間は実行環境を停止します。このリクエストは、Lambda サービスから接続がアイドル状態とみなされることなく、スナップショットの有効期間中 (場合によっては数日、数週間、またはそれ以上) 開いたままにすることができます。
復元後 (SnapStart にのみ該当)
復元後フックが失敗するか、復元中にランタイムでエラーが発生した場合、ランタイムはこのメソッドを使用してエラーを Lambda に報告します。Lambda は処理中の呼び出しに失敗し、実行環境を破棄します。
パス – /runtime/restore/error
メソッド - POST
ヘッダー
Lambda-Runtime-Function-Error-Type – ランタイムで発生したエラータイプ。このヘッダーはオプションです。Lambda は任意の文字列値を受け入れていますが、<Category.Reason> の形式 (Category が Runtime または Function、Reason が大文字で始まる) を使用することが推奨されます (例 Runtime.AfterRestoreError)。このパターンに一致しない値は Runtime.Unknown または Function.Unknown に正規化されます。
レスポンスコード
-
202 - Accepted レスポンスの本文は
{"status":"OK"}です。ランタイムはプロセスを終わらせる必要があります。 -
403 – Forbidden ランタイムは
/restore/nextが許可される状態ではありません (/restore/errorが呼び出されていないなど)。 -
404 – SnapStart is not enabled for this function.
-
500 – Container error 実行環境は回復不可能な状態です。ランタイムのプロセスを終了します。
例リクエスト例
POST /2018-06-01/runtime/restore/error HTTP/1.1 Host: ${AWS_LAMBDA_RUNTIME_API} Lambda-Runtime-Function-Error-Type: Runtime.AfterRestoreError
例レスポンス例
HTTP/1.1 202 Accepted Content-Type: application/json {"status":"OK"}