gpt4 book ai didi

aws-lambda - Lambda 函数在 DynamoDB 事件上触发两次

转载 作者:行者123 更新时间:2023-12-03 23:13:24 25 4
gpt4 key购买 nike

我有附加到 DynamoDB 更改事件的 Lambda 函数。
当我更改/修改 DynamoDB 的 Test-machines 表中的项目时,Lambda 触发了两次。

我正在修改 IsMachineOn值来自 TrueFalse , 是触发器 Test-Machine-On-alert-status Lambda 函数两次。

我不明白为什么两次 lambda 是触发器。

我观察到 records 中的一个小变化在 event Lambda 的参数。

第一次触发 ,
NewImage["IsMachineOn"]["BOOL"] 的值是 FalseOldImage["IsMachineOn"]["BOOL"] 的值是 True
对于第二个触发器 ,
NewImage["IsMachineOn"]["BOOL"] 的值是 FalseOldImage["IsMachineOn"]["BOOL"] 的值是 False
我在 NewImage["IsMachineOn"]["BOOL"]==False 上有业务逻辑以便我的业务逻辑运行两次。

有两件事:

  • 为什么 Lambda 运行两次?
  • 解决此问题的解决方法是什么?
  • 最佳答案

    我们的 DynamoDB 全局表也遇到了同样的问题。我们观察到的是双重事件仅发生在您创建的区域 update ,其他地区仍然收到1个事件,这很棒。
    您获得 2 个事件的原因是 DynamoDB 需要维护一些内置字段以防止区域无限相互更新的循环。

  • 第一个事件是更新 的属性真实存储的对象/字段,在您的情况下是 IsMachineOntrue 改变至 false .
  • 第二个事件是更新特殊属性,如 aws:rep:deleting , aws:rep:updatetime , aws:rep:updateregion .这就是为什么你看到旧/新图像都有 IsMachineOnfalse这是 新品 值(value)。

  • 希望这有助于澄清一些事情。它让我困惑了几个小时。
    TL;博士...
    通常,您可以只比较 aws:rep:updatetime旧/新图像,如果它们相同,则是更新aws的事件 内部 字段,以便您可以忽略。
    在我们的用例中,我们依赖于 aws:rep:updateregion为了确保某些逻辑只运行一次(不是在多个区域中),所以我们必须比较 aws:rep:updatetime旧/新忽略具有先前区域信息的第一个事件。好消息是两个事件' 新品 image 具有我们存储的对象的正确值。
    2020/7/23 更新
  • 我们注意到的另一个重点是,如果您使用 put()要更新/创建记录,第一个事件的新图像以及第二个事件的旧图像中将缺少 aws 内置字段。如果您依赖这些字段,最好使用 update()确保现有记录始终存在。
  • 关于aws-lambda - Lambda 函数在 DynamoDB 事件上触发两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55116784/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com