【问题标题】:AWS: How to specify a boolean parameter in a CloudFormation templateAWS:如何在 CloudFormation 模板中指定布尔参数
【发布时间】:2017-05-25 16:40:00
【问题描述】:

我正在尝试在 CloudFormation 模板中指定一个布尔参数,以便我可以根据传入的参数有条件地创建资源。

查看文档 herehere 会发现明显缺少布尔数据类型。

指定布尔值的最佳做法是什么?可能Number 带有0 或1 或String 带有AllowedValues 'true' 和'false'?

【问题讨论】:

  • 为什么不使用密钥对呢?你的用例是什么?
  • 密钥对如何工作?用例在问题中指定 - 根据输入参数有条件地在模板中创建资源。

标签: amazon-web-services amazon-cloudformation


【解决方案1】:

Quick Start 模板是一个很好的半官方参考点,可以/应该如何创建复杂模板,它们完全按照您的描述实现条件资源的布尔值,使用 StringAllowedValues @ 987654331@ 和false。这是一个具体的example

"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 文档中的 Conditionally use an existing resource 示例中找到类似的示例,其中 AllowedValuesdefaultNONE(默认值)。

要根据此类布尔参数有条件地创建资源,请添加包含与true 匹配的Fn::Equals 内在函数的Condition 语句,然后将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,在 YAML 中,'true'true 都是字符串。字符串周围的引号通常是可选的。一些例外情况是涉及数字或特殊字符。
  • @arel @MarkR YAML 规范 tag resolution 明确地将 true 解析为原生布尔类型,因此 'true'true 不会评估为相同的东西,至少在YAML 本身。在 CloudFormation 中,对于字符串类型的参数值,至少它似乎在验证之前将任何 YAML 原生值转换为字符串,因此在这种情况下,至少 'true'true 可能因此可以互换。
猜你喜欢
  • 2018-11-24
  • 1970-01-01
  • 2017-06-25
  • 2018-08-31
  • 2019-06-13
  • 1970-01-01
  • 2019-01-20
  • 1970-01-01
  • 2018-10-14
相关资源
最近更新 更多