

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

# 创建使用 Lambda 的 Step Functions 状态机
<a name="tutorial-creating-lambda-state-machine"></a>

在本教程中，您将创建一个用于调用 AWS Lambda 函数的单步工作流程。 AWS Step Functions 

**注意**  
Step Functions 基于*状态机* 和*任务*。在 Step Functions 中，状态机称为*工作流程*，是一系列由事件驱动的步骤。工作流程中的每个步骤都称为*状态*。例如，[任务状态](state-task.md)表示另一个 AWS 服务执行的工作单元，例如调用另一个服务 AWS 服务 或 API。在 Step Functions 中，运行用于执行任务的工作流程的实例称为*执行*。  
有关更多信息，请参阅:  
[什么是 Step Functions？](welcome.md)
[将服务与 Step Functions 集成](integrate-services.md)

Lambda 非常适合于 `Task` 状态，因为 Lambda 函数*无服务器* 且易于编写。你可以在 AWS 管理控制台 或你最喜欢的编辑器中编写代码。 AWS 处理为你的函数提供计算环境并运行它的细节。

## 第 1 步：创建 Lambda 函数
<a name="create-lambda-function"></a>

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

**重要**  
确保您的 Lambda 函数与 AWS 区域 状态机位于同一个 AWS 账户下。

1. 打开 [Lambda 控制台](https://console.aws.amazon.com/lambda/home)，然后选择**创建函数**。

1. 在**创建函数**页面上，选择**从头开始创作**。

1. 对于**函数名称**，请输入 `HelloFunction`。

1. 保留所有其他选项的默认选择，然后选择**创建函数**。

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

   ```
   arn:aws:lambda:region:123456789012:function:HelloFunction
   ```

1. 将以下 Lambda 函数的代码复制到**页面的***HelloFunction***代码源**部分。

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

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

1. 选择**部署**。

## 第 2 步：测试 Lambda 函数
<a name="test-lambda-function"></a>

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

1. 选择**测试**。

1. 对于**事件名称**，输入 `HelloEvent`。

1. 使用以下内容替换**时间 JSON**。

   ```
   {
       "who": "AWS Step Functions"
   }
   ```

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

1. 选择**保存**，然后选择**测试**。

1. 在**执行结果**下，展开**详细信息**以查看测试结果。

## 第 3 步：创建状态机
<a name="create-state-machine-step"></a>

使用 Step Functions 控制台创建状态机，用于调用您在[第 1 步](#create-lambda-function)中创建的 Lambda 函数。

1. 打开 [Step Functions 控制台](https://console.aws.amazon.com/states/home)，从菜单中选择**状态机**，然后选择**创建状态机**。
**重要**  
确保您的状态机与您之前创建的 Lambda 函数位于相同的 AWS 账户和区域下。

1. 选择**从空白创建**。

1. 为状态机命名，然后选择**继续**，在 Workflow Studio 中编辑状态机。

1. 在左侧的[状态浏览器](workflow-studio.md#workflow-studio-components-states)中，确保已选择**操作**选项卡。然后，将 **AWS Lambda 调用** API 拖放到标有**将第一个状态拖至此处**的空白状态处。

1. 在右侧的 [Inspector](workflow-studio.md#workflow-studio-components-formdefinition) 面板中，配置 Lambda 函数：

   1. 在 **API 参数**部分，在**函数名称**下拉列表中选择[您之前创建的 Lambda 函数](#create-lambda-function)。

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

1. （可选）选择**定义**查看状态机 [Amazon States Language](concepts-amazon-states-language.md)（ASL）的定义，该定义是根据您在**操作**选项卡和**检查器**面板中的选择自动生成的。

1. 为状态机指定一个名称。为此，请选择默认状态机名称旁边的编辑图标**MyStateMachine**。然后，找到**状态机配置**，在**状态机名称**框中指定一个名称。

   例如，输入名称 **LambdaStateMachine**。
**注意**  
状态机、执行和活动任务的名称长度不得超过 80 个字符。对于您的账户和 AWS 地区，这些名称必须是唯一的，并且不得包含以下任何内容：  
空格
通配符 (`? *`)
方括号字符 (`< > { } [ ]`)
特殊字符 (`" # % \ ^ | ~ ` $ & , ; : /`)
控制字符（`\\u0000` - `\\u001f` 或 `\\u007f` - `\\u009f`）
Step Functions 对于状态机、执行、活动和标签接受包含非 ASCII 字符的名称。由于此类字符会 CloudWatch 阻止亚马逊记录数据，因此我们建议您仅使用 ASCII 字符，这样您就可以跟踪 Step Functions 的指标。

1. （可选）在**状态机配置**中，指定其他工作流设置，例如状态机类型及其执行角色。

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

1. 选择**创建**。

1. 在**确认角色创建**对话框中，选择**确认**继续。

   您也可以选择**查看角色设置**，返回至**状态机配置**。
**注意**  
如果您删除了 Step Functions 创建的 IAM 角色，Step Functions 在以后无法重新创建该角色。同样，如果您修改了该角色（例如，通过在 IAM 策略中从主体中删除 Step Functions），Step Functions 在以后也无法还原其原始设置。

## 第 4 步：运行状态机
<a name="start-lambda-function"></a>

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

1. 在**状态机**页面上，选择**LambdaStateMachine**。

1. 选择**启动执行**。

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

1. （可选）输入自定义执行名称，以便覆盖生成的默认执行名称。
**非 ASCII 名称和日志记录**  
Step Functions 对于状态机、执行、活动和标签接受包含非 ASCII 字符的名称。由于此类字符会 CloudWatch 阻止亚马逊记录数据，因此我们建议您仅使用 ASCII 字符，这样您就可以跟踪 Step Functions 的指标。

1. 在**输入**区域中，将示例数据替换为以下内容。

   ```
   {
       "who" : "AWS Step Functions"
   }
   ```

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

1. 选择**开始执行**。

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

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

   要查看执行结果，请在**图表视图**上选择各个状态，然后在[步骤详细信息](concepts-view-execution-details.md#exec-details-intf-step-details)窗格中选择各个选项卡，分别查看每个状态的详细信息，包括输入、输出和定义。有关可在*执行详细信息*页面上查看的执行信息的详细信息，请参阅[执行详细信息概览](concepts-view-execution-details.md#exec-details-interface-overview)。

**注意**  
您还可以在从状态机调用 Lambda 时传递有效负载。有关通过在 `Parameters` 字段中传递有效负载来调用 Lambda 的更多信息和示例，请参阅[使用 Step F AWS Lambda unctions 调用函数](connect-lambda.md)。