为 CodeDeploy 创建 Amazon EC2 实例(CloudFormation 模板) - AWS CodeDeploy

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

为 CodeDeploy 创建 Amazon EC2 实例(CloudFormation 模板)

您可使用 CloudFormation 模板快速启动运行 Amazon Linux 或 Windows Server 的 Amazon EC2 实例。您可使用 AWS CLI、CodeDeploy 控制台或 AWS API 通过模板启动实例。除了启动实例之外,模板还可用于:

  • 指示 CloudFormation 为实例提供参与 CodeDeploy 部署的权限。

  • 标记实例,以便 CodeDeploy 可在部署过程中找到它。

  • 安装 CodeDeploy 代理并在实例上运行它。

您无需使用 CloudFormation 即可设置 Amazon EC2 实例。有关替代方法,请参阅使用适用于 CodeDeploy 的实例

我们不为运行 Ubuntu Server 或 Red Hat Enterprise Linux(RHEL)的 Amazon EC2 实例提供 CloudFormation 模板。

开始前的准备工作

在使用 CloudFormation 模板启动 Amazon EC2 实例之前,请务必完成以下步骤。

  1. 请确保您已创建管理员用户,如步骤 1:设置中所述。仔细检查用户是否具有以下最低权限,然后添加任何不存在的最低权限:

    • cloudformation:*

    • codedeploy:*

    • ec2:*

    • iam:AddRoleToInstanceProfile

    • iam:CreateInstanceProfile

    • iam:CreateRole

    • iam:DeleteInstanceProfile

    • iam:DeleteRole

    • iam:DeleteRolePolicy

    • iam:GetRole

    • iam:DeleteRolePolicy

    • iam:PutRolePolicy

    • iam:RemoveRoleFromInstanceProfile

  2. 确保您有实例密钥对,以允许通过 SSH 访问运行 Amazon Linux 的 Amazon EC2 实例,或者允许通过 RDP 访问运行 Windows Server 的实例。

    要查找密钥对名称,请打开 Amazon EC2 控制台,网址为 https://console.aws.amazon.com/ec2。在导航窗格中,在 Network & Security(网络和安全)下,选择 Key Pairs(密钥对),然后记下列表中的密钥对名称。

    要生成新的密钥对,请参阅使用 Amazon EC2 创建密钥对。请确保密钥对是《AWS 一般参考》区域和终端节点中列出的其中一个区域中创建的。否则,您无法将实例密钥对与 CodeDeploy 结合使用。

