Условно определить переменную среды Elastic Beanstalk с помощью CloudFormation - PullRequest
0 голосов
/ 02 марта 2019

Я хочу создать Elastic Beanstalk, используя шаблон CloudFormation.Я хочу определить переменную окружения ENV_VAR_1 и установить ее значение в значение параметра шаблона var1.Но не хочу, чтобы ENV_VAR_1 вообще существовал, если var1 - пустая строка.Т.е. я не хочу ENV_VAR_1 без значения.

Сначала я попробовал Conditions, но я получаю "Encountered unsupported property Condition" при создании ресурса ElasticBeanstalkEnvironment.

Parameters:
  var1:
    Type: String

Conditions:
  isVar1Empty: !Equals [ !Ref var1, "" ]

Resources:
  ElasticBeanstalkEnvironment:
    Type: 'AWS::ElasticBeanstalk::Environment'
    Properties:
      OptionSettings:
        - Namespace: 'aws:elasticbeanstalk:application:environment'
          Condition: isVar1Empty
          OptionName: ENV_VAR_1
          Value: !Ref var1

Тогда я попробовал AWS::NoValue

Parameters:
  var1:
    Type: String

Resources:
  ElasticBeanstalkEnvironment:
    Type: 'AWS::ElasticBeanstalk::Environment'
    Properties:
      OptionSettings:
        - Namespace: 'aws:elasticbeanstalk:application:environment'
          OptionName: ENV_VAR_1
          Value: !If [[!Equals [ !Ref var1, "" ]], !Ref 'AWS::NoValue', !Ref var1]

и множество комбинаций перестановок этого.С тем же результатом: когда var1 пусто, Elastic Beanstalk создается с ENV_VAR_1, установленным на ""

1 Ответ

0 голосов
/ 02 марта 2019

Условия будут применяться на уровне ресурсов ... в настоящее время вы не можете применить условие к определенному свойству.

Что вы можете сделать, чтобы удовлетворить эти точные требования (а это немного уродливо)), это создать два условия, одно отрицая другое.Затем с этими двумя условиями сделайте так, чтобы они условно создали определенный ресурс.

Parameters:
  var1:
    Type: String

Conditions:
  isVar1Empty: !Equals [ !Ref var1, "" ]
  isVar1NonEmpty: !Not [ !Equals [ !Ref var1, "" ] ]

Resources:
  ElasticBeanstalkEnvironmentWithVar1:
    Type: 'AWS::ElasticBeanstalk::Environment'
    Condition: isVar1NonEmpty
    Properties:
      OptionSettings:
        - Namespace: 'aws:elasticbeanstalk:application:environment'
          OptionName: ENV_VAR_1
          Value: !Ref var1
  ElasticBeanstalkEnvironmentWithoutVar1:
    Type: 'AWS::ElasticBeanstalk::Environment'
    Condition: isVar1Empty
    Properties:
      OptionSettings:
        - Namespace: 'aws:elasticbeanstalk:application:environment'

Как я уже сказал ... немного некрасиво.Обратите внимание, что это будет действительно хорошо работать, только если у вас есть одна или две переменные, подобные этой.Как только вы добавляете второй или третий «необязательный» параметр, он быстро начинает выходить из-под контроля.

Лучшим вариантом может быть создание шаблона CloudFormation с использованием библиотеки шаблонов, такой как mustache .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...