ステージ変数を使用して API Gateway で Lambda 統合を定義しました。API メソッドを呼び出すと、「内部サーバーエラー」と 500 ステータスコードが表示される理由は何ですか?

最終更新日: 2021 年 6 月 21 日

ステージ変数を使用して AWS Lambda 関数を呼び出すように Amazon API Gateway API を設定しました。API メソッドを呼び出すと、API が「内部サーバーエラー」と 500 ステータスコードを返します。どうすればこのエラーを解決できますか?

簡単な説明

Lambda 関数のリソースベースのポリシーに、API が関数を呼び出すためのアクセス許可が含まれていない場合、API Gateway は 内部サーバーエラーメッセージを返します、

API を使用して関数を呼び出す ステージ変数を作成する場合は、次のいずれかを実行して、必要なアクセス許可を追加する必要があります。

注: 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 ポリシーを更新するには

Lambda コンソールの手順

AWS のサービスへのアクセス権を関数に付与するの手順に従います。

以下は、API Gateway に呼び出しアクセス許可を付与するリソースベースのポリシーの例です。

{
    "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 コマンドを実行します。

重要: コマンドを実行する前に、次の変数を置き換えてください。

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 ロールを作成するには