Lambda 関数を同期的に呼び出す
関数を同期的に呼び出すと、Lambda は関数を実行し、レスポンスを待ちます。関数の実行が終了すると、Lambda は、呼び出された関数のバージョンなどの追加データとともに、関数のコードからのレスポンスを返します。AWS CLI を使用して関数を同期的に呼び出すには、invoke
コマンドを使用します。
aws lambda invoke --function-name
my-function
\ --cli-binary-format raw-in-base64-out \ --payload '{ "key": "value" }' response.json
AWS CLI バージョン 2 を使用している場合、cli-binary-format オプションは必須です。これをデフォルト設定にするには、aws configure set cli-binary-format raw-in-base64-out
を実行します。詳細については、バージョン 2 の AWS Command Line Interface ユーザーガイドの「AWS CLI でサポートされているグローバルコマンドラインオプション」を参照してください。
以下の出力が表示されます。
{
"ExecutedVersion": "$LATEST",
"StatusCode": 200
}
次の図は、Lambda 関数を同期的に呼び出すクライアントを示しています。Lambda はイベントを関数に直接送信し、関数の応答を呼び出し側に返します。
payload
は、JSON 形式のイベントを含む文字列です。AWS CLI が関数からのレスポンスを書き込むファイルの名前は response.json
です。関数がオブジェクトまたはエラーを返す場合、レスポンス本文は JSON 形式のオブジェクトまたはエラーになります。エラーなしで終了した場合、レスポンス本文は null
になります。
注記
Lambda は外部拡張機能の完了を待たずにレスポンスを送信します。外部拡張機能は、実行環境内の独立したプロセスとして実行され、関数の呼び出しが完了した後も引き続き実行されます。詳細については、「Lambda 拡張機能を使用して Lambda 関数を補強する」を参照してください。
端末に表示されるコマンドの出力には、Lambda からのレスポンスのヘッダーにある情報が含まれます。これには、イベントを処理したバージョン (エイリアスを使用する場合に役立つ)、および Lambda. から返されるステータスコードが含まれます。Lambda が関数を実行できた場合は、関数がエラーを返したとしても、ステータスコードは 200 です。
注記
タイムアウトが長い関数では、同期呼び出し中にレスポンスを待機している間に、クライアントが切断される場合があります。HTTP クライアント、SDK、ファイアウォール、プロキシ、またはオペレーティングシステムを構成して、タイムアウトまたはキープアライブ設定での長い接続を許可するようにしてください。
Lambda が関数を実行できない場合は、エラーが出力に表示されます。
aws lambda invoke --function-name
my-function
\ --cli-binary-format raw-in-base64-out \ --payload value response.json
次のような出力が表示されます。
An error occurred (InvalidRequestContentException) when calling the Invoke operation: Could not parse request body into json: Unrecognized token 'value': was expecting ('true', 'false' or 'null') at [Source: (byte[])"value"; line: 1, column: 11]
AWS CLI は、コマンドラインシェルでコマンドを使用して AWS サービスとやり取りするためのオープンソースツールです。このセクションの手順を完了するには、以下が必要です。
AWS CLI および --log-type
コマンドオプションを使用して、呼び出しのログを取得します。レスポンスには、LogResult
フィールドが含まれ、このフィールドには、呼び出しから base64 コードされた最大 4 KB のログが含まれます。
例 ログ ID を取得します
次の例は、LogResult
という名前の関数のmy-function
フィールドからログ ID を取得する方法を示しています。
aws lambda invoke --function-name my-function out --log-type Tail
次のような出力が表示されます。
{ "StatusCode": 200, "LogResult": "U1RBUlQgUmVxdWVzdElkOiA4N2QwNDRiOC1mMTU0LTExZTgtOGNkYS0yOTc0YzVlNGZiMjEgVmVyc2lvb...", "ExecutedVersion": "$LATEST" }
例 ログをデコードします
同じコマンドプロンプトで、base64
ユーティリティを使用してログをデコードします。次の例は、my-function
の base64 でエンコードされたログを取得する方法を示しています 。
aws lambda invoke --function-name my-function out --log-type Tail \ --query 'LogResult' --output text --cli-binary-format raw-in-base64-out | base64 --decode
AWS CLI バージョン 2 を使用している場合、cli-binary-format オプションは必須です。これをデフォルト設定にするには、aws configure set cli-binary-format raw-in-base64-out
を実行します。詳細については、バージョン 2 の AWS Command Line Interface ユーザーガイドの「AWS CLI でサポートされているグローバルコマンドラインオプション」を参照してください。
以下の出力が表示されます。
START RequestId: 57f231fb-1730-4395-85cb-4f71bd2b87b8 Version: $LATEST "AWS_SESSION_TOKEN": "AgoJb3JpZ2luX2VjELj...", "_X_AMZN_TRACE_ID": "Root=1-5d02e5ca-f5792818b6fe8368e5b51d50;Parent=191db58857df8395;Sampled=0"",ask/lib:/opt/lib", END RequestId: 57f231fb-1730-4395-85cb-4f71bd2b87b8 REPORT RequestId: 57f231fb-1730-4395-85cb-4f71bd2b87b8 Duration: 79.67 ms Billed Duration: 80 ms Memory Size: 128 MB Max Memory Used: 73 MB
base64
このユーティリティは、Linux、macOS、および Windows の Ubuntu base64 -D
を使用する必要があります 。
パラメータ、ヘッダー、エラーの完全なリストを含む Invoke
API の詳細については、「呼び出し」を参照してください。
関数を直接呼び出す場合は、エラーレスポンスを確認し、再試行することができます。また、AWS CLI と AWS SDK は、クライアントのタイムアウト、スロットル、およびサービスエラーで自動的に再試行します。詳細については、「Lambda での再試行動作について」を参照してください。