

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

# 教程：在管道中使用 AWS Step Functions 调用操作
<a name="tutorials-step-functions"></a>

您可以使用创建 AWS Step Functions 和配置状态机。本教程介绍如何将调用操作添加到管道以便从管道激活状态机执行。

**重要**  
作为创建管道的一部分，客户提供的 S3 工件存储桶将 CodePipeline 用于项目。（这与用于 S3 源操作的存储桶不同。） 如果 S3 工件存储桶与您的管道账户位于不同的账户中，请确保 S3 工件存储桶归其所有 AWS 账户 ，该存储桶是安全且可靠的。

在本教程中，您将执行以下任务：
+ 在中创建标准状态机 AWS Step Functions。
+ 直接输入状态机输入 JSON。还可以将状态机输入文件上传到 Amazon Simple Storage Service (Amazon S3) 桶。
+ 通过添加状态机操作来更新管道。

**Topics**
+ [先决条件：创建或选择简单管道](#tutorials-step-functions-prereq)
+ [步骤 1：创建示例状态机](#tutorials-step-functions-sample)
+ [步骤 2：将 Step Functions 调用操作添加到管道](#tutorials-step-functions-pipeline)

## 先决条件：创建或选择简单管道
<a name="tutorials-step-functions-prereq"></a>

在本教程中，您将向现有管道添加调用操作。您可以使用在[教程：创建一个简单的管道（S3 存储桶）](tutorials-simple-s3.md)或[教程：创建简单的管道（CodeCommit 存储库）](tutorials-simple-codecommit.md)中创建的管道。

您可以将现有管道与一个源操作和至少一个两阶段结构结合使用，但在此示例中不使用源构件。

**注意**  
您可能需要通过添加运行此操作所需的其他权限来更新管道所使用的服务角色。为此，请打开 AWS Identity and Access Management (IAM) 控制台，找到该角色，然后将权限添加到该角色的策略中。有关更多信息，请参阅 [为 CodePipeline 服务角色添加权限](how-to-custom-role.md#how-to-update-role-new-services)。

## 步骤 1：创建示例状态机
<a name="tutorials-step-functions-sample"></a>

在 Step Functions 控制台中，使用 `HelloWorld` 示例模板创建状态机。有关说明，请参阅 *AWS Step Functions 开发者指南* 中的[创建状态机](https://docs.aws.amazon.com/step-functions/latest/dg/getting-started.html#create-state-machine)。

## 步骤 2：将 Step Functions 调用操作添加到管道
<a name="tutorials-step-functions-pipeline"></a>

将 Step Functions 调用操作添加到管道，如下所示：

1. 登录 AWS 管理控制台 并打开 CodePipeline 控制台，[网址为 http://console.aws.amazon。 com/codesuite/codepipeline/home](https://console.aws.amazon.com/codesuite/codepipeline/home)。

   将显示与您的 AWS 账户关联的所有管道的名称。

1. 在 **Name** 中，选择您要编辑的管道的名称。这将打开管道的详细视图，包括管道每个阶段中每个操作的状态。

1. 在管道详细信息页中，选择**编辑**。

1. 在简单管道的第二个阶段，选择 **Edit stage (编辑阶段)**。选择**删除**。这将立即删除您不再需要的第二个阶段。

1. 在示意图底部，选择 **\$1 添加阶段**。

1. 在 **Stage name (阶段名称)** 中，输入阶段的名称，例如 **Invoke**，然后选择 **Add stage(添加阶段)**。

1. 选择 **\$1 添加操作组**。

1. 在 **Action name (操作名称)** 中，输入名称，例如 **Invoke**。

1. 在**操作提供程序**中，选择 **AWS Step Functions**。允许**区域**默认为管道区域。

1. 在 **Input artifacts (输入构件)** 中，选择 `SourceArtifact`。

1. 在 **State machine ARN (状态机 ARN)** 中，选择之前创建的状态机的 Amazon 资源名称 (ARN)。

1. （可选）在 **Execution name prefix (执行名称前缀)** 中，输入要添加到状态机执行 ID 的前缀。

1. 在 **Input type (输入类型)** 中，选择 **Literal (文本)**。

1. 在 **Input (输入)** 中，输入 `HelloWorld` 示例状态机所需的输入 JSON。
**注意**  
状态机执行的输入与中 CodePipeline 用来描述操作输入工件的术语不同。

   在此示例中，输入以下 JSON：

   ```
   {"IsHelloWorldExample": true}
   ```

1. 选择**完成**。

1. 在所编辑的阶段上，选择 **Done (完成)**。在 AWS CodePipeline 窗格中，选择**保存**，然后选择警告消息上的**保存**。

1. 要提交所做的更改并开始管道执行，请选择**发布更改**，然后选择**发布**。

1. 在已完成的管道上，选择调用操作中的 **AWS Step Functions**。在 AWS Step Functions 控制台中，查看您的状态机执行 ID。ID 显示您的状态机名称 `HelloWorld` 和带有前缀 `my-prefix` 的状态机执行 ID。

   ```
   arn:aws:states:us-west-2:account-ID:execution:HelloWorld:my-prefix-0d9a0900-3609-4ebc-925e-83d9618fcca1
   ```