Amazon 规则函数
在规则的条件或断言中,您可以使用内部函数,如 Fn::Equals
、Fn::Not
和 Fn::RefAll
。条件属性确定 Amazon CloudFormation 是否应用断言。如果条件的计算结果为 true
,则 CloudFormation 将评估断言以验证在创建或更新预配置产品时参数值是否有效。如果参数值无效,则 CloudFormation 不会创建或更新堆栈。如果条件的计算结果为 false
,则 CloudFormation 不会检查参数值并继续堆栈操作。
函数
Fn::And
如果所有指定条件计算为 true
,则返回 true
;如果任一条件计算为 false
,则返回 false
。Fn::And
用作 AND 运算符。您最少可以包含 2 个条件,最多可以包含 10 个条件。
声明
"Fn::And" : [{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"
。 - 字符串
-
要与字符串列表进行比较的字符串(如
"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"
。 - 字符串
-
要与字符串列表进行比较的字符串(如
"A"
)。
示例
在以下情况下,以下函数将返回 true
:AWS::EC2::VPC::Id
类型的所有参数的 Department
标签具有 IT
值:
"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
对计算为 true
的条件返回 false
,而对计算为 false
的条件返回 true
。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
-
Amazon 特定的参数类型,如
AWS::EC2::SecurityGroup::Id
或AWS::EC2::VPC::Id
。有关更多信息,请参阅《Amazon CloudFormation 用户指南》中的参数。
示例
以下函数将返回正在创建或更新堆栈的区域和 Amazon Web Services 账户 账户的所有 VPC ID 列表:
"Fn::RefAll" : "AWS::EC2::VPC::Id"
Fn::ValueOf
返回属性值或特定的参数和属性的值的列表。
声明
"Fn::ValueOf" : [ "parameter_logical_id
", "attribute
" ]
参数
- 属性
-
要从中检索值的属性的名称。有关属性的更多信息,请参阅支持的属性。
- parameter_logical_id
-
要为其检索属性值的参数的名称。必须在模板的
Parameters
部分中声明此参数。
示例
以下示例对 ElbVpc
参数指定的 VPC 返回 Department
标签的值:
"Fn::ValueOf" : ["ElbVpc", "Tags.Department"]
如果为一个参数指定多个值,则 Fn::ValueOf 函数会返回一个列表。例如,您可以指定多个子网并获取可用区的列表,其中每个成员均为特定子网的可用区:
"Fn::ValueOf" : ["ListOfElbSubnets", "AvailabilityZone"]
Fn::ValueOfAll
返回给定参数类型和属性的所有属性值的列表。
声明
"Fn::ValueOfAll" : ["parameter_type
", "attribute
"]
参数
示例
在以下示例中,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
-
Tags.
tag_key
-
AWS::EC2::Subnet::Id
参数类型或子网 ID。-
-
AvailabilityZone
-
Tags.
tag_key
-
VpcId
-
AWS::EC2::SecurityGroup::Id
参数类型或安全组 ID。-
-
Tags.
tag_key
-