【问题标题】:How do I update new instances started by AWS auto scaling?如何更新由 AWS Auto Scaling 启动的新实例?
【发布时间】:2015-10-08 03:43:51
【问题描述】:
我们使用 AWS cloudformation 服务来初始化我们的堆栈,并设置 Auto Scaling 服务以在负载上升时启动新的应用程序服务器。
我的理解是 Auto Scaling 只能将预定义的 AMI 作为新实例启动。这些实例可能与其他正在运行的实例不同,因为我们可能已经更新了部署在这些实例上的包/源代码。
如何更新新实例?
每次我向正在运行的实例部署新内容时,是否应该更新 AMI?或者在自动缩放时是否会触发新实例(Opsworks)上的自动部署?
我是 AWS 新手,如果我的问题很初步,请原谅我。
【问题讨论】:
标签:
amazon-web-services
cloud
autoscaling
aws-opsworks
【解决方案1】:
有多种方法可以做到这一点。我的首选方法是从不直接接触服务器,而是在部署新版本软件时创建一个新的 AMI。
为此,请为自动缩放组使用AutoScalingRollingUpdate 属性。然后,当您更改 ImageId 的启动配置时,AWS 将自动将您的旧服务器替换为新服务器作为滚动升级。
我有一个简单的部署脚本,它创建一个新的 AMI,替换模板中的 ImageId,然后进行堆栈更新 - AWS 负责其余的工作。
【解决方案2】:
从 Beanstalk 创建 EC2 实例时,它会根据指定的环境选择自动创建 AutoScaling 组和启动配置。从基础 AMI 创建实例是使用自定义代码调用 user data 完成的,其中包括用于创建文件夹和安装相关软件的 shell 脚本。
在启动新实例之前,您可以在其中添加新的 shell 脚本或命令来完成您的自定义工作。这种方式就简单多了。 例如您可以在启动实例之前运行 yum update
查找用户数据部分
转到 EC2 控制台 -> 转到启动配置部分(左侧)-> 选择正确的启动配置并复制它 -> 单击查看用户数据 -> 根据需要添加脚本和命令 -> 修改相关的 Auto Scaling 组以指向到新的启动配置