如何使用启动配置在 Amazon EC2 Windows 实例上自动安装 AWS CodeDeploy 代理?

上次更新时间:2019 年 8 月 2 日

我想在我的 Amazon Elastic Compute Cloud (Amazon EC2) Windows 实例上安装 AWS CodeDeploy 代理。如何使用启动配置来完成此操作?

简短描述

请执行以下任意一项操作:

  • 使用启动配置将 Windows PowerShell 命令发送到使用用户数据的实例。
  • 从安装了 CodeDeploy 的自定义 Amazon 系统映像 (AMI) 启动实例。

解决方法

使用 Windows PowerShell 命令来指定启动配置详细信息

注意:以下步骤将使用 Amazon EC2 Auto Scaling 启动配置来安装 CodeDeploy 代理和代理更新程序,但是您也可以将指令应用到个别实例。

1.    打开 Amazon EC2 控制台

2.    在导航窗格的 AUTO SCALING 部分,选择启动配置

3.    选择创建启动配置

4.    选择一个 CodeDeploy 代理支持的 Microsoft Windows AMI。

5.    选择实例类型,然后选择下一步:配置实例详细信息

注意:运行 Windows Server 时使用 t2.medium 实例或者更大型号的实例。

6.    对于名称,输入启动配置的名称。

7.    对于 IAM 角色,请选择兼容 CodeDeploy 权限的 AWS Identity and Access Management (IAM) 角色。

8.    选择高级详细信息

9.    对于用户数据,请输入以下 Windows PowerShell 命令:

<powershell>
Set-ExecutionPolicy RemoteSigned -Force
Import-Module AWSPowerShell
$REGION = (ConvertFrom-Json (Invoke-WebRequest -Uri http://169.254.169.254/latest/dynamic/instance-identity/document -UseBasicParsing).Content).region
New-Item -Path c:\temp -ItemType "directory" -Force
powershell.exe -Command Read-S3Object -BucketName aws-codedeploy-$REGION -Key latest/codedeploy-agent-updater.msi -File c:\temp\codedeploy-agent-updater.msi
// Start-Sleep -Seconds 30 *optional
c:\temp\codedeploy-agent-updater.msi /quiet /l c:\temp\host-agent-updater-log.txt
</powershell>

注意:运行以下 Windows PowerShell 命令将会安装 CodeDeploy 代理更新程序。最佳实践:在新实例和现有实例中均安装适用于 Windows Server 的 CodeDeploy 代理更新程序

10.    完成启动配置的存储和安全组步骤,或选择跳到审核

11.    选择创建启动配置

从安装了 CodeDeploy 的自定义 AMI 启动实例

警告:请按顺序执行以下步骤。如果您未在创建 AMI 之前正确配置实例,您的部署将会失败。

1.    确认 CodeDeploy 代理已经安装到运行 Windows 的 Amazon EC2 实例上。

2.    连接到您的 Windows 实例

3.    要将 AWS CodeDeploy 代理设置为“已停止”状态并将启动模式更改为手动,请运行以下命令:

Set-Service -Name 'codedeployagent' -StartupType 'manual' -Status 'stopped'

4.    要启动 AWS CodeDeploy 代理并将启动类型更改为自动,请在实例用户数据中运行以下命令:

警告:以下命令必须是在实例用户数据中执行的最后一个命令。

Set-Service -Name 'codedeployagent' -StartupType 'automatic' -Status 'running'

5.    从您的实例创建自定义 AMI

您使用此自定义 AMI 启动的任何实例都会已经安装 CodeDeploy 代理。


这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助吗?