HTTP API Lambda 統合に関する問題のトラブルシューティング
次に、HTTP API で AWS Lambda の統合 を使用するときに発生する可能性のあるエラーや問題に関するトラブルシューティングのアドバイスを示します。
問題: Lambda 統合のある API が {"message":"Internal Server Error"}
を返します
内部サーバーエラーのトラブルシューティングを行うには、ログ形式に $context.integrationErrorMessage
ログ記録変数を追加し、HTTP API のログを表示します。これを達成するには、次の操作を行います。
を使用してロググループを作成するにはAWS Management Console
CloudWatch コンソール (https://console.aws.amazon.com/cloudwatch/
) を開きます。 -
[ロググループ] を選択します。
-
[ロググループの作成] を選択します。
-
ロググループ名を入力し、[作成] を選択します。
-
ロググループの Amazon リソースネーム (ARN) を書き留めます。ARN 形式は、arn:aws:logs:
region
:account-id
:log-group:log-group-name
です。HTTP API のアクセスのログ記録を有効にするには、ロググループ ARN が必要です。
$context.integrationErrorMessage
ロギング変数を追加するには
https://console.aws.amazon.com/apigateway
で API Gateway コンソールにサインインします。 -
HTTP API を選択します。
-
[モニタリング] で、[ログ記録] を選択します。
-
API のステージを選択します。
-
[編集] を選択し、アクセスログを有効にします。
-
[Log destination] (ログの送信先) で、前のステップで作成したロググループの ARN を入力します。
-
[ログの形式] で、[CLF] を選択します。API Gateway はサンプルのログ形式を作成します。
-
ログ形式の末尾に
$context.integrationErrorMessage
を追加します。 -
[保存] を選択します。
API のログを表示するには
-
ログを生成します。ブラウザまたは
curl
を使用して API を呼び出します。$
curl https://api-id
.execute-api.us-west-2
.amazonaws.com/route
https://console.aws.amazon.com/apigateway
で API Gateway コンソールにサインインします。 -
HTTP API を選択します。
-
[モニタリング] で、[ログ記録] を選択します。
-
ロギングを有効にした API のステージを選択します。
-
[CloudWatch のログを表示] を選択します。
-
最新のログストリームを選択して、HTTP API のログを表示します。
-
ログエントリは、以下のようになります。
ログ形式に $context.integrationErrorMessage
を追加したため、問題の概要を示すエラーメッセージがログに表示されます。
Lambda 関数コードに問題があることを示す別のエラーメッセージがログに含まれている可能性があります。その場合は、Lambda 関数コードを確認し、Lambda 関数が必要な形式でレスポンスを返すことを確認します。ログにエラーメッセージが含まれていない場合は、トラブルシューティングに役立つ詳細情報のために、ログ形式に $context.error.message
および $context.error.responseType
を追加します。
この場合、API Gateway には Lambda 関数を呼び出すために必要なアクセス許可がないことがログに示されます。
API Gateway コンソールで Lambda 統合を作成すると、API Gateway は Lambda 関数を呼び出すためのアクセス許可を自動的に設定します。AWS CLI、AWS CloudFormation、または SDK を使用して Lambda 統合を作成する場合、API Gateway に関数を呼び出すアクセス許可を付与する必要があります。次の例の AWS CLI コマンドは、Lambda 関数を呼び出すためのアクセス許可を複数の異なる HTTP API ルートに付与します。
例 — HTTP API の $default
ステージと $default
ルートの場合
aws lambda add-permission \ --function-name
my-function
\ --statement-idapigateway-invoke-permissions
\ --action lambda:InvokeFunction \ --principal apigateway.amazonaws.com \ --source-arn "arn:aws:execute-api:us-west-2
:123456789012
:api-id
/\$default
/\$default
"
例 — HTTP API の prod
ステージと test
ルートの場合
aws lambda add-permission \ --function-name
my-function
\ --statement-idapigateway-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 (アクセス権限)] タブで関数ポリシーを確認します。
API をもう一度呼び出してみてください。Lambda 関数のレスポンスが表示されるはずです。