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

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

创建使用 Lambda 的 Step Functions 状态机

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

注意

在 Step Functions 中,工作流被称为状态机,它是一系列事件驱动的步骤。工作流中的每个步骤都称为状态Task状态代表其他Amazon服务(例如Amazon Lambda)执行的工作单位。一个Task州可以调用任何Amazon服务或 API。有关更多信息,请参阅:

Lambda 非常适合Task各州,因为 Lambda 函数是无服务器的且易于编写。你可以在Amazon Web Services Management Console或你最喜欢的编辑器中编写代码。 Amazon处理为您的函数提供计算环境并运行它的细节。

步骤 1:创建 Lambda 函数

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

重要

确保您的 Lambda 函数与状态机位于同一个Amazon账户和Amazon区域。

  1. 打开 Lambda 控制台并选择创建函数

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

  3. 基本信息部分中,配置您的 Lambda 函数:

    1. 对于 Function name(函数名称),请输入 HelloFunction

    2. 对于 “运行时”,选择 Node.js 14.x

    3. 在 R ambda permisions (更改默认执行角色) 中,选择 Create a new role n ew

    4. 选择 Create function(创建函数)。

    5. 创建 Lambda 函数后,复制页面右上角显示的函数的亚马逊资源名称 (ARN)。要复制 ARN,请单击 
                                        copy Amazon Resource Name
                                    。以下是 ARN 示例:

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

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

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

  5. 选择 Deploy(部署)。

步骤 2:测试 Lambda 函数

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

  1. 选择 Test(测试)。

  2. 在 “配置测试事件” 对话框中,HelloEvent在 “事件名称” 框中输入。

  3. 使用以下内容替换示例数据。

    { "who": "Amazon Step Functions" }

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

  4. 选择 Create(创建)

  5. HelloFunction页面上,选择 “测试”,使用新数据测试您的 Lambda 函数。

    测试结果显示在 “执行结果” 选项卡中。

  6. 选择 “执行结果” 选项卡查看输出。

步骤 3:创建状态机

使用 Step Functions 控制台创建状态机,该状态机可以调用您之前在步骤 1 中创建的 Lambda 函数

  1. 打开 Ste p Functions 控制台并选择 “创建状态机”。

    重要

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

  2. “选择创作方法” 页面上,选择 “直观地设计工作流程”。

  3. 对于 “类型”,保留默认选择,即 “标准”。

  4. 选择 Next(下一步)。这将打开工作流工作室。

  5. 从左侧的 “状态” 浏览器中,选择 “动作” 面板。

    1. 将 Invoke AP Amazon LambdaI 拖放到标有 “将第一个状态拖到此处” 的空白状态

      
                                    状态浏览器
  6. 在右侧的 Inspector 面板中,配置 Lambda 函数及其名称:

    1. 选择 “配置”,然后根据需要编辑州名

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

    3. 保留 P aylo ad 下拉列表中的默认选项。

  7. 选择 Next(下一步)

  8. 查看生成的代码页上,查看状态机的 Amazon States Language (ASL) 定义,该定义是根据您在操作Inspector 面板中的选择自动生成的。

  9. 选择 Next(下一步)

  10. 为状态机输入一个 Name (名称),例如 LambdaStateMachine

    注意

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

    • 空格

    • 通配符 (? *)

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

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

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

    如果您的状态机是 Express 类型,则可以为状态机的多次执行提供相同的名称。Step Functions 会为每次 Express 状态机执行生成唯一的执行 ARN,即使多个执行具有相同的名称。

    Step Functions 允许您创建包含非 ASCII 字符的状态机、执行和活动名称。这些非 ASCII 名称不适用于亚马逊 CloudWatch。为确保您可以跟踪 CloudWatch 指标,请选择仅使用 ASCII 字符的名称。

  11. 在 “执行角色” 的 “权限” 部分下,选择 “创建新角色”。

  12. 选择 Create state machine (创建状态机)

步骤 4:启动新的执行

在创建您的 状态机后,可以开始执行。

  1. LambdaStateMachine页面上,选择 “开始执行”。

    S art Execution (开始执行) 对话框出现。

  2. (可选)要识别您的执行,可以在 “名称” 框中为其指定名称。默认情况下,Step Functions 会自动生成一个唯一的执行名称。

    注意

    Step Functions 允许您创建包含非 ASCII 字符的状态机、执行和活动名称。这些非 ASCII 名称不适用于亚马逊 CloudWatch。为确保您可以跟踪 CloudWatch 指标,请选择仅使用 ASCII 字符的名称。

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

    { "who" : "Amazon Step Functions" }

    "who"是您的 Lambda 函数用来获取要问候的人的名字的密钥名称。

  4. 选择 Start Execution (开始执行)

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

  5. 要查看执行结果,请选择 “执行输出” 选项卡。

注意

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