我正在尝试为负载均衡器创建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"
]
}
请帮助我解决验证错误。预先感谢。
答案 0 :(得分:0)
从CLI创建时,条件NeedELB
是否发生了变化?我看到资源LoadBalancerHTTPListener
取决于有条件创建的ApplicationLoadBalancer
。如果NeedELB
为假,堆栈可能仍尝试创建LoadBalancerHTTPListener
。无论哪种方式,您都应该为LoadBalancerHTTPListener
添加该条件。
PS:尝试更新您的CLI。较早的CLI版本可能导致此情况。案例resource-type-error-while-trying-to-use-cloudformation