在使用 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 API,则该 API 必须使用 HTTP 方法 POST 调用后端 Lambda 函数。如果您对后端集成请求使用任何其他 HTTP 方法(例如,ANYGET),则调用将失败。然后,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. Resources(资源)窗格中,选择具有 Lambda 集成的 HTTP 方法。
  3. Method Execution(方法执行)窗格中,选择 Integration Request(集成请求)。
  4. Integration Request(集成请求)窗格中,对于 HTTP method(HTTP 方法),选择 POST。然后,选择 Update(更新)复选标记图标。
  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。