首页 > 解决方案 > If else 条件云的形成

问题描述

我想根据输入参数在 cloudformation 中填充一个值。我想分配Nametest-svc.abc.com或者svc.abc.com取决于环境名称是否prod。如果环境名称是,prod那么值应该是svc.abc.com,否则它应该总是{env-name}-svc.abc.com

我有以下表达式:

Name: !Join [ '-', [ !Ref EnvironmentName, !Ref 'HostedZoneName' ] ]

在上面的表达式中,HostedZoneName将被传递为svc.abc.com并且的值EnvironmentName可能是test, release or prod。所以条件应该被评估为:

Inputs: HostedZoneName -> svc.abc.com, EnvironmentName -> test
Output: test-svc.abc.com

Inputs: HostedZoneName -> svc.abc.com, EnvironmentName -> release
Output: release-svc.abc.com

Inputs: HostedZoneName -> svc.abc.com, EnvironmentName -> 1234567
Output: 1234567-svc.abc.com

Inputs: HostedZoneName -> svc.abc.com, EnvironmentName -> prod
Output: svc.abc.com

它基本上是三元运算符。

Name = EnvironmentName.equals("prod") ? HostedZoneName : EnvironmentName + "-" + HostedZoneName

在 CloudFormation 中遇到 if else 条件。

标签: amazon-web-servicesif-statementamazon-cloudformation

解决方案


看看Cloudformation 条件。您可以使用它们来定义 if 语句Fn::If

然后,您可以在参考资料部分使用此条件来定义如何构建您的HostedZoneName.

这是一个例子。您可能需要执行以下操作:

...
 "Conditions" : {
    "CreateProdResources" : {"Fn::Equals" : [{"Ref" : "EnvType"}, "prod"]}
  },

...

"Properties" : {
    "HostedZoneName" : {
      "Fn::If" : [
        "CreateProdResources",
        "svn.abc.com",
        {"Fn::Sub": "${Environment}-svc.abc.com"}
      ]}
  },

推荐阅读