我有一个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就会被执行。我怎么能拖延呢?
最佳解决方案是使用AWS步骤功能。
由SQS触发的lambda应该执行状态机,其中第一步是所需的睡眠量,第二步是lambda调用。
延迟秒:每当您轮询队列时,它会延迟接收消息呼叫。但无论何时将消息推入队列,都会立即插入消息。
如果您希望lambda在触发器发出一定间隔后执行,请在开始执行前设置sleep(n)并在需要时增加lambda超时。截至目前,没有直接的方法来延迟触发器,一旦消息进入队列,就会触发lambda。