如何通过CloudFormation修改LaunchConfig配置并替换其中的AMI ID
CloudFormation替换Auto Scaling启动配置AMI ID操作指南
操作前提
- 如果你此前的Auto Scaling组(ASG)和启动配置(LC)是手动在控制台/CLI创建的,需要先通过CloudFormation资源导入功能将这两个资源纳入CloudFormation栈管理,才能通过模板更新配置
- 如果你已经是通过CloudFormation管理上述资源,可直接操作栈更新
具体操作步骤
- 提前验证目标AMI的可用性:确认该AMI在你业务部署的AWS区域存在,且你的AWS账号具备该AMI的访问权限
- 编辑对应CloudFormation栈的模板,找到
AWS::AutoScaling::LaunchConfiguration资源定义段,替换ImageId字段的取值为新的AMI ID
注意:启动配置是不可变资源,修改ImageId属性会触发CloudFormation自动删除旧启动配置、创建新启动配置,同时自动将关联的ASG绑定到新启动配置,不会影响ASG内现有运行的实例 - 如果你需要将ASG内现有旧实例也替换为新AMI启动的实例,可在模板中为ASG配置
InstanceRefresh策略,设置分批替换规则,避免业务中断 - 提交CloudFormation栈更新,等待变更执行完成后,验证ASG关联的启动配置ID是否更新,新扩容实例的AMI是否符合预期
示例模板
以下是包含启动配置和ASG的最小可用YAML模板示例,你可以基于你原有模板调整对应字段即可:
AWSTemplateFormatVersion: "2010-09-09" Parameters: TargetAmiId: Type: String Description: 替换为你需要使用的新AMI ID Default: "ami-xxxxxxx" # 这里填写你的目标AMI ID InstanceType: Type: String Default: "t2.micro" AsgSubnets: Type: List<AWS::EC2::Subnet::Id> Description: ASG部署的子网ID列表 InstanceSecurityGroups: Type: List<AWS::EC2::SecurityGroup::Id> Description: EC2实例绑定的安全组ID列表 Resources: MyLaunchConfig: Type: AWS::AutoScaling::LaunchConfiguration Properties: ImageId: !Ref TargetAmiId InstanceType: !Ref InstanceType SecurityGroups: !Ref InstanceSecurityGroups # 可按需补充其他配置:实例配置文件、用户数据、块设备映射等 MyAutoScalingGroup: Type: AWS::AutoScaling::AutoScalingGroup Properties: MinSize: 1 MaxSize: 3 DesiredCapacity: 2 LaunchConfigurationName: !Ref MyLaunchConfig VPCZoneIdentifier: !Ref AsgSubnets # 配置实例刷新策略,自动替换旧实例 InstanceRefresh: Strategy: Rolling Preferences: MinHealthyPercentage: 75 InstanceWarmup: 300
内容的提问来源于stack exchange,提问作者James001
相关产品推荐
相关产品推荐

