教程 5:同时迭代一组项目 - Amazon Step Functions
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

教程 5:同时迭代一组项目

在上一个教程中,您学习了如何使用 Parallel 状态并行运行单独的步骤分支。使用 Map 状态,您可以为数据集中的每个项目运行一组工作流步骤。 Map 状态的迭代是并行运行的,可以实现快速处理数据集。

通过将 Map 状态包含在工作流中,您可以使用以下两种 Map 状态处理模式 之一来执行数据处理等任务:内联模式和分布式模式。要配置 Map 状态,您需要定义一个 ItemProcessor,其中包含用于指定 Map 状态处理模式及其定义的 JSON 对象。在本教程中,您将在默认的内联模式下运行 Map 状态,该模式最多支持 40 次并发迭代。当您运行分布式模式下的 Map 状态时,它最多支持 10000 个并行子工作流执行。

当您的工作流执行进入 Map 状态时,它将迭代状态输入中指定的 JSON 数组。对于每个数组项目,其相应的迭代在包含 Map 状态工作流的上下文中运行。当所有迭代完成后,Map 状态将返回一个数组,其中包含由 ItemProcessor 处理的每个项目的输出。

在本教程中,您将学习如何在内联模式下使用 Map 状态,通过迭代一组征信机构来获取申请人的信用评分。为此,您首先要获取存储在 Amazon DynamoDB 表中的所有征信机构的名称,然后使用 Map 状态循环访问征信机构列表,以获取每个征信机构报告的申请人的信用评分。

第 1 步:创建 DynamoDB 表来存储所有征信机构的名称

在本步骤中,您将使用 DynamoDB 控制台创建一个名为 GetCreditBureau 的表。该表使用字符串属性 Name 作为分区键。在此表中,您存储了希望从中获取申请人信用评分的所有征信机构的名称。

  1. 登录 Amazon Web Services Management Console,并打开 DynamoDB 控制台:https://console.aws.amazon.com/dynamodb/。

  2. 在控制台的导航窗格中,选择,然后选择创建表

  3. 按以下所示输入表详细信息:

    1. 对于表名称,输入 GetCreditBureau

    2. 对于分区键,输入 Name

    3. 其他保留默认选择,然后选择创建表

  4. 创建表后,在列表中,选择 GetCreditBureau 表。

  5. 选择操作,然后选择创建项目

  6. 中,输入征信机构的名称。例如,CredTrack

  7. 选择创建项目

  8. 重复此过程,为其他征信机构的名称创建项目。例如,KapFinnCapTrust

第 2 步:更新状态机 – 从 DynamoDB 表中获取结果

在 Step Functions 控制台中,您将添加一个 Task 状态,然后使用 Amazon 开发工具包集成从您在第 1 步中创建的 DynamoDB 表中获取征信机构的名称。您将使用此步骤的输出作为 Map 状态的输入,稍后您将在本教程的工作流中添加该状态。

  1. 打开 CreditCardWorkFlow 状态机进行更新。

  2. 选择 Get list of credit bureaus 状态。

  3. 对于 API 参数,将表名称值指定为 GetCreditBureau

第 3 步:创建可返回所有征信机构信用评分的 Lambda 函数

在此步骤中,您将创建一个 Lambda 函数,用于接收所有征信机构的名称作为输入,并返回申请人在每个征信机构中的信用评分。此 Lambda 函数将从您将在本教程第 4 步中添加到工作流中的 Map 状态调用。

  1. 创建一个 Node.js 16.x Lambda 函数,并将其命名 get-credit-score

  2. 在标题为 get-credit-score 的页面上,将以下代码粘贴到代码源区域。

    function getScore(arr) { let temp; let i = Math.floor((Math.random() * arr.length)); temp = arr[i]; console.log(i); console.log(temp); return temp; } const arrScores = [700, 820, 640, 460, 726, 850, 694, 721, 556]; exports.handler = (event, context, callback) => { let creditScore = getScore(arrScores); callback(null, "Credit score pulled is: " + creditScore + "."); };
  3. 部署 Lambda 函数。

第 4 步:更新状态机 – 添加 Map 状态以迭代方式获取信用评分

在 Step Functions 控制台中,您将添加一个 Map 状态,用于调用 get-credit-score Lambda 函数来检查 Get list of credit bureaus 状态返回的申请人在所有征信机构中的信用评分。

  1. 打开 CreditCardWorkFlow 状态机进行更新。

  2. 选择 Get scores from all credit bureaus 状态。

  3. 配置选项卡中,选择提供项目数组的路径,然后输入 $.Items

  4. Map 状态中选择获取所有评分步骤。

  5. 配置选项卡中,确保在集成类型中选择了优化

  6. 函数名称中,键入 get-credit-score Lambda 函数的名称,然后从出现的下拉列表中进行选择它。

  7. 对于有效负载,选择无有效负载