我想通过以下方式设置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"
}
}
}
}