AWS Eventbridge 事件(Sagemaker 培训作业状态更改)使用相同的负载多次触发

AWS Eventbridge Events (Sagemaker training job status change) fired multiple times with the same payload

我在 cloudwatch 中为 Sagemaker 训练作业状态更改创建了一个事件规则来监控我的训练作业。然后我使用此事件触发一个 lambda 函数,该函数作为机器人在电报组中发送消息。通过这种方式,每次培训工作之一改变其状态时,我都会收到一条消息。它有效,但事件存在问题,它们以完全相同的有效负载多次触发,因此我收到大量重复消息。 由于所有有效负载都是相同的(字段 LastModifiedTime 除外),我无法在 lambda 中过滤它们。很遗憾,我没有 AWS Developer 计划,因此我无法获得 Amazon 的支持。有什么想法吗?

编辑

没有重复的 rules/events。我还注意到,启用 Sagemaker 探查器(现在默认启用)会导致相同规则调用的数量激增。除了 LastModifiedTime 之外,它们都具有相同的有效载荷,所以我怀疑 AWS 中存在一个错误。一种解决方案可能是在 lambda 上实现某种数据保留并检查调用是否已被处理,但我不想使本应非常简单的事情复杂化。刚刚尝试启动一个新的培训工作并得到这个序列(我只报告我解析的字段):

状态:进行中 次要状态:开始 状态消息:正在启动请求的 ML 实例

状态:进行中 次要状态:开始 状态消息:开始训练作业

状态:进行中 次要状态:开始 状态消息:开始训练作业

状态:进行中 次要状态:开始 状态消息:开始训练作业

状态:进行中 次要状态:开始 状态消息:正在准备训练实例

状态:进行中 次要状态:正在下载 状态消息:正在下载输入数据

状态:进行中 次要地位:培训 状态消息:正在下载训练图像

状态:进行中 次要地位:培训 状态消息:训练进行中

状态:进行中 次要地位:培训 状态消息:训练图像下载已完成。训练中

重复的消息可能会发生,但应该很少见。您应该检查是否有任何重复的规则/时间表。您可以使用指标来识别正在调用/匹配的内容 https://docs.aws.amazon.com/eventbridge/latest/userguide/eventbridge-monitoring-cloudwatch-metrics.html.

另一个原因可能是您的规则太宽泛并且匹配同一来源的多个事件。您可以根据与 Cloudwatch Logs 相同的规则创建另一个目标,以查看匹配了哪些事件以及是否需要任何过滤。

也有可能 sagemaker 只是将重复的事件发送到 EventBridge,在这种情况下,您最好的选择是使用我们的 ElastiCache 临时存储 ID 并在您的 lambda 中进行检查。

经过大量实验后,我可以回答自己,Sagemaker 会生成多个具有相同负载的事件,但 LastModifiedTime 字段除外。我不知道这是不是一个错误,但我认为不应该发生。这些是 AWS 自己定义的规则,所以我无法自定义任何内容。如果启用分析器,情况会更糟。 我无能为力,因为我已经在 AWS 官方论坛上多次发帖,但都没有成功。