使用 API Gateway 处理 AWS Lambda 函数中的错误

Posted

技术标签:

【中文标题】使用 API Gateway 处理 AWS Lambda 函数中的错误【英文标题】:Handling errors in AWS Lambda function with API Gateway 【发布时间】:2018-01-15 08:35:22 【问题描述】:

每当我遇到语法错误或只想在我的 AWS Lambda 函数中发送自定义错误时,我都会收到相同的 502 Bad Gateway 响应(内部服务器错误)。

我试过那个简单的代码:

module.exports.saveImage = (event, context, callback) => 
    callback("the sky is falling!"); // also tried sending new Error("the sky is falling!")

并且仍然得到相同的“内部服务器错误”响应,而不是定义的响应。

这是我在 serverless.yml 文件中的函数:

saveImage:
  handler: handler.saveImage
  environment:
    BUCKET: $self:custom.bucket
  events:
  - http:
      path: saveImage
      method: post
      cors: true,
      integration: lambda-proxy

我可能误解了这篇文章的内容吗?它似乎收到了“errorMessage”:“天要塌了!”在 API Gateway 响应中(这就是我所期望的)。

https://aws.amazon.com/es/blogs/compute/error-handling-patterns-in-amazon-api-gateway-and-aws-lambda/

【问题讨论】:

您是否配置了 API Gateway 的集成响应部分来处理 Lambda 的响应? 我已经用 serverless.yml 配置更新了我的问题。顺便说一句,如果我将错误放在第二个参数中,我可以收到响应,如下所示: callback(null, body: JSON.stringify( errorMessage: "my error" ) );那是我们应该如何处理错误吗?我认为我们可以使用第一个参数来发送错误。 【参考方案1】:

如果您使用integration: lambda-proxy,则需要从您的 Lambda(而不是 API 网关)返回正确的错误响应。

在这种情况下,您可以使用已经尝试过的方法:

callback(null,  body: JSON.stringify(  errorMessage: "my error" )

我认为我们可以使用第一个参数来发送错误

你可以,如果你在你的serverless.yml 中使用integration: lambda,但在你的情况下,你不是。

【讨论】:

谢谢,我会看看它们之间的差异,看看是否值得改变。 这是一个偏好问题,每个都有自己的优点和缺点。见***.com/q/42474264/1252647。

以上是关于使用 API Gateway 处理 AWS Lambda 函数中的错误的主要内容,如果未能解决你的问题,请参考以下文章

使用 AWS API Gateway 和 Java 处理错误响应状态代码/实体

Amazon API Gateway 和 AWS Lambda 中的错误处理模式

使用 API Key 或 Authorizer 授权 AWS API Gateway

AWS Lambda 和 API Gateway 以及 SOAP 客户端

在 SQS 消息触发的 Lambda 上跟踪 AWS API Gateway request_id

AWS API Gateway Websocket UnknownError