Fn :: If条件基于环境的Cloudformation参数

时间:2019-06-25 13:52:40

标签: amazon-cloudformation

基于环境,我正在尝试为变量设置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

2 个答案:

答案 0 :(得分:0)

没有完整的模板,很难尝试重新创建问题,但是在这里重构了您的代码片段,并删除了可能的错误。

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

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}"

答案 1 :(得分:0)

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