AWS AutoScaling - 实例生命周期

时间:2016-08-21 11:38:21

标签: amazon-web-services amazon-ec2 autoscaling ec2-ami

试着在aws asg上获取一些信息。

这是我的情景;

  • 使用默认asg
  • launch config发布ubuntu ami
  • 使用asg
  • ansible中配置(安装所有必需的软件包并配置)实例
  • 使用python
  • 将代码部署到实例

快乐的日子里,每件事都是安定的。

问题是,如果我应该更改asg的指标,以便终止所有实例,然后将其更改回原始指标,则新实例会变为空白!没有包裹,没有代码!

1 - 这是预期的行为吗?

2 - 如果asg有2个实例并且最多可扩展到5个实例,它会添加3个空白实例,或者使用代码和包获取1个正在运行的实例的副本,并启动3个新实例? / p>

如果1为是,我该如何解决这个问题?我需要使用预先烘焙的图像吗?但即使这样也没有最新的代码。

基本上在非高峰时段,我希望能够将我的asg“归零”,因此没有任何实例正在运行,然后在高峰时段再次重新启动。每天必须再次配置和部署代码是没有意义的。

任何帮助/建议表示赞赏。

2 个答案:

答案 0 :(得分:2)

您的方法遇到的问题是您正在将代码部署到启动实例。因此,当您更改ASG指标实例关闭并再次出现时,它们将从AMI启动,因此他们会错过代码和配置。永远记住在自动缩放中,使用ASG正在使用的AMI和已启动的实例启动新启动的实例。

为避免这种情况,您可以使用将运行配置脚本的用户数据,并在从AMI启动实例时将数据从您的repo中提取到每个实例上的实例,以便空白实例不会启动

阅读此用户数据开发人员指南

https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html

答案 1 :(得分:2)

  1. 是的,这是预期的行为
  2. 它会添加3个空白实例(如果blank,则表示from my base image
  3. 通常的选择是:

    1. 每次有新的代码版本时都会烘焙新图像(它可以很容易地自动化,作为构建/部署过程中的一个步骤),但只有在不经常这样做的情况下才可能有意义。

    2. 将您的实例配置为在启动时提取最新软件版本。有几个选项都涉及user-data scripts。您可以直接从SCM提取最新版本,或者将最新软件包作为构建过程的一部分放入S3存储桶,并在启动时配置实例以从S3中自动部署并自行部署,或者您认为合适的任何内容。