

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

# 示例 2：使用以下命令创建 Amazon S3 管道 AWS CloudFormation
<a name="tutorials-cloudformation-s3"></a>

本演练向您展示如何使用 AWS CloudFormation 控制台创建基础设施，其中包括连接到 Amazon S3 源存储桶的管道。在本教程中，您将使用提供的示例模板文件创建资源堆栈，其中包括您的源存储桶、项目存储、管道和更改检测资源，例如您的 Amazon Ev CloudWatch ents 规则和 CloudTrail跟踪。在中创建资源堆栈后 AWS CloudFormation，您可以在 AWS CodePipeline 控制台中查看您的管道。该管道是一个分为两个阶段的管道，包括一个 Amazon S3 源阶段和一个 CodeDeploy部署阶段。

**先决条件：**

您必须拥有以下资源才能与 AWS CloudFormation 示例模板一起使用：
+ 您必须已创建 Amazon EC2 实例，并在实例上安装了 CodeDeploy 代理。您必须已创建 CodeDeploy 应用程序和部署组。使用您在中创建的 Amazon EC2 和 CodeDeploy 资源[教程：创建简单的管道（CodeCommit 存储库）](tutorials-simple-codecommit.md)。
+ 选择以下链接下载用于使用 Amazon S3 源创建管道的示例 AWS CloudFormation 模板文件：
  + 为您的管道下载示例模板：[YAML](samples/codepipeline-s3-events-yaml.zip) \$1 [JSON](samples/codepipeline-s3-events-json.zip)
  + [下载 CloudTrail 存储桶和跟踪的示例模板：[YAML](samples/codepipeline-s3-cloudtrail-yaml.zip) \$1 JSON](samples/codepipeline-s3-cloudtrail-json.zip)
  + 解压缩文件并将其放在您的本地计算机上。
+ 从 [SampleApp\$1Linux.zip](samples/SampleApp_Linux.zip) 下载示例应用程序。

  将 .zip 文件保存在本地计算机上。创建堆栈后，您将上传 .zip 文件。

**在中创建您的管道 AWS CloudFormation**

1. 打开 AWS CloudFormation 控制台，然后选择 “**创建堆栈**”。选择**使用新资源（标准）**。

1. 在**选择一个模板**中，选择**上传模板**。选中**选择文件**，然后从您的本地计算机选择模板文件。选择**下一步**。

1. 在**堆栈名称**中，输入管道的名称。将显示由示例模板指定的参数。输入以下参数：

   1. 在中 **ApplicationName**，输入您的 CodeDeploy 应用程序的名称。您可以替换 `DemoApplication` 默认名称。

   1. 在中 **BetaFleet**，输入您的 CodeDeploy 部署组的名称。您可以替换 `DemoFleet` 默认名称。

   1. 在 **SourceObjectKey** 中输入 `SampleApp_Linux.zip`。在模板创建存储桶和管道后，将此文件上传到存储桶。

1. 选择**下一步**。在接下来的页面上接受默认值，然后选择**下一步**。

1. 在 “**能力**” 中，选择 “**我确认 AWS CloudFormation 可能会创建 IAM 资源**”，然后选择 “**创建堆栈**”。

1. 在堆栈创建完成后，查看事件列表以检查是否存在任何错误。

   **故障排查**

   在中创建管道的 IAM 用户 AWS CloudFormation 可能需要额外的权限才能为管道创建资源。策略中需要以下权限 AWS CloudFormation 才能允许为 Amazon S3 管道创建所需的 Amazon Ev CloudWatch ents 资源：

   ```
   {
        "Effect": "Allow",
        "Action": [
           "events:PutRule",
           "events:PutEvents",
           "events:PutTargets",
           "events:DeleteRule",
           "events:RemoveTargets",
           "events:DescribeRule"
        ],
        "Resource": "resource_ARN"
   }
   ```

1. 在 CloudFormation堆栈的 “**资源**” 选项卡中，查看为您的堆栈创建的资源。
**注意**  
要查看已创建的管道，请在 CloudFormation中找到堆栈的**资源**选项卡下的**逻辑 ID** 列。记下管道的**物理 ID** 列中的名称。在中 CodePipeline，您可以在创建堆栈的区域中查看具有相同物理 ID（管道名称）的管道。

   选择名称中包含 `sourcebucket` 标签的 S3 存储桶，例如 `s3-cfn-codepipeline-sourcebucket-y04EXAMPLE.`。不要选择管道构件存储桶。

   源存储桶为空，因为资源是由 CloudFormation新创建的。打开 Amazon S3 控制台，并找到您的 `sourcebucket` 桶。选择 **Upload (上传)**，然后按照说明上传 `SampleApp_Linux.zip` .zip 文件。
**注意**  
当 Amazon S3 是管道的源提供程序时，您必须将所有源文件打包为单个 .zip 文件上传到桶。否则，源操作将失败。

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

   在**管道**下，选择您的管道，然后选择**查看**。该图显示了您的管道源和部署阶段。

1. 完成以下过程中的步骤来创建您的 AWS CloudTrail 资源。

**在中创建您的 AWS CloudTrail 资源 AWS CloudFormation**

1. 打开 AWS CloudFormation 控制台，然后选择 “**创建堆栈**”。

1. 在**选择一个模板**中，选择**将模板上传到 Amazon S3**。选择 “**浏览**”，然后从本地计算机上为 AWS CloudTrail 资源选择模板文件。选择**下一步**。

1. 在**堆栈名称**中，输入资源堆栈的名称。将显示由示例模板指定的参数。输入以下参数：

   1. 在中 **SourceObjectKey**，接受示例应用程序的 zip 文件的默认值。

1. 选择**下一步**。在接下来的页面上接受默认值，然后选择**下一步**。

1. 在 “**能力**” 中，选择 “**我确认 AWS CloudFormation 可能会创建 IAM 资源**”，然后选择 “**创建**”。

1. 在堆栈创建完成后，查看事件列表以检查是否存在任何错误。

   策略中需要以下权限 AWS CloudFormation 才能创建 Amazon S3 管道所需的 CloudTrail 资源：

   ```
   {
        "Effect": "Allow",
        "Action": [
           "cloudtrail:CreateTrail",
           "cloudtrail:DeleteTrail",
           "cloudtrail:StartLogging",
           "cloudtrail:StopLogging",
           "cloudtrail:PutEventSelectors"
        ],
        "Resource": "resource_ARN"
   }
   ```

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

   在**管道**下，选择您的管道，然后选择**查看**。该图显示了您的管道源和部署阶段。

1. 在您的源存储桶中，提交并推送更改。您的更改检测资源会拾取更改，并且您的管道启动。