使用 AWS CloudFormation 服务,我尝试在 2 个 EC2 实例上创建应用程序弹性负载均衡器,但在创建监听器 [AWS::ElasticLoadBalancingV2::Listener] 时遇到错误,如下所示:
“AELB-ElasticLoadBa-XDTNTTXRZMC8”必须采用 ARN 格式(服务:AmazonElasticLoadBalancingV2;状态代码:400;错误代码:ValidationError;请求 ID:9b18bb79-9e58-11e8-9b70-c9b2be714e80)”
我已经引用了 aws 代码模板并添加了以下代码,我是否遗漏了什么?
ElasticLoadBalancer:
Type: 'AWS::ElasticLoadBalancing::LoadBalancer'
Properties:
Instances: [!Ref 'webServer1', !Ref 'webServer2']
CrossZone: 'true'
Listeners:
- LoadBalancerPort: '80'
InstancePort: '80'
Protocol: HTTP
Subnets:
- !Ref pubSubnet
SecurityGroups:
- !Ref LoadBalancerSecurityGroup
HealthCheck:
Target: HTTP:80/
HealthyThreshold: '3'
UnhealthyThreshold: '5'
Interval: '30'
Timeout: '5'
TargetGroupService1:
Type: 'AWS::ElasticLoadBalancingV2::TargetGroup'
Properties:
Name:
'Fn::Join':
- '-'
- - Ref: 'AWS::StackName'
- 'TargetGroupService1'
Port: 10
Protocol: HTTP
#HealthCheckPath: /service1
Targets:
- Id:
Ref: webServer1
Port: 80
VpcId: !Ref myDemoVPC
TargetGroupService2:
Type: 'AWS::ElasticLoadBalancingV2::TargetGroup'
Properties:
Name:
'Fn::Join':
- '-'
- - Ref: 'AWS::StackName'
- 'TargetGroupService2'
Port: 10
Protocol: HTTP
#HealthCheckPath: /service2
Targets:
- Id:
Ref: webServer2
Port: 80
VpcId: !Ref myDemoVPC
Listener:
Type: 'AWS::ElasticLoadBalancingV2::Listener'
Properties:
DefaultActions:
- Type: forward
TargetGroupArn: !Ref TargetGroupService1
LoadBalancerArn: !Ref ElasticLoadBalancer
Port: '80'
Protocol: HTTP
ListenerRuleService1:
Type: 'AWS::ElasticLoadBalancingV2::ListenerRule'
Properties:
Actions:
- Type: forward
TargetGroupArn: !Ref TargetGroupService1
Conditions:
- Field: path-pattern
Values:
- "/service1"
ListenerArn: !Ref Listener
Priority: 1
ListenerRuleService2:
Type: 'AWS::ElasticLoadBalancingV2::ListenerRule'
Properties:
Actions:
- Type: forward
TargetGroupArn: !Ref TargetGroupService2
Conditions:
- Field: path-pattern
Values:
- "/service2"
ListenerArn: !Ref Listener
Priority: 2
最佳答案
您使用了错误的 cloudformation 资源。应用程序负载均衡器的类型
为AWS::ElasticLoadBalancingV2::LoadBalancer
。请注意V2
。您正在使用的创建了一个经典的负载均衡器。
您收到的错误是由于经典 LB 和应用程序 LB 之间的 Ref
函数的返回值不同造成的。
当您指定时:
LoadBalancerArn: !Ref ElasticLoadBalancer
Ref
经典 LB 返回资源名称 (AELB-ElasticLoadBa-XDTNTTXRZMC8),而 Ref
ALB 返回资源 Arn,这是 V2 监听器期望的 LoadBalancerArn
属性。
将具有逻辑名称 ElasticLoadBalancer
的资源替换为具有描述的适当属性的 V2 负载均衡器 here应该可以解决您的问题。
关于aws-cloudformation - 在 Cloudformation 中创建应用程序负载均衡器时出错... XXXXX 必须采用 ARN 格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51811637/