2017-10-16 27 views
0

我必须在AWS流程上设置管理。 为了让事情变得简单,我有一些客户端通过对Elastic Beanstalk NodeJS应用上部署的SOAP服务器的SOAP请求发送心跳信号,比如说每5分钟发一次。每次收到检测信号时,我都会最后一次通过更新表中的字段来存储DynamoDB表中的内容。AWS:在最近30分钟内没有更新DynamoDB表格行的触发事件

我现在需要创建一个进程,如果我没有在最后30分钟收到了心跳,做的东西(更新另一个表,调用lambda函数等)。我现在不知道我会有多少客户,但他们会随着时间的推移而不断增长,并连接到我的服务器24/7。

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

你会怎么做?

谢谢!

回答

1

您可以使用DynamoDB与TTL,DynamoDB流和AWS LAMBDA这一点。不需要cron

当你创建一个新的行或更新现有行,设置该行的TTL在未来30分钟。

当达到该30分钟后,它会火起来,你可以作为一个lambda函数的触发器使用DynamoDB流。

此Lambda函数可以执行您想要执行的自定义处理(即更新其他表,调用Lambda函数等)。

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

参考文献:

+0

所以挂DynamoDB流新拉姆达将每30分钟被称为不管是什么,即使我可能不会需要做任何事情(客户不太可能停下来,不会给我心跳)。您提供的解决方案似乎很好,但在资源方面也有些“昂贵”。我可能会选择这种方式,但是如果有一种方法允许我只在需要时调用这个新的lambda **,我才会更快乐:D –

+0

创建一个流事件用于* any *修改*任何* DynamoDB行。所以,你的Lambda将被要求进行每次修改。如果修改引用缺少的心跳(过期的TTL),那就做你的事情。如果不是,就忽略并且什么都不做。 – dashmug

+0

似乎合法!非常感谢你! –

0

是否需要跨所有客户端以30分钟的时间间隔进行检查:这可以通过执行SQL语句的服务器上的cron作业完成,其中Date() - Timestamp> 30分钟(只是指出逻辑),在DynamoDB格式只是改变语法。

,或者您需要从上一次特定的客户端送你30分钟后进行检查。 在这种情况下,您的cron将运行具有相同的逻辑,每分钟如上

,如果你需要使用拉姆达的时间表参考此链接Using Lambda in schedule

希望这有助于 如果您需要进一步的帮助中的语法我已经准备好帮助