使用分布式 Map 处理 Amazon S3 存储桶中的数据 - AWS Step Functions

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用分布式 Map 处理 Amazon S3 存储桶中的数据

此示例项目演示了如何使用分布式地图状态来处理大规模数据,例如,分析历史天气数据并确定每月地球上平均温度最高的气象站。天气数据记录在超过 12,000 个CSV文件中,这些文件又存储在 Amazon S3 存储桶中。

此示例项目包括两个名为 “分布式 S3 副本NOA数据” 和 P 的分布式地图状态rocessNOAAData。分布式 S3 副本NOA数据会迭代名为 noaa-gsod-pdsAmazon S3 的公有 Amazon S3 存储桶中的CSV文件,并将它们复制到您的 Amazon S3 存储桶中 AWS 账户。 P rocessNOAAData 遍历复制的文件,并包含用于执行温度分析的 Lambda 函数。

示例项目首先通过调用 ListObjectsV2 API 操作来检查 Amazon S3 存储桶的内容。根据响应此调用返回的密钥数量,示例项目会做出以下决定之一:

  • 如果密钥计数大于或等于 1,则项目将转换到 P rocessNOAAData 状态。此分布式地图状态包括 Lambda 名为TemperatureFunction的函数用于查找每月平均温度最高的气象站。此函数返回一个以 year-month 为密钥的目录和一个包含将气象站相关信息作为值的目录。

  • 如果返回的密钥计数不超过 1,则 “分布式 S3 副本NOA数据” 状态将列出公共存储桶中的所有对象,noaa-gsod-pds并以 100 个为一批迭代的方式将各个对象复制到您账户中的另一个存储桶。内联 Map 会执行对象的迭代复制。

    复制完所有对象后,项目将转换到 P rocessNOAAData 状态以处理天气数据。

示例项目最终过渡到减速器 Lambda 函数,对TemperatureFunction函数返回的结果进行最终聚合,并将结果写入 Amazon DynamoDB 桌子。

使用分布式 Map,一次最多可运行 1 万个并行子工作流。在此示例项目中,P Distributed Ma p 的最大并rocessNOAAData发度设置为 3000,从而将其限制为 3000 个并行子工作流程执行。

此示例项目创建了状态机,即支持 AWS 资源,并配置相关IAM权限。探索此示例项目,了解如何使用分布式 Map 编排大规模并行工作负载,或将其作为您自己项目的起点。

重要

此示例项目仅在美国东部(弗吉尼亚州北部)区域可用。

AWS CloudFormation 模板和其他资源

您可以使用 CloudFormation 模板来部署此示例项目。此模板在您的中创建以下资源 AWS 账户:

  • 一个 Step Functions 状态机。

  • 状态机的执行角色。此角色授予您的状态机访问其他状态机所需的权限 AWS 服务 以及诸如 Lambda 函数的 “调用” 操作之类的资源。

  • 一个名为 NOAADataBucket 的 Amazon S3 存储桶。此存储桶包含带有天气数据的CSV文件。

  • 一个名为 ReducerFunction 的 Lambda 函数,用于对天气数据进行最终聚合,并将结果写入 Amazon DynamoDB 表。

  • reducer Lambda 函数的执行角色。此角色授予函数访问其他角色的权限 AWS 服务.

  • 用于存储天气分析结果的 Amazon S3 输出存储桶。

  • 一个名为 ResultsDynamoDBTable 的 DynamoDB 表,其中包含 ReducerFunction 返回的结果。

  • 一个名为 TemperatureFunction 的 Lambda 函数,用于查找最高月平均气温。

  • Lambda 函数的执行角色。此角色授予函数访问其他角色的权限 AWS 服务.

  • 存储与状态机执行历史相关的信息的 CloudWatch 日志组。

重要

标准费用适用于每项服务。

第 1 步:创建状态机并预置资源

  1. 打开 Step Functions 控制台,然后选择创建状态机

  2. 在搜索框中键入 Distributed Map to process files in S3,然后从返回的搜索结果中选择分布式 Map 处理 S3 中的文件

  3. 选择下一步以继续。

  4. 选择 “运行演示” 以创建只读和 ready-to-deploy 工作流程,或者选择 “在其上构建” 以创建可编辑的状态机定义,您可以在此基础上构建并稍后部署。

    有关将为此示例项目创建的资源信息,请参阅 AWS CloudFormation 模板和其他资源

    下图显示了分布式 Map 处理 S3 中的文件示例项目的工作流图:

    分布式 Map 处理 S3 中的文件示例项目的工作流图。
  5. 选择使用模板继续进行选择。

后续步骤取决于您之前的选择:

  1. 运行演示 — 您可以先查看状态机,然后再使用部署的资源创建只读项目 AWS CloudFormation 给你的 AWS 账户.

    您可以查看状态机定义,准备就绪后,选择 “部署并运行” 来部署项目并创建资源。

    部署最多可能需要 10 分钟才能创建资源和权限。您可以使用堆栈 ID 链接来监控进度 AWS CloudFormation.

    部署完成后,您应该会在控制台中看到您的新状态机。

  2. 在此基础上再接再厉 — 您可以查看和编辑工作流程定义。在尝试运行自定义工作流程之前,您可能需要为示例项目中的占位符设置值。

注意

部署到您的账户的服务可能会收取标准费用。

第 2 步:运行状态机

配置并部署完所有资源后,您可以运行状态机。

  1. 状态机页面上,选择您的示例项目。

  2. 在示例项目页面上,选择启动执行

  3. 启动执行对话框中,执行以下操作:

    1. (可选)以JSON格式输入输入值以运行您的示例项目。

      如果您选择运行演示,则无需提供任何执行输入。

      注意

      如果您部署的演示项目包含预先填充的执行输入数据,请使用该输入来运行状态机。

    2. 选择启动执行

    3. (可选)Step Functions 控制台会将您引导到一个以您的执行 ID 为标题的页面。该页面被称为执行详细信息页面。在此页面上,您可以随着执行的进展或者在执行完成后查看执行结果。

      执行完成后,请在图表视图上选择各个状态,然后在步骤详细信息窗格中选择各个选项卡,分别查看每个状态的详细信息,包括输入、输出和定义。

      • 有关可在执行详细信息页面上查看的执行信息的详细信息,请参阅执行详情概述

      • 有关在控制台中查看分布式 Map 状态 执行的更多信息,请参阅查看地图运行情况

    4. (可选)查看导出到 Amazon S3 存储桶的执行结果。这些结果包括数据,例如执行输入和输出ARN以及执行状态。有关更多信息,请参阅 ResultWriter (地图)