快速入门模板是创建复杂模板的一个良好的半官方参考点,它们正如您所描述的那样使用了布尔值来实现条件资源,使用带有AllowedValues
为true
和false
的String
。以下是一个具体的示例:
"EnableBanner": {
"AllowedValues": [
"true",
"false"
],
"Default": "false",
"Description": "To include a banner to be displayed when connecting via SSH to the bastion, set this parameter to true",
"Type": "String"
}
在CloudFormation文档的“有条件地使用现有资源”示例中,也可以找到类似的示例,其中AllowedValues
为default
或NONE
(默认值)。
要基于此类布尔参数有条件地创建资源,您需要添加一个Condition语句,其中包含一个匹配 true
的Fn::Equals
内置函数 ,然后将Condition
键添加到资源中。
这是一个完整的、最小化的示例模板:
Parameters:
CreateResource:
Description: Whether I should create a resource.
Default: false
Type: String
AllowedValues: [true, false]
Conditions:
ShouldCreateResource:
!Equals [true, !Ref CreateResource]
Resources:
Resource:
Type: AWS::CloudFormation::WaitConditionHandle
Condition: ShouldCreateResource
'true'
和字面量true
是否被评估为相同的东西。在文档中,我看到了两种情况的例子,它们似乎可以互换使用。 - Arel'true'
和true
都是字符串。字符串周围的引号通常是可选的。一些例外情况是涉及数字或特殊字符时。 - Mark Rtrue
将明确解析为本地布尔类型,因此,在YAML本身中,'true'
和true
不会被评估为相同的内容。在CloudFormation中,对于String类型的参数值,它似乎会在验证之前将任何YAML本地值转换为字符串,因此在这种情况下,至少从这个原因来看,'true'
和true
是可以互换的。 - wjordan