如何在CloudFormation YAML模板中不使用SSM配置私有AMI?
当然可以不用AWS Systems Manager (SSM)来配置私有AMI!下面给你几种直接在CloudFormation YAML模板里实现的方法,根据你的场景选就行:
方法1:直接硬编码私有AMI ID
如果你的私有AMI在目标部署区域里的ID是固定不变的,这是最简单的方式。只需要把参数类型从SSM参数改成普通的EC2镜像ID类型,然后直接填入你的私有AMI ID即可:
Parameters: AmiId: Type: 'AWS::EC2::Image::Id' AllowedValues: - 'ami-xxxxxxxxx' # 替换成你的私有AMI实际ID - '/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2' - '/aws/service/ami-windows-latest/Windows_Server-2017-English' Default: 'ami-xxxxxxxxx' # 默认使用私有AMI
注意:私有AMI是区域绑定的,这个方法只适合单区域部署的模板。如果需要跨区域部署,建议看下面的方法3。
方法2:通过参数灵活输入
如果不想把私有AMI ID硬编码在模板里,希望部署时可以选择或输入,你可以保留参数的灵活性:
选项A:限定可选AMI列表
依然保留允许的AMI选项,让部署者从列表中选择:
Parameters: AmiId: Type: 'AWS::EC2::Image::Id' Description: "选择要使用的AMI(包含私有和公共选项)" AllowedValues: - 'ami-xxxxxxxxx' # 你的私有AMI ID - '/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2' - '/aws/service/ami-windows-latest/Windows_Server-2017-English' Default: 'ami-xxxxxxxxx'
选项B:允许任意有效AMI ID
如果想放开限制,允许部署者输入任意有效的EC2镜像ID(包括私有AMI),可以去掉AllowedValues:
Parameters: AmiId: Type: 'AWS::EC2::Image::Id' Description: "输入要使用的AMI ID(支持私有或公共AMI)" Default: 'ami-xxxxxxxxx' # 默认使用你的私有AMI
方法3:跨区域部署用映射(Mappings)
如果你的模板需要在多个AWS区域部署,而私有AMI在不同区域有不同的ID,推荐用Mappings来存储各区域对应的私有AMI ID,再通过Fn::FindInMap动态获取:
Mappings: RegionToPrivateAmi: us-east-1: AmiId: 'ami-xxxxxxxxx' us-west-2: AmiId: 'ami-yyyyyyyyy' eu-west-1: AmiId: 'ami-zzzzzzzzz' # 按需添加更多区域和对应的私有AMI ID Parameters: AmiId: Type: 'AWS::EC2::Image::Id' AllowedValues: - !FindInMap [RegionToPrivateAmi, !Ref 'AWS::Region', AmiId] - '/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2' - '/aws/service/ami-windows-latest/Windows_Server-2017-English' Default: !FindInMap [RegionToPrivateAmi, !Ref 'AWS::Region', AmiId]
这样部署到不同区域时,CloudFormation会自动匹配对应区域的私有AMI ID,完美解决跨区域的问题。
内容的提问来源于stack exchange,提问作者baolongtougu
相关产品推荐
相关产品推荐

