【问题标题】:Lambda versioning - does not trigger specific version via SQSLambda 版本控制 - 不通过 SQS 触发特定版本
【发布时间】:2020-04-04 01:16:41
【问题描述】:

我有触发 lambda 函数的 SQS。

Lambda 函数有版本 3(别名 prod)。

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

任何想法为什么? SQS只能触发最新的lambda函数吗

【问题讨论】:

    标签: function amazon-web-services aws-lambda


    【解决方案1】:

    据我所知,您可以在使用函数 ARN 时定义 version

    例子:

    1.helloword 与版本1

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

    参考链接:here

    【讨论】:

    • 谢谢。我注意到我们可以从它自己的 Lambda 控制台为 Lambda 函数定义 SQS 关系。选择版本/别名,然后转到设计器,您可以看到 SQS、SNS 等。您可以在其中使用 :1 等输入 SQS 的 ARN 或添加 :PROD 作为别名
    【解决方案2】:

    我发现如果一个函数的多个版本被同一个队列触发,就会出现某种竞争,并且可能会触发不同的版本。

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

    【讨论】:

      【解决方案3】:

      好吧,如果函数的多个版本附加到同一个队列,那么它会出现竞争条件。 Lambda 目前不提供 SQS 集成的扇出功能。

      话虽如此,假设我们有三个版本使用相同的队列作为事件源。那么总体而言,对于发送的任何消息,三个版本中的任何一个都有 33.33% 的机会被调用。这仅仅是因为当 Lambda 轮询这些队列时,消息对于函数是不可知的,这完全取决于当前哪个函数是幸运的。

      至于这个原始帖子中的问题 - 如果您只将$LATEST 与队列挂钩,那么只会调用$LATEST;如果要调用任何其他函数版本,则需要为要调用的每个版本创建新的事件源映射。最重要的是,所有版本的事件源队列可以相同,也可以不同,具体取决于您的用例。

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-12-20
        • 2018-03-10
        • 2021-01-16
        • 2018-08-03
        • 2010-10-01
        • 1970-01-01
        • 2018-02-12
        • 1970-01-01
        相关资源
        最近更新 更多