教程 4:定义并行执行的多项任务 - Amazon Step Functions
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

教程 4:定义并行执行的多项任务

到目前为止,您已经学会了如何按顺序运行工作流。然而,您还可以使用 Parallel 状态并行运行两个或多个步骤。Parallel 状态会使解释器同时执行每个分支。

处于同一个 Parallel 状态下的两个分支接收相同的输入,但是每个分支都会处理特定于该分支的输入部分。Step Functions 会等待每个分支斗执行完毕后再进行下一步。

在本教程中,您将使用 Parallel 状态同时检查申请人的身份和地址。

第 1 步:创建 Lambda 函数执行所需的检查

此信用卡申请工作流在 Parallel 状态下调用两个 Lambda 函数,用于检查申请人的身份和地址。两项检查使用 Parallel 状态同步进行。只有在两个并行分支都执行完毕后,状态机才会完成执行。

创建 check-identity 和 check-address Lambda 函数
  1. 在新选项卡或窗口中,打开 Lambda 控制台,并创建两个名为 check-identitycheck-addressNode.js 16.x Lambda 函数。有关使用控制台创建 Lambda 函数的信息,请参阅《Amazon Lambda 开发人员指南》中的使用控制台创建 Lambda 函数

  2. 打开 check-identity 函数页面,将代码源区域中已有的代码替换为以下代码:

    const ssnRegex = /^\d{3}-?\d{2}-?\d{4}$/; const emailRegex = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/; class ValidationError extends Error { constructor(message) { super(message); this.name = "CustomValidationError"; } } exports.handler = async (event) => { const { ssn, email } = event; console.log(`SSN: ${ssn} and email: ${email}`); const approved = ssnRegex.test(ssn) && emailRegex.test(email); if (!approved) { throw new ValidationError("Check Identity Validation Failed"); } return { statusCode: 200, body: JSON.stringify({ approved, message: `Identity validation ${approved ? 'passed' : 'failed'}` }) } };
  3. 打开 check-address 函数页面,将代码源区域中已有的代码替换为以下代码:

    class ValidationError extends Error { constructor(message) { super(message); this.name = "CustomAddressValidationError"; } } exports.handler = async event => { const { street, city, state, zip } = event; console.log(`Address information: ${street}, ${city}, ${state} - ${zip}`); const approved = [street, city, state, zip].every(i => i?.trim().length > 0); if (!approved) { throw new ValidationError("Check Address Validation Failed"); } return { statusCode: 200, body: JSON.stringify({ approved, message: `Address validation ${ approved ? 'passed' : 'failed'}` }) } };
  4. 对于这两个 Lambda 函数,请从函数概述部分复制各自的 Amazon 资源名称 (ARN),并保存到一个文本文件中。在为 Verify applicant's identity and address 状态指定服务集成时,您需要这两个函数 ARN。以下是示例 ARN:

    arn:aws:lambda:us-east-2:123456789012:function:HelloWorld

第 2 步:更新工作流 – 添加要执行的并行任务

在 Step Functions 控制台中,您将更新工作流,以便指定与您在第 1 步中创建的 check-identitycheck-address Lambda 函数的服务集成。

在工作流中添加并行任务
  1. 打开 Step Functions 控制台窗口,其中应包含您在教程 1:为状态机创建原型中创建的工作流原型。

  2. 选择 Verify identity 状态,然后在配置选项卡中执行以下操作:

    1. 对于集成类型,保留默认的优化选项。

      注意

      使用 Step Functions,您可以与其他 Amazon Web Services集成,并在工作流中对其进行编排。有关服务集成及其类型的更多信息,请参阅 与其他服务 Amazon Step Functions 一起使用

    2. 对于函数名称,从下拉列表中选择 check-identity Lambda 函数。

    3. 对于有效负载,选择输入有效负载,然后将示例有效负载替换为以下有效负载:

      { "email": "janedoe@example.com", "ssn": "012-00-0000" }
  3. 选择 Verify address 状态,然后在配置选项卡中执行以下操作:

    1. 对于集成类型,保留默认的优化选项。

    2. 对于函数名称,从下拉列表中选择 check-address Lambda 函数。

    3. 对于有效负载,选择输入有效负载,然后将示例有效负载替换为以下有效负载:

      { "street": "123 Any St", "city": "Any Town", "state": "AT", "zip": "01000" }
  4. 选择下一步