

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

# 教程：使用以下命令部署到 Amazon EC2 实例 CodePipeline
<a name="tutorials-ec2-deploy"></a>

本教程可帮助您创建部署操作 CodePipeline ，将您的代码部署到您在 Amazon EC2 中配置的实例。

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

**注意**  
`EC2` 部署操作仅适用于 V2 类型管道。

## 先决条件
<a name="tutorials-ec2-deploy-prereqs"></a>

您必须先部署一些资源，然后才能使用本教程创建您的 CD 管道。以下是您在开始操作之前需要的资源：

**注意**  
所有这些资源都应在同一个 AWS 区域内创建。
+ 源代码控制存储库（本教程使用 GitHub），您将在其中添加示例`script.sh`文件。
+ 您必须使用已更新为具有此操作权限的现有 CodePipeline 服务角色。要更新您的服务角色，请参阅[EC2 部署操作的服务角色策略权限](action-reference-EC2Deploy.md#action-reference-EC2Deploy-permissions-action)。

在满足这些先决条件后，您可以继续完成本教程并创建您的 CD 管道。

## 步骤 1：创建 Amazon EC2 Linux 实例
<a name="tutorials-ec2-deploy-instances"></a>

在此步骤中，您将创建要在其中部署示例应用程序的 Amazon EC2 实例。作为此过程的一部分，如果您尚未在要创建资源的区域中创建实例角色，请在 IAM 中创建一个。

**创建实例角色**

1. 打开 IAM 控制台，网址为 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/))。

1. 在控制台控制面板中，选择**角色**。

1. 选择**创建角色**。

1. 在**选择受信任实体的类型**下，选择 **AWS 服务**。在**选择使用案例**下，选择 **EC2**。在**选择您的使用案例**下，选择 **EC2**。选择**下一步**。

1. 搜索名为 **`AmazonSSMManagedEC2InstanceDefaultPolicy`** 的策略并将其选中。

1. 搜索名为 **`AmazonSSMManagedInstanceCore`** 的策略并将其选中。选择**下一步：标签**。

1. 选择**下一步：审核**。输入角色的名称（例如 **EC2InstanceRole**）。
**注意**  
记下您的角色名称以便在下一步中使用。在创建实例时选择此角色。
**注意**  
您将向该角色添加权限，以便在创建管道后允许其访问管道的 S3 构件存储桶。

   选择**创建角色**。

**启动实例**

1. 打开位于 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 的 Amazon EC2 控制台。

1. 在侧面导航栏中，选择**实例**，然后从页面顶部选择**启动实例**。

1. 在**名称**中，输入 **MyInstances**。这会为实例分配标签**键** **Name** 和标签值 ****MyInstances****。

1. 在 “**应用程序和操作系统映像（亚马逊系统映像）**” 下，找到带有 AWS 徽标的 **Amazon Linux** AMI 选项，并确保将其选中。（此 AMI 称为 Amazon Linux 2 AMI (HVM)，并标记为“符合免费套餐条件”。）

1. 在**实例类型**下，选择符合免费套餐条件的 `t2.micro` 类型作为实例的硬件配置。

1. 在**密钥对(登录)** 下，选择或创建密钥对。

1. 在**网络设置**下，确保状态为**启用**。

1. 展开**高级详细信息**。在 **IAM 实例配置文件**中，选择您在上一过程中创建的 IAM 角色（例如 **EC2InstanceRole**）。
**注意**  
不要将实例角色留空，因为这会导致系统创建默认角色并且不会选择您创建的角色。

1. 在**摘要**下的**实例数**下，输入 `2`。

1. 选择**启动实例**。

1. 您可以在**实例**页面上查看启动的状态。启动实例时，其初始状态为 `pending`。实例启动后，其状态变为 `running`，并且会收到一个公有 DNS 名称。（如果**公有 DNS** 列不显示，请选择**显示/隐藏**图标，然后选择**公有 DNS**。）

## 步骤 2：向 EC2 实例角色添加构件存储桶权限
<a name="tutorials-ec2-deploy-role-s3"></a>

您必须更新为实例创建的 EC2 实例角色，允许其访问管道的构件存储桶。

**注意**  
创建实例时，会创建角色或使用现有的 EC2 实例角色。为避免`Access Denied`错误，您必须向实例角色添加 S3 存储桶权限，以授予实例对 CodePipeline 项目存储桶的权限。创建默认角色或更新现有角色，将 `s3:GetObject` 权限范围缩小到管道所在区域的构件存储桶。

1. 在 CodePipeline 控制台中导航到您的管道。选择**设置**。查看现有管道的构件存储的名称和位置。记下构件存储桶 Amazon 资源名称（ARN）并复制。

1. 导航到 IAM 控制台，然后选择 **Roles (角色)**。选择您在本教程步骤 1 中创建的实例角色。

1. 在**权限**选项卡上，选择**添加内联策略**。

