Amazon web services 在aws cloudformation模板中的If条件中使用importValue

Amazon web services 在aws cloudformation模板中的If条件中使用importValue,amazon-web-services,yaml,amazon-cloudformation,Amazon Web Services,Yaml,Amazon Cloudformation,我试图找到一种在If函数中使用ImportValue的方法,但找不到正确的语法。感谢您的帮助 下面是我正在尝试的代码: SomeTaskdefinition: Type: AWS::ECS::TaskDefinition Properties: Family: 'FamilyName' ContainerDefinitions: - Name: ContainerName Image: 'imagename:net/v2/ Environm

我试图找到一种在If函数中使用ImportValue的方法,但找不到正确的语法。感谢您的帮助

下面是我正在尝试的代码:

SomeTaskdefinition:
  Type: AWS::ECS::TaskDefinition
  Properties:
    Family: 'FamilyName'
    ContainerDefinitions:
    - Name: ContainerName
      Image: 'imagename:net/v2/
      Environment:
      - Name: ENV_VARIABLE_1
        Value:
          Fn::If:
            Fn::Equals:
              Fn::ImportValue:
                !Sub "${ImportStackname}-ECSCluster"
              ''
            'notpresent'
            'present'

我认为这是不可能的。不能在
Equals
函数中使用
ImportValue

另一种解决方法是使用嵌套模板:

  • 将参数添加到子模板
  • 在父模板中,使用导入填充参数
  • 在子模板中,您可以做任何您想做的事情,包括在
    条件
    部分中使用它
未经测试的示例:

# in Parent
Resources:
  ChildStack:
    Type: 'AWS::CloudFormation::Stack'
    Properties:
      Parameters:
        Stackname: {'Fn::ImportValue': !Sub "${ImportStackname}-ECSCluster"}
      TemplateURL: './child.yaml'

# in Child
Parameters:
  Stackname:
    Type: String
    Default: ''
Conditions:
  HasStack: !Not [!Equals [!Ref Stackname, '']]
Resources:
  SomeTaskdefinition:
    Type: AWS::ECS::TaskDefinition
    Properties:
      Family: 'FamilyName'
      ContainerDefinitions:
      - Name: ContainerName
        Image: 'imagename:net/v2/
        Environment:
        - Name: ENV_VARIABLE_1
          Value: !If [HasStack, 'present', 'notpresent']

我在这里遇到了类似的问题。。我的想法是可以指定
DatabaseHost
作为参数,如果保留为空,则值应该取自
DatabaseStack
export。这是我的示例代码-它使用
!导入值
内部
!If
功能。您将得到这个想法(而不是只构造值-构造全名值列表对象)


我不确定Equals函数,但我绝对不能在“条件”部分使用它。目前唯一的解决办法是lambda。4年后仍然如此。谢谢!我的解决方案很有效,看起来很不错
Conditions:
  DatabaseHostPresent: !Not [ !Equals [ !Ref DatabaseHost, ""]]

Resources:
 ...
       ContainerDefinitions:
        - Name: !Sub ${ApplicationName}-web-${EnvironmentName}
          Environment:
            - !If
              - DatabaseHostPresent
              - Name: DB_HOST
                Value: !Ref DatabaseHost
              - Name: DB_HOST
                Value: !ImportValue
                  Fn::Sub: ${DatabaseStack}-EndpointAddress