我在 AWS 中有一个 DynamoDB 表,我尝试根据以下两个条件为 Lambda 函数设置触发器:
如果表中属性“status”设置为“NEW”的项目数量达到 200 个。
如果消息已在表中存在超过 10 分钟且属性“状态”为“新”。
我最初探索了 CloudWatch 警报,但我发现表大小和项目计数指标不会直接发送到 CloudWatch。此外,没有直接的方法来查询具有特定条件(例如“状态为新”)的指标。
我考虑的另一种方法是使用 DynamoDB Streams 在每次插入时触发 Lambda 函数,同时还维护一个计数器。此外,我将有一个单独的 Lambda 函数,该函数定期运行来处理满足第二个条件(即超过 10 分钟)的消息。
到目前为止,我还没有想出任何其他方法。
有人可以提供指导或建议替代解决方案来实现这一目标吗?
在您的桌子上创建一个 GSI。如果您的吞吐量低于每秒 1000 WCU,则使用静态值作为 GSI_PK,例如
1
。使用时间戳作为排序键。
GSIPK | SK | 其他 |
---|---|---|
1 | 2023-09-26T00:01:000 | 一些数据 |
1 | 2023-09-26T00:23:000 | 一些数据 |
1 | 2023-09-26T00:41:000 | 一些数据 |
现在您调用一个 Lambda 函数,该函数每分钟读取一次索引,该索引获取早于 10 分钟的项目。当您将某个项目更新为不再是
NEW
时,同时从该项目中删除 GSIPK
,这会将其从索引中删除。
这是满足您的用例的一种非常有效且简单的方法。
对于 Lambda 调用,您可以在 EventBridge 上使用基于 Cron 的事件。