因此,我们有几个 lambda 来监听数据库上的更改,在每个 lambda 中,我们必须在一开始就进行过滤,因为这个特定的 lambda 不关心所有更改,只关心特定的更改。
更明确地说,我们正在应用事件源,并且 lambda 应该是事件处理程序。我希望仅当事件 A 插入数据库时而不是每当插入事件时才触发 lambda A! lambda B 和事件 B 等也是如此。
目前,我们在每个 lambda 的开头都有一个过滤器:
lambdaA handler:
const eventsToBeProcessed = events.filter(
(event) => event.eventName === 'EventA'
);
现在我们已经有了一大堆 lambda,当我只需要触发一个时,触发所有这些 lambda 是没有意义的!
我对 AWS 不太有经验,但我假设解决方案是:
- 能够过滤 DynamoDb 触发器
- 不是让 dynamodb 触发 lambda,而是在每次更改时触发 AWS 服务,并且它会根据更新内容知道要触发哪个 lambda
EDIT:
我对我标记为答案的解决方案不太满意,主要原因是设计中的单点故障,而且它需要依靠 SNS 来进行发布/订阅,而 SNS 的可用性不高,而且它如果您尝试拥有一个高度可用的系统(4 个 9 左右),可能会让您失败
我最终采用的解决方案(至少目前如此)是,当我将事件推送到事件存储中时,如果我想触发副作用,我只需将其推送到 AWS 的 EventBridge(带有规则的事件总线)即可。 EventBridge 最好的部分是,您可以设置所需的规则、所需的总线,然后在总线有事件 A 时调用(例如)Lambda A 等等。
现在有一种方法可以做到这一点,
https://aws.amazon.com/blogs/compute/filtering-event-sources-for-aws-lambda-functions https://aws.amazon.com/blogs/compute/filtering-event-sources-for-aws-lambda-functions//
这是 lambda 的一项新功能,它使用与 AWS Eventbdridge 相同的语法。
aws lambda create-event-source-mapping \
--function-name fleet-tire-pressure-evaluator \
--batch-size 100 \
--starting-position LATEST \
--event-source-arn YOUR_DB_STREAM_ARN \
--filter-criteria '{"Filters": [{"eventName": ["EventA"]}]}'
你可以参考这个文档来了解具体的语法 https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-patterns.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)