Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 使用AWS Lambda链的挑战_Amazon Web Services_Aws Lambda_Serverless_Aws Step Functions - Fatal编程技术网

Amazon web services 使用AWS Lambda链的挑战

Amazon web services 使用AWS Lambda链的挑战,amazon-web-services,aws-lambda,serverless,aws-step-functions,Amazon Web Services,Aws Lambda,Serverless,Aws Step Functions,上下文: 我有一个由6个lambda函数(链接在一起)组成的管道,由SNS通知触发,该通知在文件到达S3时生成。这个管道实际上接收文件(几GB),过滤它(创建Spark cluster来运行作业,然后在最后删除),并将其插入数据库。lambda正在协调流程 问题: 如果一个Lambda发生故障,则链断开,因此无法进行有效的故障处理。其次,如果轮询/计算花费的时间超过5分钟,我们会遇到超时,因此无法进行有效重试。如果lambda失败,测试/调试问题需要很长时间。也没有可见性,比如说有多少作业失败了

上下文: 我有一个由6个lambda函数(链接在一起)组成的管道,由SNS通知触发,该通知在文件到达S3时生成。这个管道实际上接收文件(几GB),过滤它(创建Spark cluster来运行作业,然后在最后删除),并将其插入数据库。lambda正在协调流程

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

我的问题:
AWS Step函数是解决上述问题的好选择吗?您什么时候不使用Step功能服务?如果您不能通过SNS调用Step函数,那么在文件到达S3时调用它的最佳方式是什么?请随意分享任何其他方法,以轻松有效地解决此用例。

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

下面是一个从文件上传到S3触发Step函数的示例:

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


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

可能会得到更多关于这对您有用的答案。谢谢Kim,但我读到Lambda函数在失败之前会重试3次,那么Step函数是如何带来价值的呢?@obaid Lambda函数只有在异步调用(例如通过SNS触发器)时才会自动重试3次。Step函数同步调用它们,因此重试逻辑必须由状态机本身定义。现在我们可以从sqs触发lambda: