使用 TypeScript 的无服务器框架:尽管有过滤器,Lambda 仍能处理所有 DynamoDB 流事件

问题描述 投票:0回答:1

我使用带有 TypeScript 的无服务器框架来处理 DynamoDB 流事件,然后将它们发布到 SNS 主题。我已将 Lambda 函数配置为使用过滤器仅处理流中的特定事件。但是,Lambda 函数正在处理流中的每个事件,包括那些应被过滤器排除的事件。

这是我当前的配置:

{
            stream: {
                arn: "${self:provider.environment.SESSION_STREAM}",
                type: "dynamodb",
                filterPatterns: [
                    { eventName: ["INSERT", "UPDATE"] },
                    {
                      dynamodb: {
                        NewImage: {
                          status: {
                            S: ["COMPLETED"],
                          },
                        },
                      },
                    },
                    {
                      dynamodb: {
                        NewImage: {
                          order: {
                            M: {
                              amount: {
                                N: [{ exists: true }],
                              },
                            },
                          },
                        },
                      },
                    },
                  ],
                maximumRetryAttempts: 5,
                enabled: true,
                bisectBatchOnFunctionError: true
            }
        },

我已经尝试了大部分链接,但找不到任何基于 TypeScript 的配置或解决方案。

typescript serverless-framework amazon-dynamodb-streams
1个回答
0
投票

我认为,您期望应用所有模式 - 事实并非如此。

来自文档

您的过滤器在逻辑上“或”在一起。如果您的活动记录 源满足您的一个或多个过滤器,Lambda 包括 记录在它发送到您的函数的下一个事件中。如果你的都没有 过滤器满足,Lambda 丢弃记录。

您的第一个模式 (

eventName
) 将满足流中的所有事件,因此其他模式没有效果。

© www.soinside.com 2019 - 2024. All rights reserved.