以下是我在AWS中的内容:
一切正常。但是,当我需要对服务器进行更新或更改时,我当前正在手动创建新的AMI_B,使用AMI_B创建新的LaunchConfig,更新AutoScalingGroup以使用新的LaunchConfig,将最小实例数增加到4,等待它们变得可用,然后将数字减少到2以消灭旧的实例。
我真的很想自动化这个过程。亚马逊给了我一些CLI的东西,我能够编写AMI创建脚本,创建LaunchConfig,并更新AutoScalingGroup ......但我没有看到一个简单的方法来编写新实例的脚本。
经过一番搜索后,我发现了一些CloudFormation模板看起来像他们想要的那样,但是大部分做得更多,这对我来说有点混乱。
我应该探索CloudFormation吗?是否有一个简单的指南,我可以遵循开始?或者我应该继续使用我已经开始的脚本?
PS - 对不起,如果这是一个重复的问题。事情在AWS上经常发生变化,因此有时候较旧的回复可能不是当前最佳答案。
答案 0 :(得分:2)
您可以通过多种方式自动执行将Auto Scaling组中的实例更新为新的或更新的启动配置的过程:
如果您确实想使用CloudFormation管理Auto Scaling Group实例的更新,请参阅UpdatePolicy
资源的AWS::AutoScaling::AutoScalingGroup
属性以获取文档,并参考"What are some recommended best practices for performing Auto Scaling group rolling updates?"页面中的Create AMI image as part of a cloudformation stack页面。 AWS知识中心获取更多建议。
如果您还想在CloudFormation资源中编写AMI的创建/更新脚本,请参阅我对“Elastic Beanstalk”问题的回答。
但请注意,CloudFormation不是一个简单的工具 - 它是用于编排AWS资源的复杂,相对低级别的服务,并且由于其陡峭的学习曲线,将现有脚本迁移到它可能需要一些时间投资。 / p>
如果简单性最重要,那么我建议您评估rolling,它在部署期间同时支持immutable和"What is the difference between Elastic Beanstalk and CloudFormation for a .NET project?"更新,更完全托管,面向控制台,平台即服务环境。请参阅我对问题AWS CodeDeploy的回答,以进一步比较CloudFormation和Elastic Beanstalk。
如果您想要一个用于更新自动扩展组中的实例的解决方案,您可以插入现有脚本,Deploy an Application to an Auto Scaling Group Using AWS CodeDeploy可能值得研究。您可以在实例上安装代理,然后通过API / CLI / Console触发部署,并管理将应用程序更新部署到您的实例组。有关完整教程,请参阅Working With Deployments。虽然CodeDeploy支持“就地”部署和“蓝绿”部署(有关详细信息,请参阅{{3}}),但我认为此服务假定将S3托管的应用程序包交换到静态基础AMI而不是替换每次部署都有AMI。所以它可能不适合你的AMI交换用例,但也许值得研究。
答案 1 :(得分:1)
您需要Auto Scaling组上的自定义终止策略。
OldestLaunchConfiguration。 Auto Scaling终止具有最早启动配置的实例。当您更新组并逐步淘汰先前配置中的实例时,此策略非常有用。
使用控制台自定义终止策略
选择Auto Scaling组。
对于“操作”,请选择“编辑”。
在“详细信息”选项卡上,找到“终止策略”。选择一个或多个 终止政策。如果您选择多个策略,请将其列入 您希望他们申请的顺序。如果您使用默认值 策略,使其成为列表中的最后一个。
选择保存。
在CLI上
aws autoscaling update-auto-scaling-group --auto-scaling-group-name my-asg --termination-policies "OldestLaunchConfiguration"
https://docs.aws.amazon.com/autoscaling/latest/userguide/as-instance-termination.html
答案 2 :(得分:0)
我们为此使用Ansible的ec2_asg模块。为此,有replace_all_instances
和replace_batch_size
设置。每个文档:
以滚动方式,将所有使用旧启动配置的实例替换为新启动配置中的一个。 它将ASG大小增加C(replace_batch_size),等待新实例启动并运行。 之后,它将终止一批旧实例,等待替换,然后重复,直到所有旧实例都被替换为止。 完成后,ASG的大小将减小到预期的大小。
如果您提供target_group_arns
,则模块将在下一批之前检查目标组中实例的运行状况。
编辑:为了保持所需的实例数,我们首先将min设置为required。