AWS:如果 DynamoDB 表行在过去 30 分钟内未更新,则触发事件

Mat*_*gna 2 triggers amazon-web-services amazon-dynamodb aws-lambda

我必须在 AWS 流程上设置管理。为简单起见,我有一些客户端向我发送心跳,假设每 5 分钟一次,通过 SOAP 请求发送到部署在 Elastic Beanstalk NodeJS 应用程序上的 SOAP 服务器。每次收到心跳时,我都会通过更新表上的字段将上次收到的心跳存储在 DynamoDB 表中。

我现在需要创建一个进程,如果我在过去 30 分钟内没有收到心跳,则执行某些操作(更新另一个表、调用 Lambda 函数等)。我现在不知道我将拥有多少个客户端,但它们会随着时间的推移而自然增长,并 24/7 全天候连接到我的服务器。

我希望在表中的特定行未更新的 30 分钟后触发 Lambda 函数(或在 SNS 主题上发布消息)之类的事件,但我不知道如何获得最后一部分上班。此事件应该检查​​文档中的每一行。

你会怎么做?

谢谢!

das*_*mug 5

为此,您可以将 DynamoDB 与 TTL、DynamoDB Streams 和 AWS Lambda 结合使用。不需要cron

当您创建新行或更新现有行时,将该行的 TTL 设置为未来 30 分钟。

当达到 30 分钟时,它将启动一个 DynamoDB 流,您可以将其用作 Lambda 函数的触发器。

然后,此 Lambda 函数可以执行您想要执行的自定义处理(即更新另一个表、调用 Lambda 函数等)。

请注意,原始 DynamoDB 行将在其 TTL 到期时被删除。如果您需要保留该记录,您可以让 Lambda 函数重新创建它,并在未来将新的 TTL 设置为另一个 30 分钟。

参考:

  • 但请注意,TTL 事件可能需要“最多”48 小时才能触发。根据 AWS,它们不是即时的。 (3认同)
  • 我不确定在 ttl 过期后 DynamoDB 中的记录会_立即_被删除,并且希望 ttl 只是一个建议。除非文档中另有说明,否则很可能会发生 ttl 删除,例如,每天一次。 (2认同)
  • 为了强调@olpa的评论,根据[文档](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/howitworks-ttl.html):“DynamoDB通常会在过期后48小时内删除过期项目。 ” 我们不能假设 TTL 会在指定的时间准确触发。不幸的是,这个答案并不是问题的可靠解决方案。 (2认同)