CloudFormation テンプレートまたは OpenAPI 定義を使用して Lambda 統合で REST API を作成した後、API Gateway から「設定エラーのため実行に失敗しました」というエラーが発生するのはなぜですか?

最終更新日: 2021 年 11 月 11 日

AWS CloudFormation テンプレートまたは OpenAPI の定義を使って、AWS Lambda 統合による Amazon API Gateway REST API を作成しました。API メソッドを使用して Lambda 関数を呼び出そうとすると、「設定エラーのため実行に失敗しました」というエラーメッセージと 500 ステータスコードが表示されます。 エラーの原因は何ですか? また、問題のトラブルシューティング方法を教えてください。

簡単な説明

Lambda 統合を使用した API Gateway REST APIがある場合、API は HTTP メソッド POST を使用してバックエンド Lambda 関数を呼び出す必要があります。バックエンド統合リクエストに他の HTTP メソッド (例えば、[ANY] や [GET]) を使用すると、呼び出しは失敗します。API Gateway は、Amazon CloudWatch Logs に次の例のようなエラーメッセージを返します。

Mon Oct 14 14:08:49 UTC 2019 : Received response. Status: 403, Integration latency: 3 ms
Mon Oct 14 14:08:49 UTC 2019 : Endpoint response headers: {Date=Mon, 14 Oct 2019 14:08:49 GMT, Content-Length=130, Connection=keep-alive, x-amzn-RequestId=abc1d2ef-34ab-56c7-de8f-90123a456789}
Mon Oct 14 14:08:49 UTC 2019 : Endpoint response body before transformations: <AccessDeniedException>
<Message>Unable to determine service/operation name to be authorized</Message>
</AccessDeniedException>
Mon Oct 14 14:08:49 UTC 2019 : Lambda invocation failed with status: 403. Lambda request id: abc1d2ef-34ab-56c7-de8f-90123a456789
Mon Oct 14 14:08:49 UTC 2019 : Execution failed due to configuration error:
Mon Oct 14 14:08:49 UTC 2019 : Method completed with status: 500

注: REST API のフロントエンドには任意の HTTP メソッドを設定できます。

以下のいずれかを使用して Lambda 統合で REST API を作成する場合は、バックエンド統合リクエストの POST メソッドを指定する必要があります。

API Gateway コンソールを使用して Lambda 統合を設定すると、バックエンド統合リクエストは自動的に POST に設定されます。

解決方法

注: AWS CLI コマンドの実行時にエラーが発生した場合は、AWS CLI の最新バージョンを使用していることを確認してください

お客様のユースケースに合わせて以下のいずれかを実行して、バックエンド統合リクエストの HTTP メソッドを POST に変更します。

API Gateway コンソールを使用してバックエンド統合リクエストの HTTP メソッドを POST に変更するには

  1. API Gateway コンソールで、API を選択します。
  2. [リソース] ペインで、Lambda 統合を含む HTTP メソッドを選択します。
  3. [メソッドの実行] ペインで、[統合リクエスト] を選択します。
  4. [統合リクエスト] ペインの [HTTP メソッド] で、[POST] を選択します。次に、[更新] チェックマークアイコンを選択します。
  5. API をデプロイします
  6. (オプション) Lambda 統合を含む HTTP メソッドをテストします。

詳細については、「API Gateway の使用開始」および「API Gateway コンソールを使用して API 統合リクエストをセットアップする」を参照してください。

AWS CloudFormation テンプレートを更新して、バックエンド統合リクエストの HTTP メソッドを POST に変更するには

  1. CloudFormation テンプレートの [IntegrationHttpMethod] プロパティの値を POST に設定します。手順については、「スタックテンプレートの変更」を参照してください。
  2. 編集したテンプレートで CloudFormation スタックを更新して API を更新します。

OpenAPI 定義を更新して、バックエンド統合リクエストの HTTP メソッドを POST に変更するには

  1. API 定義ファイルの [httpMethod] プロパティ値を POST に設定します。手順については、x-amazon-apigateway-integration オブジェクト および aws-samples GitHub リポジトリの Swagger テンプレートの例を参照してください。
  2. 編集した API 定義ファイルを API Gateway にインポートし、API を更新します。