【问题标题】:Fn::If condition based on environment for Cloudformation ParametersFn::If 条件基于 Cloudformation 参数的环境
【发布时间】:2019-11-07 09:20:42
【问题描述】:

根据环境,我正在尝试为变量设置 URL:它暂存我的 URL 应该是 https://staging.DNHostedZoneName ,如果 prod - 它应该只是 https://DNSHostedZoneName

这是我的情况:

Conditions:
  IsEnvProd: Fn::Equals [ !Ref Env, 'prod' ]
  IsEnvStage: Fn::Equals [ !Ref Env, 'stage' ]

这里是它被评估的地方:

          Environment:
            - Name: NODE_ENV
              Value: !Ref NodeEnv
            - Fn::If:
              - IsEnvStage
              - Name: CORE_URL
                Value:
                  Fn::Join:
                    - ""
                    - - "https://"
                      - "staging"
                      - "."
                      - !Ref DnsHostedZoneName
              - Name: NCVCORE_URL
                Value:
                  Fn::Join:
                    - ""
                    - - "https://"

                      - !Ref DnsHostedZoneName

我收到以下错误:

 Template format error: Conditions can only be boolean operations on parameters and other conditions

【问题讨论】:

    标签: amazon-cloudformation


    【解决方案1】:

    如果没有完整的模板,很难尝试重新创建问题,但这里您的 sn-ps 已重构并删除了可能的错误。

    调整了条件句以使用所有速记。

    Conditions:
      IsEnvProd:  !Equals [!Ref "Env", "prod"]
      IsEnvStage: !Equals [!Ref "Env", "stage"]
    

    YAML 中有一个额外的空间,因此已被删除并重新格式化。

    Environment:
    - Name: "NODE_ENV"
      Value: !Ref "NodeEnv"
    - !If
      - "IsEnvStage"
      - Name: "CORE_URL"
        Value: !Sub "https://staging.${DnsHostedZoneName}"
      - Name: "NCVCORE_URL"
        Value: !Sub "https://${DnsHostedZoneName}"
    

    【讨论】:

      【解决方案2】:

      通常,定义的条件用作 aws 资源的属性,并且您将条件的名称指定为值。你可以试试https://krunal4amity.github.io - 它是一个在线的cloudformation模板生成器。它带走了很多这样可怕的工作。

      【讨论】:

        【解决方案3】:

        您可以尝试使用AWS::NoValue 来编排特定资源的创建

        https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/pseudo-parameter-reference.html

        以下内容来自 LambdaFunction 的变量创建

        Conditions:
           IsProd: !Equals [!Ref Env, "production"]
        
        Environment:
           Variables:
             USER: !If [IsProd, !GetAtt ...., Ref: AWS::NoValue]
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-01-30
          • 1970-01-01
          • 2018-11-14
          • 2017-11-14
          • 2016-05-23
          • 1970-01-01
          • 2017-05-01
          相关资源
          最近更新 更多