amazon-cloudformation - 在 Cloudformation 中创建 Application Load Balancer 时出错... XXXXX 必须是 ARN 格式
问题描述
使用 AWS CloudFormation 服务,我尝试在 2 个 EC2 实例上创建 Application Elastic Load Balancer,但在创建侦听器 [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 资源。Type
应用程序负载均衡器的AWS::ElasticLoadBalancingV2::LoadBalancer
. 注意V2
. 您正在使用的那个创建了一个经典的负载均衡器。
Ref
您得到的错误是由于经典 LB 和应用程序 LB 之间函数的返回值不同。
当您指定:
LoadBalancerArn: !Ref ElasticLoadBalancer
Ref
经典 LB 返回资源名称 (AELB-ElasticLoadBa-XDTNTTXRZMC8),而Ref
ALB 返回资源 Arn,这是 V2 侦听器期望的LoadBalancerArn
属性。
将具有逻辑名称的资源替换为具有此处ElasticLoadBalancer
描述的适当属性的 V2 负载均衡器应该可以解决您的问题。
推荐阅读
- python - python通过yaml文件配置日志记录
- reactjs - 默认页面重新加载后不执行事件代码
- mysql - 使用 bookshelf 或 Knex ORM 选择 MySQL JSON Column 数据类型中的特定字段
- angular - "ExpressionChangedAfterItHasBeenCheckedError"; 我不明白生命周期钩子中有什么类型的操作,让它被抛出
- google-bigquery - 如何在 BigQuery 中执行滚动求和
- python - 如何定义未缩放模型的部分(带有 ResponseSurface 组件)?
- python - 如何将时间增量转换为分钟?
- facebook-graph-api - composer facebook/graph-sdk 需要 php-http/client-implementation
- javascript - 带有 Typescript 和 react-redux 的有状态组件:“typeof MyClass”类型的参数不可分配给 Component 类型的参数
- c# - MVC 5 和类似于 Laravel Auth 中间件的授权中间件