使用 CloudFormation 模板启动 Amazon EC2 实例(控制台)

  1. 登录到 AWS 管理控制台 并打开 CloudFormation 控制台 https://console.aws.amazon.com/cloudformation

    重要

    使用您在AWS 管理控制台中使用的同一账户登录 入门 CodeDeploy。在全局导航栏上的区域选择器中,选择《AWS 一般参考》区域和终端节点中列出的某个区域。CodeDeploy 仅支持这些区域。

  2. 选择创建堆栈

  3. 选择模板中,选择指定 Amazon S3 模板 URL。在框中键入您所在区域的 CloudFormation模板的位置,然后选择 Next(下一步)

    区域 CloudFormation 模板位置
    美国东部(俄亥俄州)区域 http://s3-us-east-2.amazonaws.com/aws-codedeploy-us-east-2/templates/latest/CodeDeploy_SampleCF_Template.json
    美国东部(弗吉尼亚州北部)区域 http://s3.amazonaws.com/aws-codedeploy-us-east-1/templates/latest/CodeDeploy_SampleCF_Template.json
    美国西部(北加利福尼亚)区域 http://s3-us-west-1.amazonaws.com/aws-codedeploy-us-west-1/templates/latest/CodeDeploy_SampleCF_Template.json
    美国西部(俄勒冈州)区域 http://s3-us-west-2.amazonaws.com/aws-codedeploy-us-west-2/templates/latest/CodeDeploy_SampleCF_Template.json
    加拿大(中部)区域 http://s3-ca-central-1.amazonaws.com/aws-codedeploy-ca-central-1/templates/latest/CodeDeploy_SampleCF_Template.json
    欧洲地区(爱尔兰)区域 http://s3-eu-west-1.amazonaws.com/aws-codedeploy-eu-west-1/templates/latest/CodeDeploy_SampleCF_Template.json
    欧洲地区(伦敦)区域 http://s3-eu-west-2.amazonaws.com/aws-codedeploy-eu-west-2/templates/latest/CodeDeploy_SampleCF_Template.json
    欧洲地区(巴黎)区域 http://s3-eu-west-3.amazonaws.com/aws-codedeploy-eu-west-3/templates/latest/CodeDeploy_SampleCF_Template.json
    欧洲地区(法兰克福)区域 http://s3-eu-central-1.amazonaws.com/aws-codedeploy-eu-central-1/templates/latest/CodeDeploy_SampleCF_Template.json
    以色列(特拉维夫)区域 http://s3-il-central-1.amazonaws.com/aws-codedeploy-il-central-1/templates/latest/CodeDeploy_SampleCF_Template.json
    亚太地区(香港)区域 http://s3-ap-east-1.amazonaws.com/aws-codedeploy-ap-east-1/templates/latest/CodeDeploy_SampleCF_Template.json
    Asia Pacific(Tokyo)Region http://s3-ap-northeast-1.amazonaws.com/aws-codedeploy-ap-northeast-1/templates/latest/CodeDeploy_SampleCF_Template.json
    亚太地区(首尔)区域 http://s3-ap-northeast-2.amazonaws.com/aws-codedeploy-ap-northeast-2/templates/latest/CodeDeploy_SampleCF_Template.json
    亚太地区(新加坡)区域 http://s3-ap-southeast-1.amazonaws.com/aws-codedeploy-ap-southeast-1/templates/latest/CodeDeploy_SampleCF_Template.json
    亚太地区(悉尼)区域 http://s3-ap-southeast-2.amazonaws.com/aws-codedeploy-ap-southeast-2/templates/latest/CodeDeploy_SampleCF_Template.json
    亚太地区(墨尔本)区域 https://aws-codedeploy-ap-southeast-4.s3.ap-southeast-4.amazonaws.com/templates/latest/CodeDeploy_SampleCF_Template.json
    亚太地区(孟买)区域 http://s3-ap-south-1.amazonaws.com/aws-codedeploy-ap-south-1/templates/latest/CodeDeploy_SampleCF_Template.json
    南美洲(圣保罗)区域 aws-codedeploy-ap-northeast-1.s3.sa-east-1.amazonaws.com/templates/latest/CodeDeploy_SampleCF_Template.json
  4. Stack name(堆栈名称)框中,键入堆栈的名称(例如,CodeDeployDemoStack)。

  5. Parameters 中,键入以下内容,然后选择 Next

    • 对于 InstanceCount,键入要启动的实例的数量。(建议您保留默认值 1。)

    • 对于 InstanceType,键入要启动的实例类型(或保留默认值 t1.micro)。

    • 对于 KeyPairName,键入实例密钥对名称。仅键入密钥对名称而不是密钥对文件扩展名。

    • 对于 OperatingSystem 框,键入 Windows 以启动运行 Windows Server 的实例(或保留默认值 Linux)。

    • 对于 SSHLocation,键入要用于使用 SSH 或 RDP 连接到实例的 IP 地址范围(或保留默认值 0.0.0.0/0)。

      重要

      0.0.0.0/0 的默认值仅用于演示目的。CodeDeploy 不要求 Amazon EC2 实例可以不受限制地访问端口。作为最佳实践,建议您限制对 SSH(和 HTTP)端口的访问。有关更多信息,请参阅有关保护您的 Amazon EC2 实例的提示

    • 对于 TagKey,键入 CodeDeploy 将用于在部署过程中标识实例的实例标签键(或保留默认值 Name)。

    • 对于 TagValue,键入 CodeDeploy 将用于在部署过程中标识实例的实例标签值(或保留默认值 CodeDeployDemo)。

  6. Options 页上,将选项框留空,然后选择 Next

    重要

    CloudFormation 标签不同于 CodeDeploy 标签。CloudFormation 使用标签来简化对基础设施的管理。CodeDeploy 使用标签来识别 Amazon EC2 实例。您在指定参数页面上指定了 CodeDeploy 标签。

  7. 审核页上的功能中,选中我确认,CloudFormation 可能创建 IAM 资源框,然后选择创建

    在 CloudFormation 创建堆栈并启动 Amazon EC2 实例之后,在 CloudFormation 控制台中,CREATE_COMPLETE 将显示在状态列中。此过程可能耗时数分钟。

要验证 CodeDeploy 代理是否正在 Amazon EC2 实例上运行,请参阅管理 CodeDeploy 代理操作,然后继续使用创建应用程序 CodeDeploy

