我当前的AWS Lambda函数调用另一个AWS Lambda函数,但我想确保调用成功。在查看concurrent execution limits for AWS Lambda后,我试图弄清楚如果并发限制被击中会发生什么,我试图从另一个Lambda调用Lambda。 现在,我通过在SNS中放置消息来解决这个问题,但我更喜欢直接调用Lambda来避免间接。
答案 0 :(得分:3)
处理并发限制的最佳方法是使用Kinesis流而不是SNS。 分片数量将限制调用的lambda数量。如果它与您相关,您可以一次收到多条消息,这可以与SNS一起使用,这可能导致达到并发限制。
答案 1 :(得分:1)
你能详细说一下吗?不确定我理解你想要实现的目标。
可以在AWS console / EC2页面下查看Lambda限制,左上角有一个名为Limits的菜单项,您应该看到限制。 当你达到极限时,lambda将停止被调用,如果我的记忆正确地为我服务,你会在日志中看到一个错误,说明限制被击中。
答案 2 :(得分:1)
问:如果我的帐户超出并发执行的默认限制条件会怎样?
超过限制时,将调用AWS Lambda函数 同步将返回限制错误(429错误代码)。 LAMBDA 异步调用的函数可以吸收合理的突发 交通大约15-30分钟,之后进入事件 将被拒绝受到限制。在Lambda函数存在的情况下 为响应Amazon S3事件而调用,AWS Lambda拒绝了这些事件 可以由S3保留和重试24小时。亚马逊的活动 Kinesis流和Amazon DynamoDB流重试直到 Lambda函数成功或数据过期。亚马逊Kinesis和 Amazon DynamoDB Streams将数据保留24小时。
在AWS控制台内,您始终可以为AWS Lambda并发执行创建增加服务限额,无需额外费用。 This answer更详细地解释了这一点。
答案 3 :(得分:0)
我相信您目前正确处理它。我刚刚读了一篇文章,解释了你不应该从另一个lambda调用lambda,因为:
"如果你这样做,第一个将运行,直到第二个完成执行,你自己双重计费。而是使用SNS或SQS向其他Lambda发送消息。"
答案 4 :(得分:0)
在lambda内部有并发控制服务。对于调用/请求是来自sns还是直接来自它,它一无所知。它仅计算您帐户的并发(如果您设置了“每功能并发”,则还计算您的功能)。如果您的并发超出限制,则请求将受到限制,返回的http状态代码为429。
就像已经提到的其他文章一样,如果您使用一个函数调用另一个函数,则第一个函数正在等待第二个函数的结果,并发性将为2。相反,如果您使用SNS,则将依次调用这两个函数并发仅为1。
如果确实需要从其他一些lambda函数中调用lambda函数,但又想避免节流,请向lambda发送请求以增加您的帐户并发限制(默认值为1000)。这是最快,最简单的方法。