微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在堆栈 CREATE 的情况下获取最新的 AMI 并在堆栈更新的情况下保持相同的 AMI

如何解决在堆栈 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 参数:InstanceImageIdInstanceImageIdLatest 和一个条件 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 举报,一经查实,本站将立刻删除。