【发布时间】:2020-04-04 01:16:41
【问题描述】:
我有触发 lambda 函数的 SQS。
Lambda 函数有版本 3(别名 prod)。
当我将它设置为 LATEST 以外的任何版本时,它不会被触发。
任何想法为什么? SQS只能触发最新的lambda函数吗
【问题讨论】:
标签: function amazon-web-services aws-lambda
我有触发 lambda 函数的 SQS。
Lambda 函数有版本 3(别名 prod)。
当我将它设置为 LATEST 以外的任何版本时,它不会被触发。
任何想法为什么? SQS只能触发最新的lambda函数吗
【问题讨论】:
标签: function amazon-web-services aws-lambda
据我所知,您可以在使用函数 ARN 时定义 version。
例子:
1.helloword 与版本1
arn:aws:lambda:aws-region:acct-id:function:helloworld:1
参考链接:here
【讨论】:
我发现如果一个函数的多个版本被同一个队列触发,就会出现某种竞争,并且可能会触发不同的版本。
因此,您似乎应该小心使用不同的队列或从您不再积极使用/测试的版本中删除触发器关系。
【讨论】:
好吧,如果函数的多个版本附加到同一个队列,那么它会出现竞争条件。 Lambda 目前不提供 SQS 集成的扇出功能。
话虽如此,假设我们有三个版本使用相同的队列作为事件源。那么总体而言,对于发送的任何消息,三个版本中的任何一个都有 33.33% 的机会被调用。这仅仅是因为当 Lambda 轮询这些队列时,消息对于函数是不可知的,这完全取决于当前哪个函数是幸运的。
至于这个原始帖子中的问题 - 如果您只将$LATEST 与队列挂钩,那么只会调用$LATEST;如果要调用任何其他函数版本,则需要为要调用的每个版本创建新的事件源映射。最重要的是,所有版本的事件源队列可以相同,也可以不同,具体取决于您的用例。
希望这会有所帮助。
【讨论】: