使用 AWS Lambda 链的挑战



上下文:我有一个由 6 个 lambda 函数(链接在一起)的管道,由 SNS 通知触发,每当文件登陆 S3 时都会生成该通知。此管道实质上是获取文件(几 GB),对其进行筛选(创建 Spark 群集以运行作业,然后在最后删除),并将其插入数据库。Lambda正在编排流程。

问题:如果一个 Lambda 发生故障,链会断开,因此无法进行有效的故障处理。其次,如果轮询/计算花费的时间超过 5 分钟,我们会遇到超时,因此没有有效的重试。如果 lambda 失败,测试/调试问题需要很长时间。也没有可见性,例如有多少工作失败了,有多少工作通过了?不知道。通过电子邮件获取一堆SNS通知不是很有效/有帮助。如果链断裂,我们将无法执行清理操作,例如删除 SPark 集群或内务管理步骤。

我的问题:AWS Step Functions 是解决上述问题的好选择吗?什么时候不使用阶跃函数服务?如果您无法通过 SNS 调用步进函数,那么每当文件登陆 S3 时调用它的最佳方式是什么?随意分享任何其他方法,以轻松有效地解决此用例。

是的。您可以在 Step 函数中定义 catch 处理程序来处理失败的 lambda 并重新运行它们,或者在失败时执行任何您需要的操作。

以下是从文件上传到 S3 触发步骤函数的示例: https://aws.amazon.com/blogs/compute/synchronizing-amazon-s3-buckets-using-aws-step-functions/

也就是说,如果您只需要一个简单的重试逻辑,则可以使用 SQS 更快地到达那里。当 SQS 客户端从队列接收消息时,它们实际上不会立即删除,而是 SQS 会保留消息。如果客户端在特定时间内未删除消息,则这些消息将放回队列中。

遗憾的是,目前无法直接从 SQS 触发 lambda,但您可以设置一个或多个 CloudWatch 事件来定期轮询 SQS。

相关内容

  • 没有找到相关文章

最新更新