前面学习了Cloudformation 模板的内置函数。其中有一系列特殊的内置函数这里重点学习一下,叫做 Condition Functions。他的作用其实就是对布尔值的相关操作,类似if..else的条件语句的效果。
https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-conditions.html
这些条件函数是需要配合condition section来操作的。
基本使用方法是
- 在Parameters 的部分传入一些可选的参数
- 在Condition 的部分根据这些参数,通过我们的Condition Functions设置一些条件
- 在 Resource或者 Output 的部分,绑定在第二步的条件,根据不同的条件配置不同的结果
主要有下面5个函数
Fn::And 如果所有的条件成立,返回真,否则返回假
"Fn::And": [{condition}, {...}]
Fn::Equals 比较两个值是否相等,如果相等,返回真,否则假
"Fn::Equals" : ["value_1", "value_2"]
Fn::If 判断条件,如果为真,返回第一个值,否则返回第二个值
"Fn::If": [condition_name, value_if_true, value_if_false]
Fn::Not 如果条件不成立,那么返回真,否则返回假
Fn::Not: [condition]
Fn::Or 如果任何一个条件成立,那么为真;如果所有条件不成立,那么返回假
"Fn::Or": [{condition}, {...}]
最后给一个实际的例子,根据我传入的参数,创建对应的VPC
{
"AWSTemplateFormatVersion" : "2010-09-09",
"Parameters": {
"Tenancy": {
"Description": "Set up VPC Tenancy",
"Type": "String",
"Default": "default",
"AllowedValues" : [ "default", "dedicated"]
}
},
"Conditions" : {
"VPCTenancy" : {"Fn::Equals" : [{"Ref" : "Tenancy"}, "dedicated"]}
},
"Resources" : {
"myVPC" : {
"Type" : "AWS::EC2::VPC",
"Properties" : {
"CidrBlock" : "10.0.0.0/16",
"EnableDnsSupport" : "false",
"InstanceTenancy" : {
"Fn::If" : [
"VPCTenancy",
"dedicated",
"default"
]},
"EnableDnsHostnames" : "false",
"Tags" : [ {"Key" : "foo", "Value" : "bar"} ]
}
}
}
}
创建看看,传入参数选择 dedicated
最后可以看见创建好的 VPC 为 dedicated