AWS Step Functions映射状态是否是处理1000万行CSV的最佳选择?

时间:2019-11-05 19:07:01

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

我有一个工作流程,可能需要数千或数百万个Lambda调用,并且正在尝试了解“步骤功能”映射状态是否允许我需要的执行次数。

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

对于具有动态执行次数的流程,Step Functions的映射状态是否能很好地工作?或者另一种服务会更好地适合我的任务?

1 个答案:

答案 0 :(得分:0)

在该用例中,我将避免使用“步进功能”。 Map状态要求使用ItemsPath参数,该参数指向Data(从一种状态传递到另一种状态的JSON)中的项目数组。此JSON的大小限制为32K个字符(有效地大约在32KiB左右,我没有深入研究Step Functions进行编码处理的细节)。 因此,这有效地排除了“步骤功能”中的Map,因为您只需使用此数据量即可达到服务限制。

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

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

另一种解决方案(如果您坚持使用步进功能)将是为CSV文件中的每一行启动新的执行,但是,我认为您会很快达到服务限制,这会很昂贵。