使用 CloudFormation 模板启动 Amazon EC2 实例(AWS CLI)

  1. 在调用 CloudFormation 命令时使用 create-stack 模板。此堆栈将使用安装的 CodeDeploy 代理启动新的 Amazon EC2 实例。

    要启动运行 Amazon Linux 的 Amazon EC2 实例,请执行以下操作:

    aws cloudformation create-stack \ --stack-name CodeDeployDemoStack \ --template-url templateURL \ --parameters ParameterKey=InstanceCount,ParameterValue=1 ParameterKey=InstanceType,ParameterValue=t1.micro \ ParameterKey=KeyPairName,ParameterValue=keyName ParameterKey=OperatingSystem,ParameterValue=Linux \ ParameterKey=SSHLocation,ParameterValue=0.0.0.0/0 ParameterKey=TagKey,ParameterValue=Name \ ParameterKey=TagValue,ParameterValue=CodeDeployDemo \ --capabilities CAPABILITY_IAM

    要启动运行 Windows Server 的 Amazon EC2 实例,请执行以下操作:

    aws cloudformation create-stack --stack-name CodeDeployDemoStack --template-url template-url --parameters ParameterKey=InstanceCount,ParameterValue=1 ParameterKey=InstanceType,ParameterValue=t1.micro ParameterKey=KeyPairName,ParameterValue=keyName ParameterKey=OperatingSystem,ParameterValue=Windows ParameterKey=SSHLocation,ParameterValue=0.0.0.0/0 ParameterKey=TagKey,ParameterValue=Name ParameterKey=TagValue,ParameterValue=CodeDeployDemo --capabilities CAPABILITY_IAM

    keyName 是实例密钥对的名称。仅键入密钥对名称而不是密钥对文件扩展名。

    template-url 是您所在区域的 CloudFormation 模板的位置:

    区域 CloudFormation 模板位置
    美国东部(俄亥俄州)区域 http://s3-us-east-2.amazonaws.com/aws-codedeploy-us-east-2/templates/latest/CodeDeploy_SampleCF_Template.json
    美国东部(弗吉尼亚州北部)区域 http://s3.amazonaws.com/aws-codedeploy-us-east-1/templates/latest/CodeDeploy_SampleCF_Template.json
    美国西部(北加利福尼亚)区域 http://s3-us-west-1.amazonaws.com/aws-codedeploy-us-west-1/templates/latest/CodeDeploy_SampleCF_Template.json
    美国西部(俄勒冈州)区域 http://s3-us-west-2.amazonaws.com/aws-codedeploy-us-west-2/templates/latest/CodeDeploy_SampleCF_Template.json
    加拿大(中部)区域 http://s3-ca-central-1.amazonaws.com/aws-codedeploy-ca-central-1/templates/latest/CodeDeploy_SampleCF_Template.json
    欧洲地区(爱尔兰)区域 http://s3-eu-west-1.amazonaws.com/aws-codedeploy-eu-west-1/templates/latest/CodeDeploy_SampleCF_Template.json
    欧洲地区(伦敦)区域 http://s3-eu-west-2.amazonaws.com/aws-codedeploy-eu-west-2/templates/latest/CodeDeploy_SampleCF_Template.json
    欧洲地区(巴黎)区域 http://s3-eu-west-3.amazonaws.com/aws-codedeploy-eu-west-3/templates/latest/CodeDeploy_SampleCF_Template.json
    欧洲地区(法兰克福)区域 http://s3-eu-central-1.amazonaws.com/aws-codedeploy-eu-central-1/templates/latest/CodeDeploy_SampleCF_Template.json
    以色列(特拉维夫)区域 http://s3-il-central-1.amazonaws.com/aws-codedeploy-il-central-1/templates/latest/CodeDeploy_SampleCF_Template.json
    亚太地区(香港)区域 http://s3-ap-east-1.amazonaws.com/aws-codedeploy-ap-east-1/templates/latest/CodeDeploy_SampleCF_Template.json
    Asia Pacific(Tokyo)Region http://s3-ap-northeast-1.amazonaws.com/aws-codedeploy-ap-northeast-1/templates/latest/CodeDeploy_SampleCF_Template.json
    亚太地区(首尔)区域 http://s3-ap-northeast-2.amazonaws.com/aws-codedeploy-ap-northeast-2/templates/latest/CodeDeploy_SampleCF_Template.json
    亚太地区(新加坡)区域 http://s3-ap-southeast-1.amazonaws.com/aws-codedeploy-ap-southeast-1/templates/latest/CodeDeploy_SampleCF_Template.json
    亚太地区(悉尼)区域 http://s3-ap-southeast-2.amazonaws.com/aws-codedeploy-ap-southeast-2/templates/latest/CodeDeploy_SampleCF_Template.json
    亚太地区(墨尔本)区域 https://aws-codedeploy-ap-southeast-4.s3.ap-southeast-4.amazonaws.com/templates/latest/CodeDeploy_SampleCF_Template.json
    亚太地区(孟买)区域 http://s3-ap-south-1.amazonaws.com/aws-codedeploy-ap-south-1/templates/latest/CodeDeploy_SampleCF_Template.json
    南美洲(圣保罗)区域 aws-codedeploy-ap-northeast-1.s3.sa-east-1.amazonaws.com/templates/latest/CodeDeploy_SampleCF_Template.json

    此命令使用 CloudFormation 模板在指定的 Amazon S3 存储桶中创建一个名为 CodeDeployDemoStack 的 CloudFormation 堆栈。虽然 Amazon EC2 实例基于 t1.micro 实例类型,但您可使用任何类型。虽然它是使用值 CodeDeployDemo 标记的,但您可使用任何值标记它。它已应用指定的实例密钥对。

  2. 调用 describe-stacks 命令以验证名为 CloudFormation 的 CodeDeployDemoStack 堆栈是否已成功创建:

    aws cloudformation describe-stacks --stack-name CodeDeployDemoStack --query "Stacks[0].StackStatus" --output text

    在返回 CREATE_COMPLETE 值之前,不要继续。

要验证 CodeDeploy 代理是否正在 Amazon EC2 实例上运行,请参阅管理 CodeDeploy 代理操作,然后继续使用创建应用程序 CodeDeploy