Amazon web services 使用API网关防止Lambda中的意外无限循环

Amazon web services 使用API网关防止Lambda中的意外无限循环,amazon-web-services,aws-lambda,aws-api-gateway,infinite-loop,Amazon Web Services,Aws Lambda,Aws Api Gateway,Infinite Loop,我有一个由API网关触发的Lambda函数 根据请求参数,此函数可以调用另一个API端点 其他API端点的URL通过请求中的参数传递 例如,我可以这样调用我的端点: 因此,Lambda函数将在某个时候调用另一个API: 在调用其他API之前,我的实际函数有一些复杂的逻辑,但您已经知道了 在某些情况下,函数将调用自己的端点(递归),但会传递不同的参数来处理某些逻辑,这样就不会导致无限循环 但是有人可能会意外地错误地配置参数,从而导致无限循环,导致该函数每小时被调用数百万次,从而导致AWS收费达到

我有一个由API网关触发的Lambda函数

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

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

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

因此,Lambda函数将在某个时候调用另一个API:

在调用其他API之前,我的实际函数有一些复杂的逻辑,但您已经知道了

在某些情况下,函数将调用自己的端点(递归),但会传递不同的参数来处理某些逻辑,这样就不会导致无限循环

但是有人可能会意外地错误地配置参数,从而导致无限循环,导致该函数每小时被调用数百万次,从而导致AWS收费达到最高水平


如何防止这个Lambda函数导致意外的无限循环并避免巨大的AWS账单?

到目前为止,我已经找到了一些选项:

1-在API网关中启用节流:

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

3-使用自定义HTTP头限制调用链长度 您可以使用自定义HTTP头(例如“CALL_CHAIN_LENGTH”)来计算调用链长度,并将其发送给后续API调用

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

4-如果可能,在调用之前验证API URL 这取决于应用程序,但是如果函数逻辑很简单,您可以通过检查端点URL和参数来检查它是否会导致无限循环

5-使用CloudWatch监视Lambda调用的数量
此外,如果lambda在一个时间段内被调用超过x次,您可以创建警报并发送电子邮件。

为什么不在调用自身之前验证参数?如果您完全控制代码和API调用,则在每次调用中都包含递减生存时间(TTL)参数。当它达到0时,停止。@jarmod您能提供关于如何实现这个的更多细节吗?您的意思是在后续API调用中将此TTL值作为HTTP头发送吗?它可能只是HTTP API请求上的一个查询参数,例如
?id=21&TTL=3