使用 API 网关防止 Lambda 中的意外无限循环
Prevent accidental infinite loop in Lambda with API Gateway
我有一个由 API 网关触发的 Lambda 函数。
根据请求参数,此函数可能会调用另一个 API 个端点。
其他 API 个端点的 URL 在请求中通过参数传递。
因此,例如,我可以这样调用我的端点:
因此,Lambda 函数会在某个时候调用另一个 API:https://api.example.com/
我的真实函数在调用其他 API 之前有一些复杂的逻辑,但你明白了。
有些情况下函数会调用自己的端点(递归),但传递不同的参数来处理一些逻辑,这样就不会死循环。
但有人可能不小心将参数配置错误导致死循环,导致函数每小时被调用数百万次,导致AWS收费居首。
如何防止此 Lambda 函数导致意外无限循环并避免巨额 AWS 账单?
以下是我目前找到的一些选项:
1 - 在 API 网关中启用限制:
2 - 为 Lambda 函数配置适当的预留并发:
3 - 使用自定义 HTTP header
限制调用链长度
您可以使用自定义 HTTP header(例如“CALL_CHAIN_LENGTH”)来计算调用链长度并将其发送到后续 API 调用。
在函数的开头,检查此 header 是否存在。如果不存在,则将其设置为 1。如果存在,则将值递增 1 并在任何后续 API 调用之前在 HTTP header 中发送它。如果该值大于 theresold,您将停止该函数并 return 一个错误(例如 HTTP 错误 429 - 太多请求)。
4 - 如果可能,在调用
之前验证 API URL
这取决于应用程序,但如果功能逻辑简单,您可以通过检查端点 URL 和参数来检查它是否会导致无限循环。
5 - 使用 CloudWatch 监控 Lambda 调用次数
此外,如果您的 lambda 在一段时间内被调用超过 x 次,您还可以创建警报并发送电子邮件。
我有一个由 API 网关触发的 Lambda 函数。
根据请求参数,此函数可能会调用另一个 API 个端点。
其他 API 个端点的 URL 在请求中通过参数传递。
因此,例如,我可以这样调用我的端点:
因此,Lambda 函数会在某个时候调用另一个 API:https://api.example.com/
我的真实函数在调用其他 API 之前有一些复杂的逻辑,但你明白了。
有些情况下函数会调用自己的端点(递归),但传递不同的参数来处理一些逻辑,这样就不会死循环。
但有人可能不小心将参数配置错误导致死循环,导致函数每小时被调用数百万次,导致AWS收费居首。
如何防止此 Lambda 函数导致意外无限循环并避免巨额 AWS 账单?
以下是我目前找到的一些选项:
1 - 在 API 网关中启用限制:
2 - 为 Lambda 函数配置适当的预留并发:
3 - 使用自定义 HTTP header
限制调用链长度您可以使用自定义 HTTP header(例如“CALL_CHAIN_LENGTH”)来计算调用链长度并将其发送到后续 API 调用。
在函数的开头,检查此 header 是否存在。如果不存在,则将其设置为 1。如果存在,则将值递增 1 并在任何后续 API 调用之前在 HTTP header 中发送它。如果该值大于 theresold,您将停止该函数并 return 一个错误(例如 HTTP 错误 429 - 太多请求)。
4 - 如果可能,在调用
之前验证 API URL这取决于应用程序,但如果功能逻辑简单,您可以通过检查端点 URL 和参数来检查它是否会导致无限循环。
5 - 使用 CloudWatch 监控 Lambda 调用次数
此外,如果您的 lambda 在一段时间内被调用超过 x 次,您还可以创建警报并发送电子邮件。