

# HTTP API Lambda 統合に関する問題のトラブルシューティング
<a name="http-api-troubleshooting-lambda"></a>

次に、HTTP API で [AWS Lambda の統合](http-api-develop-integrations-lambda.md) を使用するときに発生する可能性のあるエラーや問題に関するトラブルシューティングのアドバイスを示します。

## 問題: Lambda 統合のある API が `{"message":"Internal Server Error"}` を返します
<a name="http-api-troubleshooting-lambda-internal-server-error"></a>

内部サーバーエラーのトラブルシューティングを行うには、ログ形式に `$context.integrationErrorMessage` [ログ記録変数](http-api-logging-variables.md)を追加し、HTTP API のログを表示します。これを達成するには、次の操作を行います。

**を使用してロググループを作成するにはAWS マネジメントコンソール**

1. CloudWatch コンソール ([https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/)) を開きます。

1. [**ロググループ**] を選択します。

1. [**ロググループの作成**] を選択します。

1. ロググループ名を入力し、[**作成**] を選択します。

1. ロググループの Amazon リソースネーム (ARN) を書き留めます。ARN 形式は、arn:aws:logs:*region*: *account-id*:log-group:*log-group-name* です。HTTP API のアクセスのログ記録を有効にするには、ロググループ ARN が必要です。

**`$context.integrationErrorMessage` ロギング変数を追加するには**

1. [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway) で API Gateway コンソールにサインインします。

1. HTTP API を選択します。

1. [**モニタリング**] で、[**ログ記録**] を選択します。

1. API のステージを選択します。

1. [**編集**] を選択し、アクセスログを有効にします。

1. [**Log destination**] (ログの送信先) で、前のステップで作成したロググループの ARN を入力します。

1. [**ログの形式**] で、[**CLF**] を選択します。API Gateway はサンプルのログ形式を作成します。

1. ログ形式の末尾に `$context.integrationErrorMessage` を追加します。

1. [**保存**] を選択します。

**API のログを表示するには**

1. ログを生成します。ブラウザまたは `curl` を使用して API を呼び出します。

   ```
   $curl https://api-id.execute-api.us-west-2.amazonaws.com/route
   ```

1. [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway) で API Gateway コンソールにサインインします。

1. HTTP API を選択します。

1. [**モニタリング**] で、[**ログ記録**] を選択します。

1. ロギングを有効にした API のステージを選択します。

1. [**CloudWatch のログを表示**] を選択します。

1. 最新のログストリームを選択して、HTTP API のログを表示します。

1. ログエントリは、以下のようになります。  
![\[CloudWatch Logs ログエントリに、Lambda からの統合エラーメッセージが表示されます。\]](http://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/images/troubleshoot-http-api-logs.png)

ログ形式に `$context.integrationErrorMessage` を追加したため、問題の概要を示すエラーメッセージがログに表示されます。

Lambda 関数コードに問題があることを示す別のエラーメッセージがログに含まれている可能性があります。その場合は、Lambda 関数コードを確認し、Lambda 関数が[必要な形式](http-api-develop-integrations-lambda.md#http-api-develop-integrations-lambda.response)でレスポンスを返すことを確認します。ログにエラーメッセージが含まれていない場合は、トラブルシューティングに役立つ詳細情報のために、ログ形式に `$context.error.message` および `$context.error.responseType` を追加します。

この場合、API Gateway には Lambda 関数を呼び出すために必要なアクセス許可がないことがログに示されます。

API Gateway コンソールで Lambda 統合を作成すると、API Gateway は Lambda 関数を呼び出すためのアクセス許可を自動的に設定します。AWS CLI、CloudFormation、または SDK を使用して Lambda 統合を作成する場合、API Gateway に関数を呼び出すアクセス許可を付与する必要があります。次の [add-permission](https://docs.aws.amazon.com/cli/latest/reference/lambda/add-permission.html) コマンドは、さまざまな HTTP API ルートに Lambda 関数を呼び出すためのアクセス許可を付与します。

**Example 例 — HTTP API の `$default` ステージと `$default` ルートの場合**  

```
aws lambda add-permission \
    --function-name my-function \
    --statement-id apigateway-invoke-permissions \
    --action lambda:InvokeFunction \
    --principal apigateway.amazonaws.com \
    --source-arn "arn:aws:execute-api:us-west-2:123456789012:api-id/\$default/\$default"
```

**Example 例 — HTTP API の `prod` ステージと `test` ルートの場合**  

```
aws lambda add-permission \
    --function-name my-function \
    --statement-id apigateway-invoke-permissions \
    --action lambda:InvokeFunction \
    --principal apigateway.amazonaws.com \
    --source-arn "arn:aws:execute-api:us-west-2:123456789012:api-id/prod/*/test"
```

Lambda コンソールの [**Permissions (アクセス権限)**] タブで[関数ポリシーを確認](https://docs.aws.amazon.com/lambda/latest/dg/access-control-resource-based.html)します。

API をもう一度呼び出してみてください。Lambda 関数のレスポンスが表示されるはずです。