我正在尝试实现应该发送HTTP请求的AWS Lambda函数。如果该请求失败(响应不是状态200),我应该再等一小时再重试(Lambda保持热的时间更长)。实现这个的最佳方法是什么?
我想到的是以某种方式保留我的HTTP请求,并且能够在持续的HTTP请求的情况下在指定的时间内再次触发Lambda函数。但我不完全确定哪种AWS服务可以为我提供该功能。 SQS是一个可以帮助的选项吗?
或者,我可以为此动态调度Lambda执行吗?请注意,要重试的请求应与第一个请求相同。
还有其他建议吗?这是最好的做法是什么?
(Lambda函数是我的选择。没有EC2或这样的东西是可能的)
正如jarmod所提到的,你不能直接通过SQS触发Lambda函数。但是一个解决方法(我亲自使用的)将执行以下操作:
如果请求失败,请将项目推送到SQS延迟队列(docs)
此SQS消息仅在一定延迟(您提到一小时)后才会在队列中可见。
然后有第二个scheduled lambda函数,它由一个较小时间帧的cron值触发(我使用了一分钟)。
然后,第二个函数将扫描SQS队列,如果项目在队列中,则调用您的第一个Lambda函数(通过SNS或AWS SDK)重试它。
PS:请注意,您可以将数据放入SQS项目中,因为您提到需要将lambda函数设置为相同,您可以在此处存储第一个函数的输入,以便在一小时后重复使用。
我建议你仔细看看AWS Step Functions。基本上,步骤函数是一个状态机,它允许您执行Lambda函数,即每个步骤中的任务。
如果您登录AWS控制台并从“服务”菜单中选择“步骤功能”,则可以找到更多信息。通过按下Get Started按钮,可以显示不同步骤函数的几个示例实现。首先,我将仔细研究“选择状态”示例(确定HTTP请求是否成功)。如果没有,则继续“等待状态”示例。