如何对 CloudFront 中的 Lambda@Edge 函数引起的 500、502 和 503 错误进行问题排查?

1 分钟阅读
0

我将 AWS Lambda@Edge 函数与 Amazon CloudFront 分配关联起来。现在我收到了 500、502 或 503 错误。如何对这些错误进行问题排查?

简短描述

Lambda@Edge 500、502 和 503 错误表示以下情况:

  • HTTP 500 状态代码表示 Lambda 函数返回了运行错误。

  • HTTP 502 状态代码表示 Lambda 函数响应的格式不正确或包含无效的内容。

  • HTTP 503 状态代码表示 CloudFront 由于 Lambda 服务限额(以前称为限值)而受到限制。

有关错误原因以及如何进行问题排查,请参阅以下部分。

解决方法

Lambda@Edge 函数返回 500 错误

如果 CloudFront 没有收到 Lambda 的响应,则会导致 500 运行错误。发生这种情况是因为函数中存在未处理的异常,代码中存在错误,或者运行环境不受支持。

要解决 Lambda@Edge 生成的 500 错误,您必须通过为 Lambda 函数添加日志记录语句来调试代码。要了解更多信息,请参阅在 AWS 上调试内容交付的四个步骤,并查看 I – 执行错误下的信息。这些日志记录语句将消息写入监控 CloudFront 函数运行情况的 CloudWatch 日志文件。您可以查看 CloudWatch 日志文件中的这些语句,以验证该函数是否正常工作。

有关更多信息,请参阅 Node.js 中的 Lambda 函数错误Python 中的 Lambda 函数错误

Lambda@Edge 函数返回 502 错误

函数运行后,CloudFront 会收到来自 Lambda 的响应。如果响应的对象结构不符合 Lambda@Edge 事件结构,则会返回 502 错误。如果响应包含无效标头或其他无效字段,也会返回 502 错误。

要解决 Lambda@Edge 生成的 502 错误,请检查 Lambda@Edge 函数以了解以下常见问题:

  • 返回 JSON 对象
  • 缺少必填字段
  • 响应中有一个无效的对象
  • 不允许添加或更新或存在只读标头
  • 超过最大正文大小
  • 字符或值无效

有关更多信息,请参阅测试和调试 Lambda@Edge 函数以及边缘函数限制

Lambda@Edge 函数返回 503 错误

Lambda 服务限制每个区域的执行,如果超出限额,则返回 503 错误。

要解决 503 错误,请检查 Lambda@Edge CloudWatch 指标和日志文件以了解以下常见问题:

  • 基于每个区域的并发执行数
  • 已达到函数限额

有关更多信息,请参阅 Lambda@Edge 的限额

**注意:**您必须查看正确区域中的 CloudWatch 日志文件,才能查看 CloudFront 执行 Lambda 函数时创建的日志文件。


相关信息

Lambda@Edge 设计最佳实践

AWS 官方
AWS 官方已更新 2 年前