Меня смущает то, как AWS CloudFormation обрабатывает логические значения и струны логических значений.
Например, являются ли 'true'
и true
(или 'false'
и false
) логически эквивалентными для CloudFormation? Я вижу примеры обоих случаев в их шаблонах Quick Start, которые заставляют меня думать, что это так (хотя я так или иначе не нашел документации по этому поводу).
Например, в своем шаблоне quickstart-compliance-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
Затем в условие позже в шаблоне этот параметр (предположительно строка) сравнивается со значением буквальный, true
.
Conditions:
...
cSupportsNatGateway:
!Equals
- true
- !Ref pSupportsNatGateway
Мой вопрос: как CloudFormation сравнивает буквальные значения и струны этих значений? Где это определено в документации AWS?
Я не знаю, где это задокументировано, но да! Похоже, что буквальные логические значения (или числа) и их строковые значения эквивалентны с точки зрения 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