AWS listener cf模板在aws cli中给出错误,但在控制台(设计模板)中有效

时间:2019-03-14 12:24:24

标签: amazon-web-services amazon-cloudformation aws-load-balancer

我正在尝试为负载均衡器创建2个侦听器。

第一个-HTTP用于重定向,第二个-HTTPS用于转发。

我正在尝试通过cf模板实现这一目标。每次我通过设计模板在控制台中执行堆栈时,都会成功对其进行验证。但是,当我使用aws cli尝试相同的堆栈时,出现以下错误。

  

调用CreateStack操作时发生错误(ValidationError):模板格式错误:模板的Resources块中未解决的资源依赖性[ApplicationLoadBalancer]

以下是侦听器和LB的代码示例。

"ApplicationLoadBalancer": {
      "Type": "AWS::ElasticLoadBalancingV2::LoadBalancer",
      "Condition": "NeedELB",
      "Properties": {
        "Subnets": [
          {
            "Fn::GetAtt": [
              "VpcStack",
              "Outputs.PublicSubnet1"
            ]
          },
          {
            "Fn::GetAtt": [
              "VpcStack",
              "Outputs.PublicSubnet2"
            ]
          }
        ],
        "SecurityGroups": [
          {
            "Fn::GetAtt": [
              "VpcStack",
              "Outputs.ELBSecurityGroup"
            ]
          }
        ],
        "Tags": [
          {
            "Key": "Stack",
            "Value": {
              "Ref": "AWS::StackName"
            }
          },
          {
            "Key": "FargateCluster",
            "Value": {
              "Ref": "FargateECSCluster"
            }
          }
        ]
      }
    },
    "LoadBalancerHTTPListener": {
      "Type": "AWS::ElasticLoadBalancingV2::Listener",
      "Properties": {
        "DefaultActions": [
          {
            "Type": "redirect",
            "RedirectConfig": {
              "Host": "#{host}",
              "Path": "/#{path}",
              "Port": "443",
              "Protocol": "HTTPS",
              "Query": "#{query}",
              "StatusCode": "HTTP_302"
            }
          }
        ],
        "LoadBalancerArn": {
          "Ref": "ApplicationLoadBalancer"
        },
        "Port": "80",
        "Protocol": "HTTP"
      },
      "DependsOn": [
        "ApplicationLoadBalancer"
      ]
    },
    "LoadBalancerListener": {
      "Type": "AWS::ElasticLoadBalancingV2::Listener",
      "Condition": "NeedELB",
      "Properties": {
        "DefaultActions": [
          {
            "Type": "forward",
            "TargetGroupArn": {
              "Ref": "DefaultTargetGroup"
            }
          }
        ],
        "LoadBalancerArn": {
          "Ref": "ApplicationLoadBalancer"
        },
        "Port": "443",
        "Protocol": "HTTPS",
        "Certificates": [
          {
            "CertificateArn": {
              "Fn::If": [
                "NeedTLSEndPoint",
                {
                  "Ref": "SSLCertificateArn"
                },
                {
                  "Ref": "AWS::NoValue"
                }
              ]
            }
          }
        ]
      },
      "DependsOn": [
        "DefaultTargetGroup",
        "ApplicationLoadBalancer"
      ]
    }

请帮助我解决验证错误。预先感谢。

1 个答案:

答案 0 :(得分:0)

从CLI创建时,条件NeedELB是否发生了变化?我看到资源LoadBalancerHTTPListener取决于有条件创建的ApplicationLoadBalancer。如果NeedELB为假,堆栈可能仍尝试创建LoadBalancerHTTPListener。无论哪种方式,您都应该为LoadBalancerHTTPListener添加该条件。

PS:尝试更新您的CLI。较早的CLI版本可能导致此情况。案例resource-type-error-while-trying-to-use-cloudformation