Amazon web services AWS Step函数映射状态是否是处理1000万行CSV的最佳选项?

Amazon web services AWS Step函数映射状态是否是处理1000万行CSV的最佳选项?,amazon-web-services,aws-step-functions,Amazon Web Services,Aws Step Functions,我有一个可能需要数千或数百万次Lambda调用的工作流,我试图了解步骤函数映射状态是否允许我需要的执行次数 我正在创建一个服务,该服务将由上传到S3存储桶的CSV文件触发。CSV文件将有数百万个需要处理的事件注册(不同lambda的流程),并有一个成功、失败等总结的输出。查看不同的服务,我认为Step功能可以协调流程。映射状态允许动态数量的子工作流,但我没有找到最大数量。我可以批量执行以限制工作流(如果数量可能达到数千)。如果不是,我正在考虑一些利用SQS的方法,或者试图了解AWS批处理是否也是

我有一个可能需要数千或数百万次Lambda调用的工作流,我试图了解步骤函数映射状态是否允许我需要的执行次数

我正在创建一个服务,该服务将由上传到S3存储桶的CSV文件触发。CSV文件将有数百万个需要处理的事件注册(不同lambda的流程),并有一个成功、失败等总结的输出。查看不同的服务,我认为Step功能可以协调流程。映射状态允许动态数量的子工作流,但我没有找到最大数量。我可以批量执行以限制工作流(如果数量可能达到数千)。如果不是,我正在考虑一些利用SQS的方法,或者试图了解AWS批处理是否也是一个有效的选项


步骤函数的映射状态是否适用于具有动态执行次数的流,或者另一个服务是否是我的任务的更好选项?

我将避免在这个用例中使用步骤函数
Map
state需要
ItemsPath
参数,该参数指向
数据中的项目数组(从一个状态传递到另一个状态的JSON)。这个JSON的大小限制为32K个字符(实际上可能是32KiB左右,我还没有深入研究Step函数的编码处理细节)。
因此,这有效地排除了Step函数中的
Map
,因为这样的数据量只会达到服务限制

在这个用例中,我认为最好使用SQS和Lambda。将文件上载到S3将触发Lambda,Lambda将触发AWS批处理作业,AWS批处理作业将下载CSV文件并将每一行的消息发送到一个或多个SQS队列(如果您希望不同行类型的Lambda不同)。Lambda具有与SQS的本机集成,因此您可以使用它

请记住,SQS可能会复制消息,因此即使对同一行进行多次处理,Lambda也应该正常工作(Lambda应该是幂等的)。如果您想拥有可靠的分布式系统,基本上系统的任何元素都应该是幂等的


另一个解决方案(如果您坚持使用Step函数)是为CSV文件中的每一行开始新的执行,但是,我认为您会很快达到服务限制,而且成本会很高。

一些澄清问题:处理这样一个文件中的所有行总共需要多长时间?为什么您认为AWS Lambda是处理文件的合适方法?您是否考虑过处理该文件的任何其他方法?目前我不完全确定处理整个文件需要多长时间,但文件中的每个项目将需要大约200毫秒。考虑多个Lambda实例同时执行此操作的扇出方法。目前认为Lambda是文件中的每一行都需要转换为JSON、解析,然后作为请求传递给特定的API端点,并捕获响应以最终报告整个过程。但还有其他资源,没有发现任何更符合要求的资源。