SQS触发Lambda传递单个邮件延迟

时间:2018-10-05 10:39:32

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

我使用CloudFormation在以下资源中创建了

  • SQS(DelayDelivery:0)
  • Lambda
  • 角色
  • LambdaFunctionEventSourceMapping(SQS触发Lambda函数)
  • 日志

资源创建成功。

当我以30秒的延迟传递时间向SQS发送消息时,SQS立即触发Lambda。相反,它应该在30秒后触发。 仅供参考:我正在使用AWS控制台发送消息。

根据下面的链接,它应该已经将SQS延迟覆盖为单个消息延迟。 https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-message-timers.html

还有其他方法可以实现这一目标。

1 个答案:

答案 0 :(得分:0)

这可能是AWS控制台的错误,因为当我通过AWS控制台将消息发送到SQS时遇到类似的问题(瞬时调用的lambda)。但是,如果我通过CLI将消息发送到SQS,则可以实现所需的行为:

aws sqs send-message --queue-url https://sqs.ap-southeast-1.amazonaws.com/{account}/{sqs} --message-body "msg 1 delay 60 secs" --delay-seconds 60

aws sqs send-message --queue-url https://sqs.ap-southeast-1.amazonaws.com/{account}/{sqs} --message-body "msg 2 delay 30 secs" --delay-seconds 30

这就是我在lambda Cloudwatch日志中看到的内容:

2019-02-19T02:26:36.189Z    510df77b-d1e5-5297-b0a0-a39eba727c61    msg 2 delay 30 secs
2019-02-19T02:26:36.189Z    510df77b-d1e5-5297-b0a0-a39eba727c61    sent 2019-02-19T02:26:06.124Z
2019-02-19T02:26:36.189Z    510df77b-d1e5-5297-b0a0-a39eba727c61    1st receive 2019-02-19T02:26:36.124Z

2019-02-19T02:26:57.729Z    fedcb590-2e14-596a-bc4b-e17545a46d91    msg 1 delay 60 secs
2019-02-19T02:26:57.729Z    fedcb590-2e14-596a-bc4b-e17545a46d91    sent 2019-02-19T02:25:57.667Z
2019-02-19T02:26:57.729Z    fedcb590-2e14-596a-bc4b-e17545a46d91    1st receive 2019-02-19T02:26:57.667Z

从日志中可以看到,消息传递已适当延迟,仅在收到消息后才调用lambda。