本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
AWS 規則函數
可以在規則的條件或宣告中使用內部函數,如 Fn::Equals
、Fn::Not
、Fn::RefAll
。條件屬性確定是否 AWS CloudFormation 應用斷言。如果條件評估為true
,則 CloudFormation 會評估宣告,以在建立或更新佈建產品時驗證參數值是否有效。如果參數值無效,則 CloudFormation 不會建立或更新堆疊。如果條件評估為false
,則 CloudFormation 不檢查參數值並繼續堆棧操作。
函數
Fn::And
如果所有指定條件計算結果為 true
,則傳回 true
;如果其中任一條件計算結果為 false
,則傳回 false
。Fn::And
擔任 AND 運算子。可納入的條件數量下限為 2,上限為 10。
宣告
"Fn::And" : [{condition
}, {...
}]
參數
- condition
-
規則指定的內部函數,計算結果為
true
或false
。
範例
若參考的安全群組名稱等於 true
且 sg-mysggroup
參數的值為 InstanceType
或 m1.large
,以下範例會計算結果為 m1.small
:
"Fn::And": [ { "Fn::Equals": [ "sg-mysggroup", {"Ref": "ASecurityGroup"} ] }, { "Fn::Contains": [ [ "m1.large", "m1.small" ], {"Ref": "InstanceType"} ] } ]
Fn::Contains
若指定字串與字串清單其中至少一個值相符,則傳回 true
。
宣告
"Fn::Contains" : [[list_of_strings
], string
]
參數
- list_of_strings
-
字串清單,如
"A", "B", "C"
。 - string
-
想與字串清單對照的字串,例如
"A"
。
範例
若清單 (true
或 InstanceType
) 含有 m1.large
參數值,以下函數會計算結果為 m1.small
:
"Fn::Contains" : [ ["m1.large", "m1.small"], {"Ref" : "InstanceType"} ]
Fn::EachMemberEquals
若指定字串符合某個清單內所有的值,傳回 true
。
宣告
"Fn::EachMemberEquals" : [[list_of_strings
], string
]
參數
- list_of_strings
-
字串清單,如
"A", "B", "C"
。 - string
-
想與字串清單對照的字串,例如
"A"
。
範例
如果類型 AWS::EC2::VPC::Id
之所有參數適用的 Department
標籤具有 IT
值,則下列函數會傳回 true
:
"Fn::EachMemberEquals" : [ {"Fn::ValueOfAll" : ["AWS::EC2::VPC::Id", "Tags.Department"]}, "IT" ]
Fn::EachMemberIn
若字串清單中的每個成員均符合第二份字串清單內的值少一個值,即傳回 true
。
宣告
"Fn::EachMemberIn" : [[strings_to_check
], [strings_to_match
]]
參數
- strings_to_check
-
字串清單,例如
"A", "B", "C"
。 CloudFormation 檢查strings_to_check
參數中的每個成員是否在strings_to_match
參數中。 - strings_to_match
-
字串清單,如
"A", "B", "C"
。strings_to_match
參數的每個成員會與strings_to_check
參數的成員進行對照。
範例
以下函數會檢查使用者是否指定了位在有效的 Virtual Private Cloud (VPC) 內的子網路。VPC 必須位在使用者使用堆疊的帳戶和區域內。該函數會套用至類型 AWS::EC2::Subnet::Id
的所有參數。
"Fn::EachMemberIn" : [ {"Fn::ValueOfAll" : ["AWS::EC2::Subnet::Id", "VpcId"]}, {"Fn::RefAll" : "AWS::EC2::VPC::Id"} ]
Fn::Equals
比較兩個值,判斷是否相同。若兩值相同,即傳回 true
,反之則傳回 false
。
宣告
"Fn::Equals" : ["value_1
", "value_2
"]
參數
value
-
要與另一個值比較的任何類型的值。
範例
若 true
參數的值等同 EnvironmentType
,下列範例會計算結果為 prod
:
"Fn::Equals" : [{"Ref" : "EnvironmentType"}, "prod"]
Fn::Not
若某個條件計算結果為 false
,則傳回 true
,若某個條件計算結果為 true
,則傳回 false
。Fn::Not
擔任 NOT 運算子。
宣告
"Fn::Not" : [{condition
}]
參數
condition
-
規則指定的內部函數,計算結果為
true
或false
。
範例
若 EnvironmentType
參數的值不同於 prod
,下列範例會計算結果為 true
:
"Fn::Not" : [{"Fn::Equals" : [{"Ref" : "EnvironmentType"}, "prod"]}]
Fn::Or
如果任一指定條件評估為 true
,則傳回 true
;如果所有的條件評估為 false
,則傳回 false
。Fn::Or
擔任 OR 運算子。可納入的條件數量下限為 2,上限為 10。
宣告
"Fn::Or" : [{condition
}, {...
}]
參數
condition
-
規則指定的內部函數,計算結果為
true
或false
。
範例
若參考的安全群組名稱等於 true
或 sg-mysggroup
參數的值為 InstanceType
或 m1.large
,以下範例會計算結果為 m1.small
:
"Fn::Or" : [ {"Fn::Equals" : ["sg-mysggroup", {"Ref" : "ASecurityGroup"}]}, {"Fn::Contains" : [["m1.large", "m1.small"], {"Ref" : "InstanceType"}]} ]
Fn::RefAll
傳回指定參數類型的所有值。
宣告
"Fn::RefAll" : "parameter_type
"
參數
- parameter_type
-
AWS特定參數類型,例如
AWS::EC2::SecurityGroup::Id
或AWS::EC2::VPC::Id
。如需更多詳細資訊,請參閱 https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/parameters-section-structure.html 使用者指南中的AWS CloudFormation 參數部分。
範例
下列函數會傳回區域及正在建立或更新堆疊 AWS 帳戶 的所有 VPC ID 清單:
"Fn::RefAll" : "AWS::EC2::VPC::Id"
Fn::ValueOf
傳回某個屬性值,或指定參數和屬性值的清單。
宣告
"Fn::ValueOf" : [ "parameter_logical_id
", "attribute
" ]
參數
- 屬性
-
想要從中擷取某個值的屬性名稱。如需屬性的詳細資訊,請參閱 支援的屬性。
- parameter_logical_id
-
想要從中擷取屬性值的參數名稱。該參數並需於範本的
Parameters
區段內宣告。
範例
以下範例會傳回由 Department
參數指定之 VPC 的 ElbVpc
標籤的值:
"Fn::ValueOf" : ["ElbVpc", "Tags.Department"]
如果為一個參數指定多個值,Fn:: ValueOf 函數可以返回一個列表。例如可指定多個子網路,並取得可用區域清單,其中每個成員均是特定子網路的可用區域:
"Fn::ValueOf" : ["ListOfElbSubnets", "AvailabilityZone"]
Fn::ValueOfAll
傳回指定參數類型和屬性所有屬性值的清單。
宣告
"Fn::ValueOfAll" : ["parameter_type
", "attribute
"]
參數
- 屬性
-
想要從中擷取某個值的屬性名稱。如需屬性的詳細資訊,請參閱 支援的屬性。
- parameter_type
-
AWS特定參數類型,例如
AWS::EC2::SecurityGroup::Id
或AWS::EC2::VPC::Id
。如需更多詳細資訊,請參閱 https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/parameters-section-structure.html 使用者指南中的AWS CloudFormation 參數部分。
範例
在下列範例中,Fn::ValueOfAll
函數會傳回一份值的清單,其中每個成員均是含有 Department
標籤之 VPC 該標籤的值。
"Fn::ValueOfAll" : ["AWS::EC2::VPC::Id", "Tags.Department"]
支援的函數
無法在 Fn::ValueOf
和 Fn::ValueOfAll
函數內使用另一個函數。不過可以在所有其他規則特定的內建函式使用下列函數:
-
Ref
-
其他規則特定的內部函數
支援的屬性
以下清單所述的是可為特定資源和參數類型擷取的屬性值:
AWS::EC2::VPC::Id
參數類型或 VPC ID。-
-
DefaultNetworkAcl
-
DefaultSecurityGroup
-
標籤。
tag_key
-
AWS::EC2::Subnet::Id
參數類型或子網路 ID。-
-
AvailabilityZone
-
標籤。
tag_key
-
VpcId
-
AWS::EC2::SecurityGroup::Id
參數類型或安全群組 ID。-
-
標籤。
tag_key
-