AWS Lambda:在功能A之后10分钟执行功能B

时间:2018-07-06 09:20:06

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

我正在为时间敏感的应用程序开发无服务器后端。

是否可以在Lambda函数B之后XX分钟执行Lambda函数A

我正在寻找一个干净的无服务器解决方案。使用setTimeout或类似方法实在是太难受了。

示例:在执行Lambda函数10分钟后,使用SNS发送通知。

4 个答案:

答案 0 :(得分:2)

最简单的方法是使用延迟交付的SQS。

  1. Lambda-A将消息添加到SQS队列,并将传递延迟设置为10分钟。您可以在0到15分钟之间设置任何延迟。您还可以使用SQS延迟队列来延迟添加到队列中的所有消息。 https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-delay-queues.html

  2. 10分钟后,SQS消息变为可见,并且SQS触发Lambda-B。

  3. Lambda-B接收Amazon SQS事件,并使用回执句柄从队列中删除消息。这是来自https://docs.aws.amazon.com/lambda/latest/dg/eventsources.html#eventsources-sqs的示例:

 "Records": [
    {
        "messageId": "c80e8021-a70a-42c7-a470-796e1186f753",
        "receiptHandle": "AQEBJQ+/u6NsnT5t8Q/VbVxgdUl4TMKZ5FqhksRdIQvLBhwNvADoBxYSOVeCBXdnS9P+erlTtwEALHsnBXynkfPLH3BOUqmgzP25U8kl8eHzq6RAlzrSOfTO8ox9dcp6GLmW33YjO3zkq5VRYyQlJgLCiAZUpY2D4UQcE5D1Vm8RoKfbE+xtVaOctYeINjaQJ1u3mWx9T7tork3uAlOe1uyFjCWU5aPX/1OHhWCGi2EPPZj6vchNqDOJC/Y2k1gkivqCjz1CZl6FlZ7UVPOx3AMoszPuOYZ+Nuqpx2uCE2MHTtMHD8PVjlsWirt56oUr6JPp9aRGo6bitPIOmi4dX0FmuMKD6u/JnuZCp+AXtJVTmSHS8IXt/twsKU7A+fiMK01NtD5msNgVPoe9JbFtlGwvTQ==",
        "body": "{\"foo\":\"bar\"}",
        "attributes": {
            "ApproximateReceiveCount": "3",
            "SentTimestamp": "1529104986221",
            "SenderId": "594035263019",
            "ApproximateFirstReceiveTimestamp": "1529104986230"
        },
        "messageAttributes": {},
        "md5OfBody": "9bb58f26192e4ba00f01e2e7b136bbd8",
        "eventSource": "aws:sqs",
        "eventSourceARN": "arn:aws:sqs:us-west-2:594035263019:NOTFIFOQUEUE",
        "awsRegion": "us-west-2"
    }
]

答案 1 :(得分:1)

是的,您可以使用SQS Delay Queues来触发lambda B。

步骤如下

创建一个SQS队列,消息延迟设置为10分钟 将Lambda B触发器设置为上述SQS 现在,在Lambda函数A执行之后,在SQS上放置一条消息

现在,由于在SQS上设置了延迟,该消息将在10分钟后可用,一旦可用,它将触发Lambda B

答案 2 :(得分:1)

使用message timers in SQS,您可能会实现所需的目标。

功能A应该将消息发布到队列上,延迟10分钟,功能B应该订阅该队列。

答案 3 :(得分:1)

我认为最简单的方法是使用AWS Step Functions。 您可以-

  1. 配置由功能A,等待状态,功能B组成的步进机。
  2. 从功能A调用步进机,该步进机将由等待状态和功能B组成(如果您希望从功能A的开始处有延迟)。