我的当前AWS Lambda函数调用另一个AWS Lambda函数,但我想确保调用成功。在查看AWS Lambda并发执行限制后,我试图弄清楚如果达到并发限制,并且我尝试从另一个Lambda调用Lambda会发生什么。
目前,我通过将消息放入SNS来解决此问题,但我更喜欢直接调用Lambda,避免间接性。
处理并发限制的最佳方法是使用Kinesis流而不是SNS。 分片数将限制调用Lambda函数的数量。如果对您来说相关,您可以一次获取多条消息,这是SNS无法做到的,可能会导致达到并发限制。
问:如果我的账户超过并发执行的默认限制会发生什么?
超过限制后,同步调用的AWS Lambda函数将返回一个限流错误(429错误代码)。异步调用的Lambda函数可以吸收合理的突发流量,大约持续15-30分钟,之后传入的事件将被拒绝作为被限流的。如果Lambda函数是响应Amazon S3事件而被调用,则被AWS Lambda拒绝的事件可能会被S3保留并重试24小时。来自Amazon Kinesis流和Amazon DynamoDB流的事件将重试,直到Lambda函数成功或数据过期。Amazon Kinesis和Amazon DynamoDB Streams会保留数据24小时。
我相信你目前正在正确处理它。我刚刚读了一篇文章,解释了为什么不应该从另一个lambda中调用lambda:
“如果这样做,第一个lambda将一直运行,直到第二个lambda执行完毕,这样你就会被重复计费。相反,使用SNS或SQS向另一个lambda发送消息。”