

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

# 第 4 步：创建管道
<a name="step4"></a>

![创建管道。](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/ml-production-ready-pipelines/images/step4.png)


 在逻辑上定义管道之后，就可以创建支持管道的基础设施了。该步骤至少需要以下功能：
+ 存储，用于托管和管理管道输入和输出，包括代码、模型构件以及训练和推理运行中使用的数据。
+ 计算（GPU 或 CPU），用于建模和推理以及数据预处理和后处理。
+ 编排，用于管理正在使用的资源并安排任何定期运行。例如，当有新数据可用时，可能会定期对模型进行重新训练。
+ 记录和警报，用于监控管道模型的准确性、资源利用率和故障排除。

## 用 AWS CloudFormation 实施‬
<a name="cfn"></a>

我们使用 AWS CloudFormation 创建管道，这是一项用于部署和管理基础设施即代码的 AWS 服务。这些 AWS CloudFormation 模板包含在上一步中使用 Step Functions SDK 创建的 Step Functions 定义。该步骤包括创建 AWS 管理的 Step Functions 实例，该实例被称为 *Step Functions 状态机*。现阶段不会创建用于训练和推理的资源，因为训练和推理作业仅在需要时才按需运行，如同 SageMaker AI 作业。该步骤还包括创建 AWS Identity and Access Management（IAM）角色来运行 Step Functions、运行 SageMaker AI，以及从 Amazon S3 读取和写入。

## 修改 Step Functions SDK 的输出
<a name="modify-output"></a>

我们必须对上一节的 CloudFormation 输出进行一些细微的修改。我们使用简单的 Python 字符串匹配来完成以下操作：
+ 我们添加了创建 CloudFormation 模板 `Parameters` 部分的逻辑。这是因为我们要创建两个角色，并将管道名称与部署环境一起定义为参数。该步骤还涵盖了您可能要创建的任何其他资源和角色，如第 6 步所述。
+ 我们重新格式化了三个字段，使其具有所需的 `!Sub` 前缀和引号，以便它们在部署过程中可以动态更新：
  + 该 `StateMachineName` 属性用于命名状态机。
  + 该 `DefinitionString` 属性用于定义状态机。
  + 该 `RoleArn` 属性，由状态机返回。