【问题标题】:Does AWS Lambda duplicate every message?AWS Lambda 是否复制每条消息?
【发布时间】:2019-06-12 00:24:27
【问题描述】:

我有一个在 AWS 中运行的 CodePipeline 构建,一切运行良好,只是没有直接来自 CodePipeline 的良好通知机制。挖掘了一下,似乎接受的解决方案是配置 CloudWatch 以调用 Lambda 或 SNS 来发送您的消息。

好的,所以我构建了一个小型 Java 程序来根据 CloudWatch CodePipeline 事件向 Slack 发送消息。它运行良好,除了 每条消息 重复六次或更多次。这似乎与我读过的关于重复 Lambda 执行的所有其他帖子有所不同,在这些帖子中你偶尔会在这里或那里得到重复。

我知道标准答案是 Lambda 想要确保传递,因此可以重试事件,这很好 - 如果每 20 或 100 条消息我得到一个重复,我会没事的。但是我不能在每次简单的 CP 运行时用 50 多条消息淹没 Slack 频道。更不用说我假设我会为每一次 Lambda 执行付费,而实际上我每次运行应该只得到 4 次。

我不想设置数据库来跟踪唯一 ID - 这又增加了复杂性和成本(执行仍然会发生)。感觉有些东西配置错误。例如。 CloudWatch 是否会出于某种原因获取相同的消息并将其转发给 Lambda?还是 Lambda 认为即使成功退出也需要重试执行的原因?

【问题讨论】:

    标签: amazon-web-services aws-lambda aws-codepipeline amazon-cloudwatch


    【解决方案1】:

    我的猜测是,这取决于您如何配置 CloudWatch 事件侦听器。如果不小心,您将在 CodePipeline 阶段转换或 Action 而不是 CodePipeline 状态更改上触发操作。复制自 CodePipeline 用户指南中的Detect and React to Changes in Pipeline State with Amazon CloudWatch Events 章节:

    您可以配置在状态更改时发送的通知:

    • 指定的管道或所有管道。您可以通过使用来控制它 "detail-type": "CodePipeline 管道执行状态变更"。
    • 在指定管道或所有管道中的指定阶段或所有阶段。您可以使用“detail-type”来控制它:“CodePipeline Stage Execution State Change”。
    • 在指定阶段或所有阶段、指定管道或所有管道内的指定操作或所有操作。您可以使用“detail-type”进行控制:“CodePipeline Action Execution State Change”。

    例如,如果您只对 CodePipeline 何时完成感兴趣,您可以将 CloudWatch Events 配置为:

    {
      "source": [
        "aws.codepipeline"
      ],
      "detail-type": [
        "CodePipeline Pipeline Execution State Change",
      ],
      "detail": {
        "state": [ 
          "SUCCEEDED", 
          "FAILED", 
          "CANCELED"
        ],
        "pipeline": [{ "Ref": "myPipeline" }]
      }
    }
    

    评论:

    • 请注意,上面的状态列表中省略了 STARTEDRESUMEDSUPERSEDED(您可能喜欢也可能不喜欢)
    • 请注意,与 Stage Execution State Change 相比,Execution State Change 具有不同的状态,而 Action Execution State Change 又不同于 Action Execution State Change
    • 省略配置中的 pipeline 部分,以侦听来自您拥有的所有 CodePipelines 的事件,而不是特定的事件。
    • 在前面提到的 CodePipeline user guide 中了解更多信息。

    【讨论】:

    • 是的!想找这个我快疯了,谢谢!
    猜你喜欢
    • 2020-05-13
    • 2021-05-20
    • 1970-01-01
    • 1970-01-01
    • 2020-05-17
    • 1970-01-01
    • 2021-10-15
    • 2018-12-13
    • 2023-03-18
    相关资源
    最近更新 更多