ステージ変数を使用して API Gateway で Lambda 統合を定義しました。API メソッドを呼び出すと、「内部サーバーエラー」と 500 ステータスコードが表示される理由は何ですか?
最終更新日: 2021 年 6 月 21 日
ステージ変数を使用して AWS Lambda 関数を呼び出すように Amazon API Gateway API を設定しました。API メソッドを呼び出すと、API が「内部サーバーエラー」と 500 ステータスコードを返します。どうすればこのエラーを解決できますか?
簡単な説明
Lambda 関数のリソースベースのポリシーに、API が関数を呼び出すためのアクセス許可が含まれていない場合、API Gateway は 内部サーバーエラーメッセージを返します、
API を使用して関数を呼び出す ステージ変数を作成する場合は、次のいずれかを実行して、必要なアクセス許可を追加する必要があります。
- Lambda 関数のリソースベースの AWS Identity and Access Management (IAM) ポリシーを更新して、API Gateway に対して呼び出しアクセス許可を付与します。
- または - - Lambda 関数を呼び出すために API Gateway が引き受けることができる IAM ロールを作成します。
注: API Gateway consoleを使用して、スタンダード Lambda 統合で API Gateway API を構築すれば、必要なアクセス許可がコンソールによって自動的に追加されます。
解決方法
注: AWS Command Line Interface (AWS CLI) コマンドの実行中にエラーが発生した場合は、最新の AWS CLI バージョンを使用していることを確認してください。
Amazon CloudWatch Logs を確認して、アクセス許可の欠落が原因でエラーが発生していることを確認します。
REST API および WebSocket API の場合
API Gateway の実行ログを確認します。「Lambda 関数のアクセス許可が無効です」と同様のエラーメッセージが表示された場合、アクセス許可が不足しているためにエラーが発生しています。詳細については、 CloudWatch Logs をオンにして、API Gateway REST API または WebSocket API をトラブルシューティングする方法を教えてくださいを参照してください。
HTTP API の場合
API Gateway アクセスログを確認します。無効なアクセス許可を含むエラーメッセージが表示された場合、アクセス許可が不足しているためにエラーが発生しています。詳細については、「HTTP API のログ記録の設定」をご参照ください。
注:integrationErrorMessage コンテキスト変数 ($context.integrationErrorMessage) には、確認するエラーメッセージが含まれています。
API Gateway への呼び出しアクセス許可を付与するように Lambda 関数のリソースベースの IAM ポリシーを更新するには
{
"Version": "2012-10-17",
"Id": "default",
"Statement": [
{
"Sid": "ServiceAllowListing",
"Effect": "Allow",
"Principal": {
"Service": "apigateway.amazonaws.com"
},
"Action": "lambda:InvokeFunction",
"Resource": "arn:aws:lambda:<AWS_Region>:<AWS_Account_Number>:function:<LambdaFunctionName>",
"Condition": {
"ArnLike": {
"AWS:SourceArn": "arn:aws:execute-api:<AWS_Region>:<AWS_Account_Number>:<API_ID>"
}
}
}
]
}
AWS CLI の手順
次のアクセス許可の追加 AWS CLI コマンドを実行します。
重要: コマンドを実行する前に、次の変数を置き換えてください。
- arn:aws:lambda:region:account-id:function:function-name の場合、Lambda 関数の Amazon リソースネーム (ARN) を入力します。
- statement-id-guid には、一意のステートメント ID を入力します。たとえば、 api-gateway-invoke。
- arn:aws:execute-api:region:account-id:api-id/*/GET/lambdasv1 の場合、関数を呼び出す API Gateway リソースの ARN を入力します。HTTP API および REST API の ARN 形式については、API Gateway で API を実行するアクセス許可のリソース形式を参照してください。WebSocket API の ARN 形式については、IAM 認証の使用を参照してください。
aws lambda add-permission --function-name arn:aws:lambda:region:account-id:function:function-name --statement-id statement-id-guid --action lambda:InvokeFunction --source-arn arn:aws:execute-api:region:account-id:api-id/*/GET/lambdasv1
API Gateway が Lambda 関数を呼び出すために引き受けることができる IAM ロールを作成するには
API を呼び出すための API Gateway アクセス権限モデルの説明に従います。
注: 詳細については、IAM アクセス権限により API へのアクセスを制御するを参照してください。