首页 文章

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

提问于
浏览
0

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

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

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

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

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

3 回答

  • 0

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

    您可以通过将请求数据(具有适当的时间戳)写入为TTL配置的DynamoDB表来处理非200错误 . 您可以使用DynamoDB Streams检测DynamoDB何时删除记录,以及可以从流中检测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控制台并从"Services"菜单中选择"Step Functions",则可以找到更多信息 . 通过按Get Started按钮,可以显示不同步骤函数的几个示例实现 . 首先,我将仔细研究"Choice state"示例(确定HTTP请求是否成功) . 如果没有,那么继续"Wait state"示例 .

相关问题