AWS Cloudformation:将 AMI 作为参数,否则回退到使用 Map



我想通过以下方式设置Cloudformation模板:

1( 检查用户的参数。 如果提供,请使用它。

2( 如果未提供参数,请回退到使用如下所示的地图:

  AWSRegionArch2AMI:
    eu-central-1:
      HVM64: ami-d11dc4ff
    us-east-1:
      HVM64: ami-a13749a2
    us-west-1:
      HVM64: ami-fdd8428a

这里重要的部分是每个区域的默认值;我需要跨区域使用模板,因此需要具有特定于区域的默认值。

有谁知道这样做的好方法?

您可以使用条件来完成此操作。 基本上,您根据您定义的检查定义一个 true 或 false 的变量,然后您可以根据该值创建模板分叉。

下面是使用该 AMI 选择方法创建单个 EC2 实例的示例模板:

{
    "AWSTemplateFormatVersion": "2010-09-09",
    "Description": "Example mostly pulled from http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/conditions-sample-templates.html",
    "Mappings": {
        "AWSRegionArch2AMI": {
            "eu-central-1": {"HVM64": "ami-d11dc4ff"},
            "us-east-1": {"HVM64": "ami-a13749a2"},
            "us-west-1": {"HVM64": "ami-fdd8428a"}
        }
    },
    "Parameters": {
        "AMI": {
            "Description": "AMI to use.",
            "AllowedPattern": "(ami-[0-9a-f]{8}){0,1}",
            "Default": "",
            "Type": "String"
        }
    },
    "Conditions": {
        "UseDefaultAMI": {
            "Fn::Equals": [
                {"Ref": "AMI"},
                ""
            ]
        }
    },
    "Resources": {
        "EC2Instance": {
            "Type": "AWS::EC2::Instance",
            "Properties": {
                "ImageId": {
                    "Fn::If": [
                        "UseDefaultAMI",
                        {"Fn::FindInMap": [
                                "AWSRegionArch2AMI",
                                {"Ref": "AWS::Region"},
                                "HVM64"
                        ]},
                        {"Ref": "AMI"}
                    ]
                },
                "InstanceType": "m3.medium"
            }
        }
    }
}

最新更新