创建使用 Lambda 的 Step Functions 状态机 - Amazon Step Functions
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

创建使用 Lambda 的 Step Functions 状态机

在本教程中,您将使用 Amazon Step Functions 创建一个单步工作流来调用 Amazon Lambda 函数。

注意

Step Functions 基于状态机任务。在 Step Functions 中,状态机称为工作流程,是一系列由事件驱动的步骤。工作流程中的每个步骤都称为状态。例如,Task 状态表示另一 Amazon 服务执行的工作单元,例如调用另一个 Amazon Web Services 服务或 API。在 Step Functions 中,运行用于执行任务的工作流程的实例称为执行

有关更多信息,请参阅:

Lambda 非常适合于 Task 状态,因为 Lambda 函数无服务器 且易于编写。您可以在 Amazon Web Services Management Console或常用编辑器中编写代码。Amazon 会处理为您的函数提供计算环境并运行函数这些细节。

第 1 步:创建 Lambda 函数

您的 Lambda 函数接收事件数据并返回问候语。

重要

确保您的 Lambda 函数与状态机位于相同的 Amazon 账户和 Amazon Web Services 区域下。

  1. 打开 Lambda 控制台,然后选择创建函数

  2. 创建函数页面上,选择从头开始创作

  3. 对于函数名称,请输入 HelloFunction

  4. 保留所有其他选项的默认选择,然后选择创建函数

  5. 创建 Lambda 函数后,复制页面右上角显示的该函数的 Amazon 资源名称 (ARN)。以下是示例 ARN:

    arn:aws:lambda:us-east-1:123456789012:function:HelloFunction
  6. 将以下 Lambda 函数代码复制到 HelloFunction 页面的代码源部分中:

    export const handler = async(event, context, callback) => { callback(null, "Hello from " + event.who + "!"); };

    此代码将使用输入数据的 who 字段组装问候语,该输入数据是由传送到您的函数的 event 对象提供的。以后当您启动新的执行时,您将为此函数添加输入数据。callback 方法将从您的函数返回组装的问候语。

  7. 选择部署

第 2 步:测试 Lambda 函数

测试您的 Lambda 函数以查看其运行情况。

  1. 选择测试

  2. 对于事件名称,输入 HelloEvent

  3. 使用以下内容替换时间 JSON

    { "who": "Amazon Step Functions" }

    "who" 条目对应于您的 Lambda 函数中的 event.who 字段,用于编写问候语。运行状态机时,您将输入相同的输入数据。

  4. 选择保存,然后选择测试

  5. 执行结果下,展开详细信息以查看测试结果。

第 3 步:创建状态机

使用 Step Functions 控制台创建状态机,用于调用您在第 1 步中创建的 Lambda 函数。

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

    重要

    确保您的状态机与您之前创建的 Lambda 函数位于相同的 Amazon 账户和区域下。

  2. 选择模板对话框中,选择空白

  3. 选择选择,以便在设计模式下打开工作流程工作室。

  4. 在左侧的状态浏览器中,确保已选择操作选项卡。然后,将 Amazon Lambda 调用 API 拖放到标有将第一个状态拖至此处的空白状态处。

  5. 在右侧的 Inspector 面板中,配置 Lambda 函数:

    1. API 参数部分,在函数名称下拉列表中选择您之前创建的 Lambda 函数

    2. 保留有效负载下拉列表中的默认选择。

  6. (可选)选择定义查看状态机 Amazon States Language (ASL) 的定义,该定义是根据您在操作选项卡和 Inspector 面板中的选择自动生成的。

  7. 为状态机指定一个名称。要执行此操作,请选择默认状态机名称 MyStateMachine 旁边的编辑图标。然后,找到状态机配置,在状态机名称框中指定一个名称。

    例如,输入名称 LambdaStateMachine

    注意

    状态机、执行和活动任务的名称长度不得超过 80 个字符。对于您的账户和 Amazon 区域,这些名称必须是唯一的,并且不得包含以下任何内容:

    • 空格

    • 通配符 (? *)

    • 方括号字符 (< > { } [ ])

    • 特殊字符 (" # % \ ^ | ~ ` $ & , ; : /)

    • 控制字符(\\u0000 - \\u001f\\u007f - \\u009f

    Step Functions 对于状态机、执行、活动和标签接受包含非 ASCII 字符的名称。由于此类字符不适用于 Amazon CloudWatch,因此我们建议您仅使用 ASCII 字符,这样您就可以在 CloudWatch 中跟踪指标。

  8. (可选)在状态机配置中,指定其他工作流设置,例如状态机类型及其执行角色。

    在本教程中,请保留状态机设置中的所有默认选项。

  9. 选择创建

  10. 确认角色创建对话框中,选择确认继续。

    您也可以选择查看角色设置,返回至状态机配置

    注意

    如果您删除了 Step Functions 创建的 IAM 角色,Step Functions 在以后无法重新创建该角色。同样,如果您修改了该角色(例如,通过在 IAM 策略中从主体中删除 Step Functions),Step Functions 在以后也无法还原其原始设置。

第 4 步:运行状态机

在创建状态机后,便可以运行它。

  1. 状态机页面上,选择 LambdaStateMachine

  2. 选择启动执行

    随即显示启动执行对话框。

  3. (可选)输入自定义执行名称,以便覆盖生成的默认执行名称。

    非 ASCII 名称和日志记录

    Step Functions 对于状态机、执行、活动和标签接受包含非 ASCII 字符的名称。由于此类字符不适用于 Amazon CloudWatch,因此我们建议您仅使用 ASCII 字符,这样您就可以在 CloudWatch 中跟踪指标。

  4. 输入区域中,将示例数据替换为以下内容。

    { "who" : "Amazon Step Functions" }

    "who" 是键名称,您的 Lambda 函数将使用它来获取所问候人员的姓名。

  5. 选择启动执行

    状态机的执行将启动,并显示一个说明正在运行的执行的新页面。

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

    要查看执行结果,请在图表视图上选择各个状态,然后在步骤详细信息窗格中选择各个选项卡,分别查看每个状态的详细信息,包括输入、输出和定义。有关可在执行详细信息页面上查看的执行信息的详细信息,请参阅执行详细信息概览

注意

您还可以在从状态机调用 Lambda 时传递有效负载。有关通过在 Parameters 字段中传递有效负载来调用 Lambda 的更多信息和示例,请参阅使用 Step F Amazon Lambda unctions 调用函数