AWS会自动使用新AMI自动更新Autoscaling组



这是我在AWS中所拥有的:

  • 应用程序ELB
  • 自动缩放组在不同区域(Windows IIS服务器)中具有2个实例
  • 启动配置指向AMI_A
  • 配置了所有关联的后端东西(VPC,子网,安全组,ECT)

一切都起作用。但是,当我需要进行更新或更改服务器时,我目前正在手动创建一个新的AMI_B,使用AMI_B创建新的启动Config,更新AutoscalingGroup使用新的启动config,将最小的实例增加到4,等待4它们可用,然后将数字减少到2个以杀死旧实例。

我真的很喜欢自动化此过程。亚马逊给了我一些指向CLI内容的链接,我可以脚本脚本脚本创建,创建launchconfig并更新AutoscalingGroup ...但是我看不到一种简单的方法可以脚本旋转新实例。p>搜索后,我发现了一些云形式模板,看起来像是我想做的,但大多数会做更多的事情,这让我有些困惑。

我应该探索云形式吗?我可以遵循一个简单的指南来开始吗?还是我应该呆在我开始的脚本上?

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

您有许多选项可以自动化更新的过程自动缩放组中的实例到新的或更新的启动配置:

云形式

如果您确实要使用CloudFormation来管理自动缩放组实例的更新,请参阅UpdatePolicy资源的CC_1属性以进行文档,以及"执行自动扩展组滚动更新的建议最佳实践?"AWS知识中心的页面以获取更多建议。

如果您还想在云形式资源中脚本脚本脚本的AMI的创建/更新,请参阅我对"创建AMI映像作为CloudFormation stack的一部分"的答案。

请注意,云形象不是一个简单的工具 - 它是一种复杂的,相对较低的服务,用于协调AWS资源,并且将您现有的脚本迁移到它的陡峭学习曲线可能需要一些时间投资。<<<<<<<</p>

弹性豆键

如果简单性最重要,那么我建议您评估弹性beanstalk,这也支持部署期间的滚动和不可变化的更新,以更完全管理,面向控制台的平台,即服务环境。请参阅我对一个问题的回答:" .NET项目的弹性Beanstalk和Cloud Formation之间有什么区别?"为了进一步比较云形式和弹性beanstalk。

编码

如果您想在可以插入现有脚本的自动缩放组中更新实例的解决方案,则AWS CodeDeploy可能值得研究。您可以在实例上安装代理,然后通过API/CLI/Console触发部署,并管理将应用程序更新更新到您的实例中。有关完整的教程,请参阅使用AWS CodeDeploy将应用程序部署到自动扩展组。虽然CodeDeploy支持"现场"部署和"蓝绿色"部署(有关详细信息,请参阅使用部署),但我认为此服务采用将S3托管应用程序包交换到静态基础上的方法每个部署。因此,它可能不是最适合您的AMI交换用例,但无论如何都值得研究。

您想要在自动扩展组。

OldestLaunchConfiguration。自动缩放终止具有最古老的启动配置的实例。当您更新组并逐步淘汰以前的配置中的实例时,此策略很有用。

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

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

  5. 对于动作,请选择编辑。

  6. 在"详细信息"选项卡上,找到终止策略。选择一个或多个终止政策。如果您选择多种政策,请在您希望它们申请的顺序。如果使用默认值策略,使其成为列表中的最后一个。

  7. 选择保存。

在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

我们将Ansible的EC2_ASG模块用于此目的。为此,有replace_all_instancesreplace_batch_size设置。每个文档:

以滚动方式,将所有使用旧启动配置的实例替换为新的启动配置中的实例。 它增加了ASG大小的C(replace_batch_size),等待新实例启动并运行。 之后,它终止了一批旧实例,等待替换,然后重复,直到替换所有旧实例为止。 完成此操作后,ASG尺寸将减少到预期的大小。

如果您提供target_group_arns,则模块将在进入下一批之前检查目标组中的实例。

编辑:为了维持所需的实例数,我们首先将最小的时间设置为所需的。

最新更新