让Lambda函数立即执行,和/或在一小时内执行

问题描述 投票:0回答:3

我正在尝试实现应该发送HTTP请求的AWS Lambda函数。如果该请求失败(响应不是状态200),我应该再等一小时再重试(Lambda保持热的时间更长)。实现这个的最佳方法是什么?

我想到的是以某种方式保留我的HTTP请求,并且能够在持续的HTTP请求的情况下在指定的时间内再次触发Lambda函数。但我不完全确定哪种AWS服务可以为我提供该功能。 SQS是一个可以帮助的选项吗?

或者,我可以为此动态调度Lambda执行吗?请注意,要重试的请求应与第一个请求相同。

还有其他建议吗?这是最好的做法是什么?

(Lambda函数是我的选择。没有EC2或这样的东西是可能的)

amazon-web-services http scheduled-tasks aws-lambda amazon-sqs
3个回答
0
投票

您不能直接从SQS触发Lambda函数(无论如何,在编写时)。

您可以通过将请求数据(具有适当的时间戳)写入为TTL配置的DynamoDB表来处理非200错误。您可以使用DynamoDB Streams检测DynamoDB何时删除记录,以及可以从流中trigger Lambda函数。

这显然是实现您想要的迂回方式,但测试应该很简单。


0
投票

正如jarmod所提到的,你不能直接通过SQS触发Lambda函数。但是一个解决方法(我亲自使用的)将执行以下操作:

如果请求失败,请将项目推送到SQS延迟队列(docs

此SQS消息仅在一定延迟(您提到一小时)后才会在队列中可见。

然后有第二个scheduled lambda函数,它由一个较小时间帧的cron值触发(我使用了一分钟)。

然后,第二个函数将扫描SQS队列,如果项目在队列中,则调用您的第一个Lambda函数(通过SNS或AWS SDK)重试它。

PS:请注意,您可以将数据放入SQS项目中,因为您提到需要将lambda函数设置为相同,您可以在此处存储第一个函数的输入,以便在一小时后重复使用。


0
投票

我建议你仔细看看AWS Step Functions。基本上,步骤函数是一个状态机,它允许您执行Lambda函数,即每个步骤中的任务。

如果您登录AWS控制台并从“服务”菜单中选择“步骤功能”,则可以找到更多信息。通过按下Get Started按钮,可以显示不同步骤函数的几个示例实现。首先,我将仔细研究“选择状态”示例(确定HTTP请求是否成功)。如果没有,则继续“等待状态”示例。

© www.soinside.com 2019 - 2024. All rights reserved.