AWS: 如何在 CloudFormation 模板中指定布尔类型参数

85
我正在尝试在CloudFormation模板中指定一个布尔参数,以便基于传递的参数有条件地创建资源。
查看这里这里的文档,似乎缺少可辨别的布尔数据类型。
最佳实践是如何指定布尔值?可能使用值为0或1的Number,或者使用String,并将AllowedValues设置为“true”和“false”?

为什么不使用密钥对呢?你的用例是什么? - Karan Shah
1
密钥对是如何工作的?使用案例如问题所述 - 根据输入参数在模板中有条件地创建资源。 - Willem van Ketwich
1个回答

126

快速入门模板是创建复杂模板的一个良好的半官方参考点,它们正如您所描述的那样使用了布尔值来实现条件资源,使用带有AllowedValuestruefalseString。以下是一个具体的示例

"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文档的“有条件地使用现有资源”示例中,也可以找到类似的示例,其中AllowedValuesdefaultNONE(默认值)。

要基于此类布尔参数有条件地创建资源,您需要添加一个Condition语句,其中包含一个匹配 trueFn::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

8
我还不确定字符串'true'和字面量true是否被评估为相同的东西。在文档中,我看到了两种情况的例子,它们似乎可以互换使用。 - Arel
6
@Arel,在YAML中,'true'true都是字符串。字符串周围的引号通常是可选的。一些例外情况是涉及数字或特殊字符时。 - Mark R
17
根据YAML规范中的标签解析,true将明确解析为本地布尔类型,因此,在YAML本身中,'true'true不会被评估为相同的内容。在CloudFormation中,对于String类型的参数值,它似乎会在验证之前将任何YAML本地值转换为字符串,因此在这种情况下,至少从这个原因来看,'true'true是可以互换的。 - wjordan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接