如何排查带有 Lambda 后端的 API Gateway REST API 中的 HTTP 504 错误?

2 分钟阅读
0

当我使用带有 AWS Lambda 后端的 Amazon API Gateway 调用 REST API 时,我收到 HTTP 504 错误状态代码。如何排查此错误的问题?

解决方法

当您的 REST API 请求返回 HTTP 504 错误状态代码时,您必须运行各种检查。

检查 IntegrationLatency 峰值

通过查看集成延迟持续时间,检查 API Gateway 中是否存在 IntegrationLatency 峰值。要查看 IntegrationLatency 持续时间,请为 HTTP API 日志记录配置访问日志记录变量 $context.integration.latency

有关更多信息,请参阅使用 API Gateway 控制台设置 Amazon CloudWatch API 日志记录

API Gateway 中的 IntegrationLatency 峰值表明该请求的大部分时间都花在 Lambda 中。检查 Lambda 函数的持续时间性能指标以确认这一点。

有关更多信息,请参阅使用 Lambda 函数指标

使用 CloudWatch Logs Insights 查看请求

使用 Amazon CloudWatch Logs Insights 查看导致 504 错误的请求。要查看请求,请在 CloudWatch 控制台的导航窗格中选择 LogsLog Insights。选择您的 API Gateway 日志组。然后,使用以下查询之一设置相对时间:

parse @message '(*) *' as reqId, message
| filter message like /Method completed with status: \d\d\d/
| parse message 'Method completed with status: *' as status
| filter status = 504
| sort @timestamp desc
| limit 20

-或者-

fields @timestamp, @message
| filter message like /Method completed with status: 504/
| sort @timestamp desc
| limit 20

检测 X-Ray 跟踪

如果 504 错误持续发生,请确定 Lambda 函数将时间花费在哪里。基于 Lambda 函数运行时检测 Lambda 函数的 AWS X-Ray 跟踪。

对于 Python:

from aws_xray_sdk.core import xray_recorder
from aws_xray_sdk.core import patch_all
patch_all()

对于 Node.js:

const AWSXRay = require('aws-xray-sdk-core')
const AWS = AWSXRay.captureAWS(require('aws-sdk'))

**注意:**在 Lambda 函数上检测 X-Ray 跟踪后,您需要构建一个新的部署包。

实施 API 重试

当出现 504 错误且在 Lambda 中找不到请求时,在客户端上实施 API 重试。该错误可能是由于 API Gateway 中的临时网络故障造成的。

检查 Lambda 函数配置

确保您的 Lambda 函数只有特定于 API Gateway 事件的处理逻辑。这样,Lambda 函数的运行时间更短,并且可以跟上传入的事件。

REST API 的默认最大集成超时时间为 29 秒。因此,请确保 Lambda 函数的运行持续时间小于 29 秒。

如果您有一个应用程序对时间敏感的使用案例,请参阅设置后端 Lambda 函数的异步调用


相关信息

API Gateway 维度和指标

为 API Gateway 中的 REST API 设置 CloudWatch 日志记录

在 CloudWatch 控制台中查看 API Gateway 日志事件

使用 X-Ray 跟踪用户对 REST API 的请求

将 Lambda 与 X-Ray 结合使用

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