

# Lambda 関数を同期的に呼び出す
<a name="invocation-sync"></a>

関数を同期的に呼び出すと、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 でサポートされているグローバルコマンドラインオプション](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-options.html#cli-configure-options-list)」を参照してください。

以下の出力が表示されます。

```
{
    "ExecutedVersion": "$LATEST",
    "StatusCode": 200
}
```

次の図は、Lambda 関数を同期的に呼び出すクライアントを示しています。Lambda はイベントを関数に直接送信し、関数の応答を呼び出し側に返します。

![\[\]](http://docs.aws.amazon.com/ja_jp/lambda/latest/dg/images/invocation-sync.png)


`payload` は、JSON 形式のイベントを含む文字列です。AWS CLI が関数からのレスポンスを書き込むファイルの名前は `response.json` です。関数がオブジェクトまたはエラーを返す場合、レスポンス本文は JSON 形式のオブジェクトまたはエラーになります。エラーなしで終了した場合、レスポンス本文は `null` になります。

**注記**  
Lambda は外部拡張機能の完了を待たずにレスポンスを送信します。外部拡張機能は、実行環境内の独立したプロセスとして実行され、関数の呼び出しが完了した後も引き続き実行されます。詳細については、「[Lambda 拡張機能を使用して Lambda 関数を補強する](lambda-extensions.md)」を参照してください。

端末に表示されるコマンドの出力には、Lambda からのレスポンスのヘッダーにある情報が含まれます。これには、イベントを処理したバージョン ([エイリアス](configuration-aliases.md)を使用する場合に役立つ)、および 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バージョン 2](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) が必要です。

[AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) および `--log-type` コマンドオプションを使用して、呼び出しのログを取得します。レスポンスには、`LogResult`フィールドが含まれ、このフィールドには、呼び出しから base64 コードされた最大 4 KB のログが含まれます。

**Example ログ ID を取得します**  
次の例は、`LogResult`という名前の関数の`my-function`フィールドから*ログ ID * を取得する方法を示しています。  

```
aws lambda invoke --function-name my-function out --log-type Tail
```
次のような出力が表示されます。  

```
{
    "StatusCode": 200,
    "LogResult": "U1RBUlQgUmVxdWVzdElkOiA4N2QwNDRiOC1mMTU0LTExZTgtOGNkYS0yOTc0YzVlNGZiMjEgVmVyc2lvb...",
    "ExecutedVersion": "$LATEST"
}
```

**Example ログをデコードします**  
同じコマンドプロンプトで、`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 でサポートされているグローバルコマンドラインオプション](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-options.html#cli-configure-options-list)」を参照してください。  
以下の出力が表示されます。  

```
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 ](https://docs.microsoft.com/en-us/windows/wsl/install-win10) で使用できます。macOS ユーザーは、`base64 -D`を使用する必要があります 。

パラメータ、ヘッダー、エラーの完全なリストを含む `Invoke` API の詳細については、「[呼び出し](https://docs.aws.amazon.com/lambda/latest/api/API_Invoke.html)」を参照してください。

関数を直接呼び出す場合は、エラーレスポンスを確認し、再試行することができます。また、AWS CLI と AWS SDK は、クライアントのタイムアウト、スロットル、およびサービスエラーで自動的に再試行します。詳細については、「[Lambda での再試行動作について](invocation-retries.md)」を参照してください。