首页 > 解决方案 > 使用 API Gateway 防止 Lambda 中的意外无限循环

问题描述

我有一个由 API Gateway 触发的 Lambda 函数。

根据请求参数,此函数可能会调用另一个 API 端点。

其他 API 端点的 URL 通过请求中的参数传递。

因此,例如,我可以这样调用我的端点:

https://xxxxxxxx.execute-api.us-east-1.amazonaws.com/dev/my-function?other-api-endpoint=https://api.example.com/

因此,Lambda 函数将在某个时候调用另一个 API:https ://api.example.com/

在调用其他 API 之前,我的真实函数有一些复杂的逻辑,但你明白了。

在某些情况下,函数会调用自己的端点(递归),但是传递不同的参数来处理一些逻辑,这样就不会造成死循环。

但是可能有人不小心把参数配置错了,导致死循环,导致函数每小时被调用数百万次,导致AWS收费居高不下。

如何防止此 Lambda 函数导致意外无限循环并避免巨额 AWS 账单?

标签: amazon-web-servicesaws-lambdaaws-api-gatewayinfinite-loop

解决方案


以下是我目前发现的一些选项:

1 - 在 API Gateway 中启用限制:

在此处输入图像描述

2 - 为 Lambda 函数配置适当的预留并发:

在此处输入图像描述

3 - 使用自定义 HTTP 标头限制调用链长度

您可以使用自定义 HTTP 标头(例如“CALL_CHAIN_LENGTH”)来计算调用链长度并将其发送到后续 API 调用。

在函数的开头,检查此标头是否存在。如果不存在,则将其设置为 1。如果存在,则将该值增加 1 并在任何后续 API 调用之前将其发送到 HTTP 标头中。如果该值大于已售出的值,则停止函数并返回错误(例如 HTTP 错误 429 - Too Many Requests)。

4 - 如果可能,在调用之前验证 API URL

这取决于应用程序,但如果函数逻辑很简单,您可以通过检查端点 URL 和参数来检查它是否会导致无限循环。

5 - 使用 CloudWatch 监控 Lambda 调用的数量

此外,您可以创建警报并发送电子邮件,以防您的 lambda 在一段时间内被调用超过 ax 次。


推荐阅读