В AWS CloudFormation взаимозаменяемы логические значения и строки логических выражений? - PullRequest
0 голосов
/ 30 мая 2019

Меня смущает то, как AWS CloudFormation обрабатывает логические значения и строки логических значений.

Например, 'true' и true (или 'false' и false) логически эквивалентны в отношении CloudFormation? Я вижу примеры обоих случаев в их шаблонах Quick Start, которые наводят меня на мысль, что это так (хотя я так и не нашел документацию по этому поводу).

Например, в своем шаблоне quickstart-compatibility-common / templates / vpc-production.template они определяют переменную pSupportsNatGateway типа "String" (хотя ее значение по умолчанию равно значение литерал , true):

Parameters:
  ...
  pSupportsNatGateway:
    Description: Specifies whether this region supports NAT Gateway (this value is
      determined by the main stack if it is invoked from there)
    Type: String
    Default: true

Затем, в состоянии позже в шаблоне, этот параметр (предположительно, String) сравнивается со значением литерал , true.

Conditions:
  ...
  cSupportsNatGateway:
    !Equals
    - true
    - !Ref pSupportsNatGateway

Мой вопрос: как CloudFormation сравнивает литеральные значения и строки этих значений? Где это определено в документации AWS?

1 Ответ

0 голосов
/ 30 мая 2019

Я не знаю, где это задокументировано, но да !Похоже, что литеральные логические значения (или числа) и их строковые значения эквивалентны в отношении CloudFormation.

Я создал минимальный шаблон CloudFormation для проверки этого:

---
AWSTemplateFormatVersion: 2010-09-09
Description: Test CloudFormation template

Parameters:

  pCreateCluster:
    Description: To create or not create?
    Type: String
    Default: 'true'
    AllowedValues:
    - 'true'
    - 'false'

Conditions:
  CreateClusterConditionTrue1:
    !Equals
    - !Ref pCreateCluster
    - 'true'

  CreateClusterConditionTrue2:
    !Equals
    - !Ref pCreateCluster
    - true

  CreateClusterConditionFalse1:
    !Equals
    - !Ref pCreateCluster
    - 'false'

  CreateClusterConditionFalse2:
    !Equals
    - !Ref pCreateCluster
    - false

Resources:

  rFargateCluster:
    Type: AWS::ECS::Cluster
    Condition: CreateClusterConditionTrue1
    Properties:
      ClusterName: "my-test-cluster"

Outputs:
  CreateClusterConditionTrue1:
    Value:
      !If
      - CreateClusterConditionTrue1
      - "The answer is True"
      - "The answer is False"
  CreateClusterConditionTrue2:
    Value:
      !If
      - CreateClusterConditionTrue2
      - "The answer is True"
      - "The answer is False"
  CreateClusterConditionFalse1:
    Value:
      !If
      - CreateClusterConditionFalse1
      - "The answer is True"
      - "The answer is False"
  CreateClusterConditionFalse2:
    Value:
      !If
      - CreateClusterConditionFalse2
      - "The answer is True"
      - "The answer is False"
...

Ирезультаты показывают, что они на самом деле эквивалентны:

Key                             Value
CreateClusterConditionTrue1     The answer is True      
CreateClusterConditionTrue2     The answer is True      
CreateClusterConditionFalse2    The answer is False     
CreateClusterConditionFalse1    The answer is False
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...