我的lambda配置为在消息发布到SQS队列时触发。下面是用于部署的SAM模板。
MyQueue:
Type: AWS::SQS::Queue
Properties:
VisibilityTimeout: 180
DelaySeconds: 90
MyLambda:
Type: AWS::Serverless::Function
Properties:
CodeUri: ../pathToCode
Handler: index.handler
Events:
MySQSEvent:
Type: SQS
Properties:
Queue: !GetAtt MyQueue.Arn我使用的是DelaySeconds属性的AWS::SQS::QUEUE,这显然是行不通的。消息一旦发布到队列中,我的lambda就会被执行。我怎么才能拖延时间呢?
发布于 2019-04-03 09:08:52
编辑的
可以考虑三种方法来延迟从SQS到Lambda的消息传递:
DelaySeconds,使新消息在特定时间内对消费者(如Lambda)不可见,最多可达15分钟MaximumBatchingWindowInSeconds。Lambda可以在指定的持续时间内聚合消息(最多可达5分钟),或直到到达BatchSize为止(默认情况下,最多可聚合10,000条消息)。此选项配置消息的最大等待时间,而对于某些消息,仍然根本不存在等待(当达到最大窗口时间/大小时)。Wait状态),如原始答案中所建议的那样。这提供了最大的灵活性,并且能够等待长达1年的。原始答案
最好的解决方案是使用AWS Step函数。
由SQS触发的lambda应该执行状态机,其中第一步是所需的睡眠量,第二步是lambda调用。
发布于 2021-04-18 16:55:14
在2021年,最好的答案是使用SQS的新的“批处理窗口”特性:
使用它,您可以允许SQS队列在调用Lambda函数之前收集最多5分钟的消息。
发布于 2019-04-03 09:15:26
延迟秒:每当您轮询队列时,它都会延迟接收消息调用。但是,每当您将消息推入队列中时,就会立即插入该消息。
如果您希望在某个时间间隔后执行lambda,请在开始执行之前放置一个睡眠(N),并在需要时增加lambda。到目前为止,还没有直接延迟触发器的方法,您的lambda将在消息进入队列后立即被触发。
https://stackoverflow.com/questions/55490588
复制相似问题