1. 将以下 JSON 添加到策略文档中，将 `Resource` 字段中的值替换为存储桶 ARN。

   ```
   {
       "Effect": "Allow",
       "Principal": "*",
       "Action": "s3:GetObject",
       "Resource": "arn:aws:s3:::BucketName"
   }
   ```

1. 选择**更新**。

## 步骤 3：向您的存储库添加脚本文件
<a name="tutorials-ec2-deploy-file"></a>

粘贴此示例文本，为部署中的后脚本步骤创建 `script.sh` 文件。

```
echo "Hello World!" 
```

**将 `script.sh` 文件添加至您的源存储库**

1. 打开文本编辑器，然后将上述文件复制并粘贴到新文件中。

1. 提交您的 `script.sh` 文件并将其推送至源存储库。

   1. 添加文件。

      ```
      git add .
      ```

   1. 提交更改。

      ```
      git commit -m "Adding script.sh."
      ```

   1. 推送提交。

      ```
      git push
      ```

   记下存储库中的路径。

   ```
   /MyDemoRepo/test/script.sh
   ```

## 步骤 4：创建管道
<a name="tutorials-ec2-deploy-pipeline"></a>

使用向 CodePipeline 导创建工作流阶段并连接源存储库。

**创建管道**

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

1. 在**欢迎**页面、**入门**页面或**管道**页面上，选择**创建管道**。

1. 在**步骤 1：选择创建选项**页面上的**创建选项**下，选择**构建自定义管道**选项。选择**下一步**。

1. 在**步骤 2：选择管道设置**的**管道名称**中，输入 **MyPipeline**。

1. CodePipeline 提供 V1 和 V2 类型的管道，它们的特性和价格各不相同。在控制台中，您只能选择 V2 类型。有关更多信息，请参阅[管道类型](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipeline-types-planning.html?icmpid=docs_acp_help_panel)。有关定价的信息 CodePipeline，请参阅[定价](https://aws.amazon.com/codepipeline/pricing/)。

1. 在**服务角色**中，选择**使用现有服务角色**，然后选择已更新为具有此操作所需权限的 CodePipeline 服务角色。要为此操作配置您的 CodePipeline服务角色，请参阅[EC2 部署操作的服务角色策略权限](action-reference-EC2Deploy.md#action-reference-EC2Deploy-permissions-action)。

1. 将**高级设置**中的各项设置保留为默认值，然后选择**下一步**。

1. 在**步骤 3：添加源阶段**页面上，添加源阶段：

   1. 在**来源提供商**中，选择 **GitHub （通过 GitHub 应用程序）**。

   1. 在**连接**下，选择一个现有连接或创建一个新连接。要创建或管理 GitHub源操作的连接，请参阅[GitHub 连接](connections-github.md)。

   1. 在 **Repository name (存储库名称)** 中，选择 GitHub 存储库的名称。

   选择**下一步**。

1. 在**步骤 4：添加构建阶段**页面上，选择**跳过**。

1. 在**步骤 5：添加部署阶段**页面上，选择 **EC2**。  
![\[\]](http://docs.aws.amazon.com/zh_cn/codepipeline/latest/userguide/images/ec2deploy-action.png)

   1. 在**目标目录**中，输入要部署到的实例上的目录，例如 `/home/ec2-user/testhelloworld`。
**注意**  
指定您希望操作对实例使用的部署目录。作为部署的一部分，该操作将在实例上自动创建指定目录。

   1. 对于 **PostScript**，请输入脚本的路径和文件名，例如`test/script.sh`。

   1. 选择**下一步**。

1. 在 **Step 6: Review** 页面上，审查您的管道配置，然后选择 **Create pipeline** 以创建管道。  
![\[\]](http://docs.aws.amazon.com/zh_cn/codepipeline/latest/userguide/images/ec2deploy-pipeline.png)

1. 管道成功运行后，选择**查看详细信息**即可查看操作日志，查看托管计算操作输出。  
![\[\]](http://docs.aws.amazon.com/zh_cn/codepipeline/latest/userguide/images/ec2deploy-logs.png)  
![\[\]](http://docs.aws.amazon.com/zh_cn/codepipeline/latest/userguide/images/ec2deploy-logs2.png)

## 第 5 步：测试您的管道
<a name="tutorials-ec2-deploy-test"></a>

您的管道应该具备运行 end-to-end原生 AWS 持续部署所需的一切。现在，通过将代码更改推送至您的源存储库来测试管道的功能。

**测试您的管道**

1. 对您的已配置源存储库进行代码更改，然后提交并推送更改。

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

1. 从列表中选择您的管道。

1. 监视管道经历不同阶段的进度。您的管道应已完成，您的操作将在您的实例上部署脚本。

1. 有关问故障排除的更多信息，请参阅[EC2 部署操作失败并显示错误消息“`No such file`”](troubleshooting.md#troubleshooting-ec2-deploy)。