Что произойдет, если у нас будет ложное условие и Ref в CloudFormation? - PullRequest
0 голосов
/ 29 июня 2018

У меня есть эта конфигурация CloudFormation:

Resources:
  DevoSnsTopic:
    Type: AWS::SNS::Topic
    Condition: UseDevoTopic
    ...
  SnsTopic:
    Type: AWS::SNS::Topic
    ...
  QueuePolicy:
    Properties:
       Condition:
          'ForAnyValue:ArnEquals':
             'aws:SourceArn':
               - Ref: SnsTopic
               - Ref: DevoSnsTopic

Это сломается, если UseDevoTopic будет равно false? Или просто пропустите ссылку для DevoSnsTopic?

UPD: Да, отсутствующий ресурс нарушает набор изменений!

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

Если вас беспокоит недопустимая ссылка, если UseDevoTopic ложно и DevoSnsTopic не было создано, вы можете использовать условие Fn::If и указать псевдо-AWS::NoValue. Parmater, если false

Resources:
  DevoSnsTopic:
    Type: AWS::SNS::Topic
    Condition: UseDevoTopic
    ...
  SnsTopic:
    Type: AWS::SNS::Topic
    ...
  QueuePolicy:
    Properties:
       Condition:
          'ForAnyValue:ArnEquals':
             'aws:SourceArn':
               - Ref: SnsTopic
               - !If [UseDevoTopic, !Ref DevoSnsTopic, AWS::NoValue]
0 голосов
/ 29 июня 2018

Ресурс создается только в том случае, если значение Condition равно true. Если это не так, то ресурс не будет создан.

Это отличный способ развернуть различные ресурсы (или ресурсы с разными атрибутами) между системами Dev / Test / Prod или сделать некоторую логику if / then для задания значений.

Вот некоторые фрагменты из шаблона CloudFormation, который развертывается по-разному в зависимости от региона, в котором он развернут:

"Conditions": {
    "InUsEast1": {
      "Fn::Equals": [
        {
          "Ref": "AWS::Region"
        },
        "us-east-1"
      ]
    },
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...