CodeDeploy 是解决您问题的好方法。如果配置正确,它可以自动部署到由 Autoscaling 启动的新 EC2 实例。要使其正常工作,您需要三件事:
- 一个 Auto Scaling 组,用于启动安装并运行最新主机代理的实例。
- 配置为部署到该 Auto Scaling 组的 Code Deploy 部署组(作为 Auto Scaling 组而不是按标签)。
- 自动部署到新实例的目标修订。如果没有目标修订,代码部署将看到实例启动,但不会部署任何东西。
以下是您可以用来帮助入门的教程:教程:使用 AWS CodeDeploy 将应用程序部署到 Auto Scaling 组。该教程将引导您完成安装代理的烘焙 AMI 并设置部署组以将您的代码部署到新实例。
如果您确实烘焙了预安装了代理的 AMI,则需要使用代理版本定期更新该映像。安装代理后,它会自行更新,但如果 Code Deploy 不再支持代理版本,Auto Scaling 可能无法启动您的实例。对于实际生产使用,我建议不要烘焙 AMI,而是在您的实例启动时安装最新的代理。(本教程应尽快更新以使用此方法。)
您可以将您的实例设置为在启动时自动下载并运行最新的安装程序。本质上,您在创建 Auto Scaling 组时将 shell 脚本作为用户数据粘贴。
例如,我在 Amazon Linux 上测试了以下脚本(取自Set Up a New Amazon EC2 Instance to Work with AWS CodeDeploy):
#!/bin/bash
yum -y update
yum install -y aws-cli
cd /home/ec2-user
aws s3 cp s3://aws-codedeploy-us-east-1/latest/install . --region us-east-1
chmod +x ./install
./install auto
您应该能够在user data
创建 Auto Scaling 组时将其粘贴。对于 Auto Scaling,您在配置详细信息 -> 高级详细信息下创建启动配置时进行设置。
要设置部署组并设置目标修订:
- 创建或编辑部署组以包含 Auto Scaling 组。(注意:Auto Scaling 组必须首先存在才能正常工作。)
- 确保 Auto Scaling 组中至少有 1 个实例。
- 将要自动部署的工件包部署到部署组。
- 假设步骤 3 成功,部署组现在将该捆绑包设置为其目标修订版。对于自动部署,这将成为部署的已知良好修订。
Auto Scaling 在该 Auto Scaling 组中启动的新实例将自动部署部署组的目标修订版。来自失败的手动部署的修订不会自动自动部署。