AWS Lambda:在功能 A 之后 10 分钟执行功能 B
AWS Lambda: Execute function B 10 minutes after function A
我正在为时间敏感的应用程序开发无服务器后端。
是否可以在 Lambda 函数 A
后 XX 分钟执行 Lambda 函数 B
?
我正在寻找一个干净的无服务器解决方案。使用 setTimeout
或类似的方法太过骇人听闻了。
示例:在 Lambda 函数执行 10 分钟后使用 SNS 发送通知。
是的,您可以使用 SQS Delay Queues 触发 lambda B。
步骤如下
创建消息延迟设置为 10 分钟的 SQS 队列
将 Lambda B 触发器设置为上述 SQS
现在,在 Lambda 函数 A 执行后,在 SQS
上发送一条消息
现在因为在 SQS 上设置了延迟,消息将在 10 分钟后可用,一旦可用,它将触发 Lambda B
最简单的方法是使用延迟交付的 SQS。
Lambda-A 将一条消息添加到 SQS 队列并将传递延迟设置为 10 分钟。您可以设置 0 到 15 分钟之间的任何延迟。您还可以使用 SQS 延迟队列来延迟添加到队列中的所有消息。
https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-delay-queues.html
10 分钟后,SQS 消息可见并且 SQS 触发 Lambda-B。
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"
}
]
您可能可以使用 message timers in SQS.
获得您想要的东西
函数 A 应该向队列发布一条消息,延迟 10 分钟,函数 B 应该订阅该队列。
我认为最简单的方法是使用 AWS Step Functions。
您可以 -
- 配置一个由函数A、等待状态、函数B组成的步进机
- 从函数A调用步进机,它将由等待状态和函数B组成(如果你想从函数A开始有延迟)。
我正在为时间敏感的应用程序开发无服务器后端。
是否可以在 Lambda 函数 A
后 XX 分钟执行 Lambda 函数 B
?
我正在寻找一个干净的无服务器解决方案。使用 setTimeout
或类似的方法太过骇人听闻了。
示例:在 Lambda 函数执行 10 分钟后使用 SNS 发送通知。
是的,您可以使用 SQS Delay Queues 触发 lambda B。
步骤如下
创建消息延迟设置为 10 分钟的 SQS 队列 将 Lambda B 触发器设置为上述 SQS 现在,在 Lambda 函数 A 执行后,在 SQS
上发送一条消息现在因为在 SQS 上设置了延迟,消息将在 10 分钟后可用,一旦可用,它将触发 Lambda B
最简单的方法是使用延迟交付的 SQS。
Lambda-A 将一条消息添加到 SQS 队列并将传递延迟设置为 10 分钟。您可以设置 0 到 15 分钟之间的任何延迟。您还可以使用 SQS 延迟队列来延迟添加到队列中的所有消息。 https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-delay-queues.html
10 分钟后,SQS 消息可见并且 SQS 触发 Lambda-B。
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"
}
]
您可能可以使用 message timers in SQS.
获得您想要的东西函数 A 应该向队列发布一条消息,延迟 10 分钟,函数 B 应该订阅该队列。
我认为最简单的方法是使用 AWS Step Functions。 您可以 -
- 配置一个由函数A、等待状态、函数B组成的步进机
- 从函数A调用步进机,它将由等待状态和函数B组成(如果你想从函数A开始有延迟)。