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

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

创建 Step Functions 状态Machine使用 Lambda

在本教程中,您将创建一个使用 Amazon Lambda 函数实现 Task 状态的 Amazon Step Functions 状态机。一个 Task 状态执行的一个工作单元。

Lambda 非常适合实现Task状态,因为 Lambda 函数是无状态(它们具有可预知的输入/输出关系),可轻松编写,并且不需要将代码部署到服务器实例。您可以在Amazon Web Services Management Console或您最喜爱的编辑器。Amazon处理为您的函数提供计算环境并运行函数这些细节。

第 1 步:为 Lambda 创建 IAM 角色

Amazon Lambda 和 Amazon Step Functions 均可执行代码和访问 Amazon 资源 (例如,存储在 Amazon S3 存储桶中的数据)。为了保持安全性,您必须授予 Lambda 和 Step Functions 对这些资源的访问权。

Lambda 要求您将Amazon Identity and Access Management(IAM) 角色,其方式与您创建状态机时 Step Lambda unctions 要求您指定 IAM 角色相同。

您可使用 IAM 控制台创建服务相关角色。

创建角色(控制台)

  1. 登录 Amazon Web Services Management Console,单击 https://console.aws.amazon.com/iam/ 打开 IAM 控制台。

  2. 在 IAM 控制台的导航窗格中,选择角色。然后选择 Create role (创建角色)

  3. 选择Amazon服务角色类型,然后选择Lambda

  4. 选择Lambda使用案例。使用案例由服务定义以包含服务所需的信任策略。接下来,选择 Next (下一步):Permissions (下一步:权限)

  5. 选择一个或多个要附加到角色的权限策略(例如AWSLambdaBasicExecutionRole)。请参阅 Amazon Lambda 权限模型

    选中用于分配您希望角色拥有的权限的策略旁的框,然后选择后续:审核

  6. 输入 Role name

  7. (可选) 对于 Role description,编辑新服务相关角色的描述。

  8. 检查该角色,然后选择创建角色

第 2 步:创建 Lambda 函数

Lambda 函数接收输入(一个名称)并返回包含输入值的问候语。

重要

确保您的 Lambda 函数位于相同的Amazon账户和Amazon区域作为状态机。

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

  2. 创建函数部分中,选择从头开始创作

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

    1. 函数名称中,输入 HelloFunction

    2. 适用于运行时中,选择Node.js 12.x

    3. 对于 Role (角色),选择 Choose an existing role (选择现有角色)

    4. 适用于现有角色中,选择您之前创建的 Lambda 角色

      注意

      如果您创建的 IAM 角色未显示在列表中,该角色可能仍需要几分钟才能传播到 Lambda。

    5. 选择创建函数

      创建 Lambda 函数后,记下函数位于页面右上角的 Amazon 资源名称 (ARN),如示例所示。

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

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

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

  5. 选择 Save

第 3 步:测试 Lambda 函数

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

  1. 适用于选择测试事件中,选择配置测试事件。对于事件名称,输入 HelloFunction

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

    { "who": "Amazon Step Functions" }

    这些区域有:"who"条目对应于event.who字段,用于编写问候语。在作为 Step Functions 任务运行该函数时,您将使用同一输入数据。

  3. 选择 Create (创建)

  4. 在存储库的HelloFunction页,测试使用新数据。

    测试结果将显示在页面顶部。展开 Details (详细信息) 以查看输出。

第 4 步:创建状态机

使用Step Functions 控制台创建状态机Task状态。将引用添加到您的 Lambda 函数Task状态。当状态机的执行达到Task状态。

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

  2. Define state machine (定义状态机) 页面上,选择 Author with code snippets (使用代码段创作)。适用于类型中,选择标准。为状态机输入一个 Name (名称),例如 LambdaStateMachine

    注意

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

    • 空格

    • 通配符 (? *

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

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

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

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

  3. 状态机定义窗格中,ARN 用您之前创建的 Lambda 函数,如以下示例所示。

    { "Comment": "A Hello World example of the Amazon States Language using an Amazon Lambda function", "StartAt": "HelloWorld", "States": { "HelloWorld": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:HelloFunction", "End": true } } }

    这是使用亚马逊状态机语言的说明。它定义了名为 HelloWorld 的单个 Task 状态。有关更多信息,请参阅状态机结构

    注意

    您也可以为您设置Retry对于 来说为Task状态。作为最佳实践,确保生产代码可以处理 Lambda 服务异常(Lambda.ServiceExceptionLambda.SdkClientException)。有关更多信息,请参阅下列内容:

    选择 Next

  4. 创建或输入 IAM 角色:

    • 要为 Step Functions 创建 IAM 角色,请选择为我创建 IAM 角色,然后输入名称为您的角色。

    • 如果您有之前创建了 IAM 角色使用您的状态机的正确权限,请选择选择现有 IAM 角色。从列表中选择角色,或为该角色提供 ARN。

    注意

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

  5. 选择 Next

第 5 步:启动新的执行

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

  1. LambdaStateMachine 页面上,选择 Start execution (开始执行)

    此时将显示 New execution 页面。

  2. (可选)为了帮助识别您的执行,您可以在输入执行名称。如果未输入 ID,Step Functions 将自动生成一个唯一 ID。

    注意

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

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

    { "who" : "Amazon Step Functions" }

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

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

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

  5. 要查看执行结果,请展开 Output (输出) 部分的 Execution details (执行详细信息)