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

Amazon web services AWS:如果DynamoDB表格行在过去30分钟内未更新,则触发事件,amazon-web-services,triggers,amazon-dynamodb,aws-lambda,Amazon Web Services,Triggers,Amazon Dynamodb,Aws Lambda,我必须建立一个AWS流程的管理层。 为了简单起见,我有一些客户端通过SOAP请求向部署在Elastic Beanstalk NodeJS应用程序上的SOAP服务器发送心跳信号,比如说每5分钟一次。每次接收到心跳信号时,我都会通过更新表上的字段将上次接收到心跳信号的时间存储在DynamoDB表中 现在我需要创建一个进程,如果我在过去30分钟内没有收到心跳信号,它将执行一些操作(更新另一个表、调用Lambda函数等)。我现在不知道我将拥有多少客户端,但它们将随着时间的推移而不断增长,并全天候连接到我

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

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

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

你会怎么做


谢谢大家!

是否需要在所有客户端上每隔30分钟签入一次:这可以通过服务器上的cron作业来完成,该服务器执行一条SQL语句,其中Date()-Timestamp>30分钟(仅说明逻辑),DynamoDB格式仅更改语法

或者,您需要在上次某个客户向您发送邮件30分钟后进行检查。 在这种情况下,您的cron将每分钟运行一次,逻辑与上面相同

如果需要在计划中使用lambda,请参阅此链接

希望这有帮助
如果您需要语法方面的进一步帮助,我随时准备提供帮助

您可以将DynamoDB与TTL、DynamoDB Streams和AWS Lambda一起使用。不需要
cron

创建新行或更新现有行时,请在将来将该行的TTL设置为30分钟

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

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

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

参考资料:


因此,链接到DynamoDB流的新lambda将每30分钟调用一次,不管发生什么,即使我可能不需要做任何事情(客户端不太可能停止,也不会向我发送心跳)。您提供的解决方案看起来不错,但在资源方面也有点“昂贵”。我可能会选择这种方式,但如果有一种方法允许我只在需要时调用这个新的lambda,我会更高兴:DA stream事件是为任何DynamoDB行的任何修改创建的。因此,每次修改都会调用Lambda。如果该修改涉及到丢失的心跳(已过期的TTL),则执行您的操作。如果不是的话,就忽略它,什么也不做。我不确定在ttl过期后DynamoDB中的记录是否会立即被删除,我希望ttl只是一个建议。除非文档中另有说明,否则ttl删除很有可能发生,例如,每天一次。不过,请注意,ttl事件可能需要“最多”48小时才能触发。根据AWS的说法,它们不是即时的。要强调@olpa的评论,根据“DynamoDB通常在过期48小时内删除过期的项目。”我们不能假设TTL将在指定的时间准确触发。不幸的是,这个答案并不能可靠地解决这个问题。