如何定期触发 aws lambda 中的事件?
How can I have events in aws lambda triggered regularly?
简短版本:如何在 AWS lambda 中定期触发事件?
长版:我的情况是数据库中的事件会在特定时间内过期。每当我发现事件已过期时,我想 运行 一个函数(发送推送通知、删除行等)。我知道为创建的每个事件设置一个计时器是不切实际的,但是有没有什么东西可以每分钟扫描一次我的数据库,然后查找过期的事件以 运行 我的代码?如果没有,我的解决方案是否有其他选择?
您可以将事件存储在以 UUID 为键的 DynamoDB table 中,并在此 table 上有一个哈希范围架构 GSI,其中哈希键将是一个到期时间段,例如事件到期的时间,20150701T04Z,GSI 的范围键可以是确切的时间戳(unix 时间)。这样,对于给定的小时到期桶,您可以在事件到期的小时使用范围查询,并利用关键条件将读取限制在您感兴趣的时间范围内。GSI 不强制唯一性,所以即使在同一 Unix 时间有多个事件,你仍然可以。通过投影 ALL attributes 而不是 KEYS_ONLY 或 INCLUDE,您可以将事件到期从 GSI 中移除,而无需再次读取基数 table。通过调整到期桶的大小(小时、分钟或天都是很好的候选者),您可以大大减少写入基础 table 和 GSI 上的查询不会受到限制的机会,因为到期具有不同哈希键的桶将均匀分布在整个哈希键 space.
关于事件处理和 Lambda 的使用,首先,您可以让 EC2 实例执行查询并在事件 table 过期时从事件中删除项目(或通过将它们标记为已过期来将它们删除)。删除事件项将使 table 的大小易于管理,并帮助您避免执行事件驱动处理(推送通知等)的 IOPS dilution in the partitions of your table. If the number of items grows without bound, then your table's partitions will keep splitting resulting in smaller and smaller amounts of provisioned throughput on each partition, unless you up-provision your table. Next in the pipeline, you could enable a DynamoDB stream on the event table with the stream view type that includes old and new images. Then, you could attach a Lambda function to your Stream。当旧图像被填充而新图像为空时,或者当旧图像和新图像之间的差异表明事件已被逻辑删除时,您可以让 Lambda 函数触发通知。
我相信现在支持预定的 Lambda 作业,但我还没有尝试过。 https://aws.amazon.com/about-aws/whats-new/2015/10/aws-lambda-supports-python-versioning-scheduled-jobs-and-5-minute-functions/
简短版本:如何在 AWS lambda 中定期触发事件?
长版:我的情况是数据库中的事件会在特定时间内过期。每当我发现事件已过期时,我想 运行 一个函数(发送推送通知、删除行等)。我知道为创建的每个事件设置一个计时器是不切实际的,但是有没有什么东西可以每分钟扫描一次我的数据库,然后查找过期的事件以 运行 我的代码?如果没有,我的解决方案是否有其他选择?
您可以将事件存储在以 UUID 为键的 DynamoDB table 中,并在此 table 上有一个哈希范围架构 GSI,其中哈希键将是一个到期时间段,例如事件到期的时间,20150701T04Z,GSI 的范围键可以是确切的时间戳(unix 时间)。这样,对于给定的小时到期桶,您可以在事件到期的小时使用范围查询,并利用关键条件将读取限制在您感兴趣的时间范围内。GSI 不强制唯一性,所以即使在同一 Unix 时间有多个事件,你仍然可以。通过投影 ALL attributes 而不是 KEYS_ONLY 或 INCLUDE,您可以将事件到期从 GSI 中移除,而无需再次读取基数 table。通过调整到期桶的大小(小时、分钟或天都是很好的候选者),您可以大大减少写入基础 table 和 GSI 上的查询不会受到限制的机会,因为到期具有不同哈希键的桶将均匀分布在整个哈希键 space.
关于事件处理和 Lambda 的使用,首先,您可以让 EC2 实例执行查询并在事件 table 过期时从事件中删除项目(或通过将它们标记为已过期来将它们删除)。删除事件项将使 table 的大小易于管理,并帮助您避免执行事件驱动处理(推送通知等)的 IOPS dilution in the partitions of your table. If the number of items grows without bound, then your table's partitions will keep splitting resulting in smaller and smaller amounts of provisioned throughput on each partition, unless you up-provision your table. Next in the pipeline, you could enable a DynamoDB stream on the event table with the stream view type that includes old and new images. Then, you could attach a Lambda function to your Stream。当旧图像被填充而新图像为空时,或者当旧图像和新图像之间的差异表明事件已被逻辑删除时,您可以让 Lambda 函数触发通知。
我相信现在支持预定的 Lambda 作业,但我还没有尝试过。 https://aws.amazon.com/about-aws/whats-new/2015/10/aws-lambda-supports-python-versioning-scheduled-jobs-and-5-minute-functions/