使用CloudFormation有条件地定义Elastic Beanstalk环境变量

问题描述 投票:0回答:1

我想使用CloudFormation模板创建一个Elastic Beanstalk。我想定义一个环境变量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设置为""

amazon-web-services environment-variables amazon-cloudformation amazon-elastic-beanstalk
1个回答
2
投票

条件将在资源级别应用...目前,您无法将条件应用于特定属性。

你可以做些什么来满足这些确切的要求(这有点难看),创造两个条件,一个否定另一个条件。然后使用这两个条件,让它们有条件地创建特定资源。

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'

就像我说的......有点难看。请注意,如果您有一个或两个这样的变量,这只能很好地工作。只要添加第二个或第三个“可选”参数,就会很快开始失控。

更好的选择可能是使用像mustache这样的模板库生成CloudFormation模板。

© www.soinside.com 2019 - 2024. All rights reserved.