如何在CloudFormation中指定AMI?

时间:2019-05-23 18:25:07

标签: amazon-web-services amazon-ec2 amazon-cloudformation

我的任务很简单-我想使用CloudFormation设置一个我喜欢的任意AMI的EC2实例。但是,由于某些原因,这并不像输入我想要的图像的ID号那样简单。

我们在他们的tutorial CloudFormation template中看到,对于ImageId部分,他们具有:

Properties:
    ImageId: !FindInMap [ AWSRegionArch2AMI, !Ref 'AWS::Region' , !FindInMap [ AWSInstanceType2Arch, !Ref InstanceType, Arch ] ]

在可用的EC2图像中搜索时,我看不到任何称为“ AWSRegionArch2AMI”的内容,因此我不知道为什么该关键字能够指定其所需的AMI并允许此模板运行。

例如,说我想让我的CloudFormation模板使用此流行的,公开可用的AMI创建一个实例:

  

Red Hat Enterprise Linux 8(HVM),SSD卷类型-ami-08949fb6466dd2cf3

我应该在ImageId字段中指定什么才能使CloudFormation使用此AMI?

此外,为什么标准使用这些复杂的程序参数而不是仅使用UID指示我想要的图像?

1 个答案:

答案 0 :(得分:2)

简短的答案:没有必要进行此查找过程。如果您打算使用单个AMI在单个区域中运行,那么将AMI指定为参数并直接使用它是完全合理的。

但是,AWS示例必须能够在多个区域中运行,因为AWS的客户使用这些不同的区域。为此,它定义了映射(在example templateMappings部分中,可用于将实例类型转换为AMI。


编辑:这是我当前使用的模板的摘录,该模板将AMI作为参数传递(默认)。它以JSON格式编写,并省略了很多内容,但是应该可以让您了解正在发生的事情:

"Parameters" : {
    "AmiId" : {
        "Description" : "The ID of the AMI to use for the EC2 instance",
        "Default": "ami-059f4aad319ff1bc3",
        "Type": "String"
    }


"Resources" : {

    "EC2Instance" : {
        "Type" : "AWS::EC2::Instance",
        "Properties" : {
            "ImageId" : { "Ref" : "AmiId" },