如何解决在堆栈 CREATE 的情况下获取最新的 AMI 并在堆栈更新的情况下保持相同的 AMI
我想对现有堆栈 (UPDATE) 和新堆栈 (CREATE) 使用相同的 CloudFormation 模板。 我正在使用公共 SSM 参数存储来获取最新的 AMI:
Parameters:
LatestAmiId:
Type: 'AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>'
Default: /aws/service/ami-windows-latest/Windows_Server-2019-English-Full-Base
Resources:
Instance:
Type: 'AWS::EC2::Instance'
Properties:
ImageId: !Ref LatestAmiId
问题是:当新的 AMI 发布时,我无法更新现有堆栈,因为它会尝试替换 EC2 资源,而且我无法将用于 LatestAmiId
参数的 AMI 传递给我。
我正在寻找一种解决方案,用于在堆栈 UPDATE
的情况下使用相同的 AMI,并在堆栈 CREATE
的情况下获取最新的解决方案。
解决方法
作为解决方法,可以使用两个 ImageId
参数:InstanceImageId
、InstanceImageIdLatest
和一个条件 HasInstanceImageId
:
Parameters:
InstanceImageId:
Type : String
Default: ''
InstanceImageIdLatest:
Type : 'AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>'
Default: /aws/service/ami-windows-latest/Windows_Server-2019-English-Full-Base
Conditions:
HasInstanceImageId: !Not [!Equals [!Ref 'InstanceImageId','']]
Resources:
Instance:
Type: 'AWS::EC2::Instance'
Properties:
ImageId: !If [ HasInstanceImageId,!Ref InstanceImageId,!Ref InstanceImageIdLatest]
在堆栈 CREATE
的情况下,InstanceImageId
参数应为空,Instance 将使用 InstanceImageIdLatest
参数来解析最新的 AMI
。
在堆栈 UPDATE
的情况下,InstanceImageId
参数应该有一个当前正在使用的 AMI
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。