AWS如何重新安排S3 lambda事件?

时间:2017-12-06 21:48:30

标签: amazon-web-services amazon-s3 aws-lambda

我有一个lambda,它在S3中创建一个对象时运行,在某些情况下我需要重新安排这个lambda,让我们说15分钟后。

当我的lambda第二次运行时,我需要有相同的事件参数,我不介意其他字段而不是桶和路径。 event.Records[0].s3.bucket.name event.Records[0].s3.object.key。但是很容易有event

我的另一种方法是将这些数据保存在发电机中,并且每隔15分钟就会有另一个从那里读取的lambda(糟糕)。

但重新安排我当前的函数并将相同的参数传递给它会更好。 像这样:

exports.handler = (event, context, callback) => {
   if(xyz)
      reschedule(15 * 1000 * 60, 'ThisLambdaName', event, context); 
}

像setTimeout这样的东西,但没有AWS为这15分钟充电我。

2 个答案:

答案 0 :(得分:5)

您可以将DynamoDB与TTL,DynamoDB Streams和AWS Lambda一起使用。

将数据保存在DynamoDB中,并将TTL设置为15分钟后。

当达到项目的TTL时,它将创建一个DynamoDB流,然后您可以使用该流来再次使用原始数据触发原始功能。您很可能必须在处理程序中进行一些更改,以便以不同方式处理来自S3和DynamoDB Streams的事件。

参考文献:

答案 1 :(得分:1)

这是一个老问题,但目前唯一的答案是误导。利用带有TTL的DynamoDB并不好,因为根据AWS documentation,在删除过期项目之前可能需要长达48小时,因此根据用例,lambda函数可能会延迟执行几天。

有几种简单的解决方案可供选择。

1)在由S3触发的lambda函数中,将事件放在SQS delay queue上。请注意,消息可用之前的最长延迟时间为15分钟。

2)在S3触发的lambda函数中,使用CloudWatch Events PutRule API并创建一个在给定时间执行lambda函数的规则。确保delete the rule一旦处理完毕,因为每个区域的软限制为100条规则。