AWS CloudFormation または OpenAPI (Swagger) を使用して、API Gateway API を作成しました。API メソッドを呼び出そうとすると、一般的な「Execution failed due configuration」エラーと 500 ステータスコードが表示されるのはなぜですか?

最終更新日: 2019 年 10 月 16 日

AWS CloudFormation テンプレートまたは OpenAPI (Swagger) の定義を使って、AWS Lambda 統合による Amazon API Gateway API を作成しました。API メソッドを呼び出そうとすると、関数が呼び出されず、一般的な「Execution failed to configuration error:」メッセージと 500 ステータスコードが表示されます。このエラーが表示されるのはなぜですか?

簡単な説明

API Gateway API と Lambda が統合されている場合、API は HTTP メソッド POST を使用してバックエンド Lambda 関数を呼び出す必要があります。バックエンド統合リクエストに他の HTTP メソッド (ANY や GET など) を使用する場合、呼び出しは失敗し、ログに次のようなエラーメッセージが表示されます。

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

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

API Gateway コンソールを使用して Lambda 統合を設定すると、バックエンドリクエストが POST に設定されます。ただし、CloudFormation テンプレート、OpenAPI 定義、または AWS コマンドラインインターフェイス (AWS CLI) を使用して Lambda 統合で API を作成する場合は、POST メソッドを自分で指定する必要があります。

解決方法

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

API Gateway コンソールを使用する

  1. API Gateway コンソールで、API を選択します。
  2. [Resources] ペインで、Lambda 統合を使用する HTTP メソッドを選択します。
  3. [Method Execution] ペインで、[Integration Request] を選択します。
  4. [Integration Request] ペインの [HTTP method] で、[POST] を選択してから、チェックマークアイコン ([Update]) を選択します。
  5. API をデプロイします。
  6. (オプション) Lambda 統合で HTTP メソッドをテストします。

詳細については、Amazon API Gateway で Lambda 統合を使用して REST API を作成するおよび API Gateway コンソールを使用して API 統合リクエストを設定するを参照してください。

AWS CloudFormation テンプレートを更新する

CloudFormation テンプレートを使用して API を作成した場合は、以下の操作を行います。

  1. テンプレートを更新し、IntegrationHttpMethod プロパティの値を POST に設定します。
  2. テンプレートを使って、AWS CloudFormation スタックを更新します。このアクションで、API が更新されます。

OpenAPI 定義を更新する

OpenAPI 定義を使用して API を作成した場合は、以下を行います。

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