使用AWS Lambda链的挑战

时间:2018-04-09 02:09:40

标签: amazon-web-services aws-lambda serverless aws-step-functions

上下文 我有一个由6个lambda函数(链接在一起)组成的管道,由SNS通知触发,该通知在文件落在S3时生成。此管道实际上接受文件(几GB),过滤它(创建Spark集群以运行作业,然后在末尾删除),并将其插入到DB中。 Lambdas正在策划流程。

的问题: 如果一个Lambda失败,链断裂,因此没有有效的故障处理。其次,如果轮询/计算时间超过5分钟,我们会遇到超时,因此无法进行有效重试。如果lambda失败,则需要很长时间来测试/调试问题。还有没有可见性,比如说有多少工作失败了,有多少工作通过了?我们不知道。在电子邮件上获取大量SNS通知并不是非常有效/有用。如果链断裂,我们就无法执行清除操作,例如删除SPark集群或内务处理步骤。

我的问题: AWS Step Functions是解决上述问题的不错选择吗?什么时候不使用Step Function服务?如果你不能通过SNS调用Step Function,那么只要文件落在S3上,最好的方法就是调用它?随意分享任何其他方法,轻松有效地解决这个用例。

1 个答案:

答案 0 :(得分:2)

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

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

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

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