在 Cloudformation 中创建应用程序负载均衡器时出错.XXXXX 必须采用 ARN 格式



使用 AWS CloudFormation 服务,我尝试在 2 个 EC2 实例上创建应用程序弹性负载均衡器,但在创建侦听器 [AWS::ElasticLoadBalancingV2::Listener] 时出现错误,如下所示:

"AELB-ElasticLoadBa-XDTNTTXRZMC8"必须采用 ARN 格式(服务:AmazonElasticLoadBalancingV2;状态代码:400;错误代码:验证错误;请求 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 资源。应用程序负载均衡器的TypeAWS::ElasticLoadBalancingV2::LoadBalancer。请注意V2。您正在使用的负载均衡器会创建一个传统负载均衡器。

您得到的错误是由于经典 LB 和应用程序 LB 之间Ref函数的返回值不同。

当您指定:

负载均衡器Arn: !参考 ElasticLoadBalancer

Ref经典 LB 返回资源名称(AELB-ElasticLoadBa-XDTNTTXRZMC8(,而RefALB 返回资源 Arn,这是 V2 侦听器对LoadBalancerArn属性的期望。

将具有逻辑名称的资源替换为具有此处所述的适当属性的 V2 负载均衡器ElasticLoadBalancer应该可以解决问题。

最新更新