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

最終更新日: 2020 年 4 月 30 日

ステージ変数を使用して AWS Lambda 関数を呼び出すように Amazon API Gateway API を設定しました。API メソッドを呼び出すと、API が「内部サーバーエラー」と 500 ステータスコードを返します。この問題を解決する方法を教えてください。

簡単な説明

このエラーは、Lambda 関数のリソースベースのポリシーに、関数を呼び出す API のアクセス許可が含まれていない場合に発生します。

API Gateway コンソールを使用して、標準 Lambda 統合で API Gateway API を構築すれば、必要なアクセス許可がコンソールによって自動的に追加されます。ただし、API を通じて Lambda 関数を呼び出すようにステージ変数を設定する場合は、これらのアクセス許可を手動で追加する必要があります。

解決方法

API のログを確認する

アクセス許可がないことが原因でエラーが発生していることを確認するには、API のログを確認します。

REST API および WebSocket API の場合、「Lambda 関数に対する無効なアクセス許可です」のようなメッセージがないか実行ログを確認します。 詳細については、CloudWatch Logs を有効にして、API Gateway REST API または WebSocket API をトラブルシューティングする方法を教えてくださいを参照してください。

HTTP API の場合は、アクセスログでアクセス許可に関する同様のメッセージを確認します。integrationErrorMessage コンテキスト変数 ($context.integrationErrorMessage) には、確認するエラーメッセージが含まれています。詳細については、HTTP API のログ記録の設定を参照してください。

必要なアクセス許可を追加する

API の lambda:InvokeFunction アクセス許可を追加するには、AWS コマンドラインインターフェイス (AWS CLI) から Lambda add-permission コマンドを実行します。

サンプルコマンドにある次の変数を置き換えます。

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