1

简短版本:如何在 AWS lambda 中定期触发事件?

长版:我的情况是,我的数据库中有在特定时间内过期的事件。每当我发现某个事件已过期时,我都想运行一个函数(发送推送通知、删除行等)。我知道为每个创建的事件设置一个计时器是不切实际的,但是有没有什么东西可以每分钟扫描我的数据库或其他东西并寻找过期的事件来运行我的代码?如果没有,我的解决方案是否有替代方案?

4

2 回答 2

1

您可以将事件存储在以 UUID 为键的 DynamoDB 表中,并在此表上具有哈希范围模式 GSI,其中哈希键将是到期时间桶,例如事件到期的小时数 20150701T04Z,范围键为GSI 可能是确切的时间戳(unix 时间)。这样,对于给定的小时到期存储桶,您可以在事件到期的时间使用范围查询,并利用关键条件将读取限制在您感兴趣的时间范围内。GSI 不强制唯一性,所以即使在同一个 Unix 时间有多个事件,你仍然可以。通过投影所有属性而不是 KEYS_ONLY 或 INCLUDE,您可以将您的事件从 GSI 中过期,而无需再次读取基表。通过调整到期存储桶的大小(小时、分钟或天都是不错的候选),您可以大大降低对基表的写入和 GSI 上的查询不会受到限制的机会,因为到期存储桶具有不同的散列键,将均匀分布在整个散列键空间中。

关于事件处理和 Lambda 的使用,首先,您可以让 EC2 实例执行查询并在事件表中删除过期的项目(或将它们标记为过期)。删除事件项将使表的大小保持可管理,并帮助您避免表分区中的IOPS 稀释。如果项目数量无限制地增长,那么您的表的分区将不断拆分,导致每个分区上的预置吞吐量越来越小,除非您向上预置表。接下来在管道中,您可以使用包含新旧图像的流视图类型在事件表上启用 DynamoDB 流。然后,您可以将 Lambda 函数附加到您的 Stream执行事件驱动处理(推送通知等)。您可以让您的 Lambda 函数在 old 已填充而 new 为 null 时触发通知,或者当新旧图像之间的差异表明事件已被墓碑删除时。

于 2015-07-01T04:18:14.410 回答
0

我相信现在支持预定的 Lambda 作业,但我还没有尝试过。https://aws.amazon.com/about-aws/whats-new/2015/10/aws-lambda-supports-python-versioning-scheduled-jobs-and-5-minute-functions/

于 2015-11-12T21:24:46.683 回答