16

我想在负载变高时自动扩展基础架构。我正在运行我的基础架构AWSGithub我有一个要求,我需要在发生时提取应用程序代码autoscaling。由于代码经常更改,我们无法AMI从 that 中获取并启动实例AMI。所以我想从repositories. AWS 刚刚推出了一项名为AWS CodeDeploy. 如何使用此服务在实例启动时自动执行拉取代码的过程?

PS我已经编写了一个init script自动附加一个EIP白名单,该IP在不同的安全组上,并在实例启动时将实例置于a下load-balancer,并在实例在自动缩放中终止时撤销所有内容。

4

1 回答 1

27

CodeDeploy 是解决您问题的好方法。如果配置正确,它可以自动部署到由 Autoscaling 启动的新 EC2 实例。要使其正常工作,您需要三件事:

  1. 一个 Auto Scaling 组,用于启动安装并运行最新主机代理的实例。
  2. 配置为部署到该 Auto Scaling 组的 Code Deploy 部署组(作为 Auto Scaling 组而不是按标签)。
  3. 自动部署到新实例的目标修订。如果没有目标修订,代码部署将看到实例启动,但不会部署任何东西。

以下是您可以用来帮助入门的教程:教程:使用 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,您在配置详细信息 -> 高级详细信息下创建启动配置时进行设置。

要设置部署组并设置目标修订:

  1. 创建或编辑部署组以包含 Auto Scaling 组。(注意:Auto Scaling 组必须首先存在才能正常工作。)
  2. 确保 Auto Scaling 组中至少有 1 个实例。
  3. 将要自动部署的工件包部署到部署组。
  4. 假设步骤 3 成功,部署组现在将该捆绑包设置为其目标修订版。对于自动部署,这将成为部署的已知良好修订。

Auto Scaling 在该 Auto Scaling 组中启动的新实例将自动部署部署组的目标修订版。来自失败的手动部署的修订不会自动自动部署。

于 2014-11-13T20:52:30.617 回答