教程:使用 CodePipeline 部署到 Amazon EC2 实例 - AWS CodePipeline

教程:使用 CodePipeline 部署到 Amazon EC2 实例

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

注意

作为在控制台中创建管道的一部分,CodePipeline 将使用 S3 构件存储桶来存放构件。(这与用于 S3 源操作的存储桶不同。) 如果 S3 构件存储桶所在的账户与您的管道账户不同,请确保 S3 构件存储桶归 AWS 账户所有,并且安全可靠。

注意

EC2 部署操作仅适用于 V2 类型管道。

先决条件

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

注意

所有这些资源均应在同一 AWS 区域内创建。

  • 一个将添加示例 script.sh 文件的源控制存储库(本教程使用 GitHub)。

  • 您必须使用现有的 CodePipeline 服务角色,该角色已更新执行此操作的权限。要更新您的服务角色,请参阅EC2 部署操作的服务角色策略权限

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

步骤 1:创建 Amazon EC2 Linux 实例

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

创建实例角色
  1. 通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/

  2. 在控制台控制面板中,选择角色

  3. 选择创建角色

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

  5. 搜索名为 AmazonSSMManagedEC2InstanceDefaultPolicy 的策略并将其选中。

  6. 搜索名为 AmazonSSMManagedInstanceCore 的策略并将其选中。选择下一步:标签

  7. 选择下一步:审核。输入角色的名称(例如 EC2InstanceRole)。

    注意

    记下您的角色名称以便在下一步中使用。在创建实例时选择此角色。

    注意

    您将向该角色添加权限,以便在创建管道后允许其访问管道的 S3 构件存储桶。

    选择创建角色

启动实例
  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. 在侧面导航栏中,选择实例,然后从页面顶部选择启动实例

  3. 名称中,输入 MyInstances。这会为实例分配标签 Name 和标签值 MyInstances

  4. 应用程序和操作系统映像(Amazon 机器映像) 下,找到带有 AWS 徽标的 Amazon Linux AMI 选项,并确保将其选中。(此 AMI 称为 Amazon Linux 2 AMI (HVM),并标记为“符合免费套餐条件”。)

  5. 实例类型下,选择符合免费套餐条件的 t2.micro 类型作为实例的硬件配置。

  6. 密钥对(登录) 下,选择或创建密钥对。

  7. 网络设置下,确保状态为启用

  8. 展开高级详细信息。在 IAM 实例配置文件中,选择您在上一过程中创建的 IAM 角色(例如 EC2InstanceRole)。

    注意

    不要将实例角色留空,因为这会导致系统创建默认角色并且不会选择您创建的角色。

  9. 摘要下的实例数下,输入 2

  10. 选择启动实例

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

步骤 2:向 EC2 实例角色添加构件存储桶权限

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

注意

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

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

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

  3. 权限选项卡上,选择添加内联策略

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

    { "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::BucketName" }
  5. 选择更新

步骤 3:向您的存储库添加脚本文件

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

echo "Hello World!"
script.sh 文件添加至您的源存储库
  1. 打开文本编辑器,然后将上述文件复制并粘贴到新文件中。

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

    1. 添加文件。

      git add .
    2. 提交更改。

      git commit -m "Adding script.sh."
    3. 推送提交。

      git push

    记下存储库中的路径。

    /MyDemoRepo/test/script.sh

步骤 4:创建管道

使用 CodePipeline 向导创建您的管道阶段,并连接源存储库。

创建管道
  1. https://console.aws.amazon.com/codepipeline/ 打开 CodePipeline 控制台。

  2. 欢迎页面、入门页面或管道页面上,选择创建管道

  3. 步骤 1:选择创建选项页面上的创建选项下,选择构建自定义管道选项。选择下一步

  4. 步骤 2:选择管道设置管道名称中,输入 MyPipeline

  5. CodePipeline 提供 V1 和 V2 类型的管道,它们在特性和价格上有所不同。在控制台中,您只能选择 V2 类型。有关更多信息,请参阅管道类型。有关 CodePipeline 的定价信息,请参阅定价

  6. 服务角色中,选择使用现有服务角色,然后选择已更新该操作所需权限的 CodePipeline 服务角色。要为此操作配置您的 CodePipeline 服务角色,请参阅EC2 部署操作的服务角色策略权限

  7. 高级设置中的各项设置保留为默认值,然后选择下一步

  8. 步骤 3:添加源阶段页面上,添加源阶段:

    1. 源提供程序中,选择 GitHub(通过 GitHub 应用程序)

    2. 连接下,选择一个现有连接或创建一个新连接。要创建或管理 GitHub 源操作的连接,请参阅GitHub 连接

    3. 存储库名称中,选择 GitHub 存储库的名称。

    选择下一步

  9. 步骤 4:添加构建阶段页面上,选择跳过

  10. 步骤 5:添加部署阶段页面上,选择 EC2

    向管道添加 EC2 部署操作。
    1. 目标目录中,输入要部署到的实例上的目录,例如 /home/ec2-user/testhelloworld

      注意

      指定您希望操作对实例使用的部署目录。作为部署的一部分,该操作将在实例上自动创建指定目录。

    2. 对于 PostScript,请输入脚本的路径和文件名,例如 test/script.sh

    3. 选择下一步

  11. Step 6: Review 页面上,审查您的管道配置,然后选择 Create pipeline 以创建管道。

    控制台示意图,显示了成功运行的管道,其中部署操作已添加到您的管道中。
  12. 管道成功运行后,选择查看详细信息即可查看操作日志,查看托管计算操作输出。

    查看您的管道中 Amazon EC2 部署操作的日志。
    查看您的管道中 Amazon EC2 部署操作的日志第二页。

步骤 5:测试您的管道

您的管道应具有运行端到端本机 AWS 持续部署所需的一切。现在,通过将代码更改推送至您的源存储库来测试管道的功能。

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

  2. https://console.aws.amazon.com/codepipeline/ 打开 CodePipeline 控制台。

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

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

  5. 有关问故障排除的更多信息,请参阅EC2 部署操作失败并显示错误消息“No such file”