【问题标题】:Filtering DynamoDB Streams events for a specific field change针对特定字段更改过滤 DynamoDB Streams 事件
【发布时间】:2022-11-17 13:37:44
【问题描述】:

我对 DynamoDB 表的特定(数字)字段/列(比如“计数”)的值变化很感兴趣。

我知道我可以编写一个 Lambda,一旦触发,它就会将新图像与旧图像进行比较,然后决定是否实际执行某些操作。但是,由于我的表收集了某种状态更新,并且其中只有少数对我的触发器具有重要意义,因此在这种情况下,大多数时候 Lambda 会被毫无意义地调用(而且,我会被收取费用调用了 Lambda)。

所以我想过滤 DynamoDB Stream 事件,根据the docs,这应该是可能的(即使没有给出类似案例的例子)。

我的问题是我找不到如何在过滤器模式中编写 OldImage['count'] != NewImage['count'] 的等价物。

这是我的 SAM 模板的这一部分应该如何显示的示例。

CountChangeDetector:
    Type: 'AWS::Serverless::Function'
    Properties:
      CodeUri: src/
      Handler: trigger.lambda_handler
      Runtime: python3.8
      FunctionName: "CountChangeDetector"
      AutoPublishAlias: live      
      Events:
        Stream:
          Type: DynamoDB
          Properties:
            Stream: !GetAtt MyTable.StreamArn
            BatchSize: 10
            StartingPosition: TRIM_HORIZON
            FilterCriteria:
              Filters:
                - Pattern: '{"OldImage": {"count": [ { "anything-but": [ {"NewImage": {"count"}} ] } ]}}'

当然,我定义模式的方式不正确,我得到了一个错误。

那么,模式应该如何定义呢?

【问题讨论】:

    标签: amazon-web-services aws-lambda amazon-dynamodb amazon-dynamodb-streams


    【解决方案1】:

    很可能,您已经找到了答案,但仍在添加任何搜索相同内容的新手。

    不幸的是,答案是“否”。您不能将流数据的两个两个字段相互比较。因为,没有可用于模式的“数字不等于”运算符。

    解决方法是在调用处理程序之前在 lambda 函数的预处理中编写逻辑。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-13
      相关资源
      最近更新 更多