AWS自动更新自动缩放组与新AMI?

sur*_*007 11 amazon-web-services aws-cloudformation autoscaling

以下是我在AWS中的内容:

  • 申请ELB
  • Auto Scaling Group在不同区域有2个实例(Windows IIS服务器)
  • 启动Config指向AMI_A
  • 配置的所有相关后端内容(VPC,子网,安全组等)

一切正常.但是,当我需要对服务器进行更新或更改时,我当前正在手动创建新的AMI_B,使用AMI_B创建新的LaunchConfig,更新AutoScalingGroup以使用新的LaunchConfig,将最小实例数增加到4,等待它们变得可用,然后将数字减少到2以消灭旧实例.

我真的很想自动化这个过程.亚马逊给了我一些CLI的东西链接,我能够编写AMI创建脚本,创建LaunchConfig,并更新AutoScalingGroup ......但我没有看到一个简单的方法来编写新实例的脚本.

经过一番搜索后,我发现了一些CloudFormation模板看起来像他们想要的那样,但是大多数都做得更多,这对我来说有点混乱.

我应该探索CloudFormation吗?是否有一个简单的指南,我可以遵循开始?或者我应该继续使用我已经开始的脚本?

PS - 对不起,如果这是一个重复的问题.事情在AWS上经常发生变化,因此有时旧的响应可能不是当前最佳答案.

wjo*_*dan 7

您有多种选项可以自动将 Auto Scaling 组中的实例更新为新的或更新的启动配置:

云形成

如果您确实想使用 CloudFormation 来管理对 Auto Scaling 组实例的更新,请参阅资源的UpdatePolicy属性以AWS::AutoScaling::AutoScalingGroup获取文档,以及“执行 Auto Scaling 组滚动更新的一些推荐最佳实践是什么?” AWS 知识中心中的页面以获取更多建议。

如果您还想在 CloudFormation 资源中编写 AMI 的创建/更新脚本,请参阅我对问题“创建 AMI 映像作为 cloudformation 堆栈的一部分”的回答

但是请注意,CloudFormation 不是一个简单的工具——它是一个复杂的、级别相对较低的服务,用于编排 AWS 资源,并且由于其陡峭的学习曲线,将您现有的脚本迁移到它可能需要一些时间投资。

弹性豆茎

如果简单性最重要,那么我建议您评估Elastic Beanstalk,它在部署过程中支持滚动更新和不可变更新,在更全面管理、面向控制台的平台即服务环境中。请参阅我对问题“Elastic Beanstalk 和 CloudFormation 用于 .NET 项目有什么区别?”的回答进一步比较 CloudFormation 和 Elastic Beanstalk。

代码部署

如果您想要一个用于更新自动扩展组中的实例的解决方案,您可以将其插入到现有脚本中,AWS CodeDeploy可能值得研究。您在实例上安装代理,然后通过 API/CLI/控制台触发部署,它管理将应用程序更新部署到您的实例队列。有关完整教程,请参阅使用 AWS CodeDeploy 将应用程序部署到 Auto Scaling 组。虽然 CodeDeploy 支持“就地”部署和“蓝绿”部署(请参阅使用部署有关详细信息),我认为该服务采用了一种将 S3 托管的应用程序包交换到静态基础 AMI 上的方法,而不是在每次部署时替换 AMI。因此,它可能不是您的 AMI 交换用例的最佳选择,但无论如何都值得研究。


str*_*gjz 1

您需要在 Auto Scaling 组上使用自定义终止策略。

最旧的启动配置。Auto Scaling 终止具有最旧启动配置的实例。当您更新组并逐步淘汰以前配置中的实例时,此策略非常有用。

使用控制台自定义终止策略

  1. 打开 Amazon EC2 控制台https://console.aws.amazon.com/ec2/
  2. 在导航窗格中,选择 Auto Scaling 组。
  3. 选择自动缩放组。

  4. 对于操作,选择编辑。

  5. 在“详细信息”选项卡上,找到“终止策略”。选择一项或多项终止政策。如果您选择多个策略,请按照您希望它们应用的顺序列出它们。如果您使用默认策略,请将其设置为列表中的最后一个。

  6. 选择保存。

在命令行界面上

 aws autoscaling update-auto-scaling-group --auto-scaling-group-name my-asg --termination-policies "OldestLaunchConfiguration"
Run Code Online (Sandbox Code Playgroud)

https://docs.aws.amazon.com/autoscaling/latest/userguide/as-instance-termination.html