SHORT VERSION:如何在AWS lambda中定期触发事件?
LONG VERSION:我的情况是这样的,我在数据库中有一些事件在一定时间内到期。每当我发现事件已经过期时,我想运行一个函数(发送推送通知,删除行等)。我知道为每个创建的事件设置一个计时器是不切实际的,但是有什么东西可以每分钟扫描一次我的数据库并查找过期的事件来运行我的代码吗?如果没有,我的解决方案是否有其他选择?
答案 0 :(得分:1)
您可以将事件存储在以UUID键入的DynamoDB表中,并在此表上具有哈希范围架构GSI,其中哈希键将是到期时间段,例如事件到期的小时,20150701T04Z,以及GSI的范围密钥可以是确切的时间戳(unix时间)。这样,对于给定的小时到期存储桶,您可以在事件到期时使用范围查询,并利用关键条件将读取限制在您感兴趣的时间范围内.GSI不强制执行唯一性,即使在同一个Unix时间有多个事件,你仍然可以。通过预测ALL attributes而不是KEYS_ONLY或INCLUDE,您可以将事件过期从GSI驱动,而无需第二次读取基表。通过调整到期桶的大小(小时或分钟或天都是好的候选者),您可以大大降低您对基表的写入和GSI上的查询不会受到限制的可能性,因为到期桶,具有不同的散列密钥,将在整个散列密钥空间中均匀分布。
关于事件处理和Lambda的使用,首先,您可以让EC2实例执行查询并在事件表到期时从事件表中删除项目(或者通过将它们标记为已过期来对其进行逻辑删除)。删除事件项将使表的大小易于管理,并帮助您避免表中分区中的IOPS dilution。如果项目数量不受限制地增长,那么表格的分区将继续分割,从而导致每个分区上的预配置吞吐量越来越小,除非您对表进行上调。接下来在管道中,您可以使用包含旧图像和新图像的流视图类型enable a DynamoDB stream on the event table。然后,您可以attach a Lambda function to your Stream执行事件驱动的处理(推送通知等)。当旧的填充和new为null时,或者当旧图像和新图像之间的差异表明事件已被逻辑删除时,您可以使用Lambda函数触发通知。
答案 1 :(得分:0)
我相信现在已经为我们预定的Lambda工作提供了支持,但我还没有尝试过。 https://aws.amazon.com/about-aws/whats-new/2015/10/aws-lambda-supports-python-versioning-scheduled-jobs-and-5-minute-functions/