前面學習了Cloudformation 模板的內置函數。其中有一系列特殊的內置函數這裏重點學習一下,叫做 Condition Functions。他的作用其實就是對布爾值的相關操作,類似if..else的條件語句的效果。
這些條件函數是需要配合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