Function Lambda版本控制-不通过SQS触发特定版本

Function Lambda版本控制-不通过SQS触发特定版本,function,amazon-web-services,aws-lambda,Function,Amazon Web Services,Aws Lambda,我有触发lambda函数的SQS Lambda函数的版本为3(带别名prod) 当我将它设置为除最新版本以外的任何版本时,它不会被触发 你知道为什么吗?SQS只能触发最新的lambda函数吗?据我所知,在使用函数ARN时,您可以定义version 例如: 1.helloword版本1 arn:aws:lambda:aws-region:acct-id:function:helloworld:1 参考链接:我发现,如果一个函数的多个版本由同一个队列触发,则会出现某种竞争,可能会触发不同的版本 因

我有触发lambda函数的SQS

Lambda函数的版本为3(带别名prod)

当我将它设置为除最新版本以外的任何版本时,它不会被触发


你知道为什么吗?SQS只能触发最新的lambda函数吗?据我所知,在使用函数
ARN
时,您可以定义
version

例如:

1.
helloword
版本
1

arn:aws:lambda:aws-region:acct-id:function:helloworld:1

参考链接:

我发现,如果一个函数的多个版本由同一个队列触发,则会出现某种竞争,可能会触发不同的版本


因此,您似乎应该小心使用不同的队列,或者从不再积极使用/测试的版本中删除触发器关系。

如果将函数的多个版本附加到同一队列,则可能会出现争用条件。Lambda目前还没有在SQS集成上提供扇出功能

话虽如此,假设我们有三个版本使用与事件源相同的队列。然后,总的来说,对于发送的任何消息,调用三个版本中的任何一个都有33.33%的可能性。这仅仅是因为当Lambda轮询这些队列时,消息对函数是不可知的,这完全取决于此时哪个函数是幸运的

至于这篇原始文章中的问题——如果您只使用队列钩住了
$LATEST
,那么只会调用
$LATEST
;如果希望调用任何其他函数版本,则需要为要调用的每个版本创建新的事件源映射。除此之外,事件源队列对于所有版本都可以相同,也可以根据您的用例而不同


希望这有帮助。

谢谢。我注意到我们可以从Lambda控制台为Lambda函数定义SQS关系。选择tjhe version/alias,然后转到designer,您可以看到SQS、SNS等。在这里,您可以在SQS的ARN中输入:1等或添加:PROD作为别名