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

标签 aws-cloudformation aws-elb

使用 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/

相关文章:

amazon-web-services - AWS cloudformation 嵌套堆栈因模板 URL 失败

python - 使用 Python 加载 CloudFormation YAML

amazon-dynamodb - 对流层 DynamoDB 生存时间规范

kubernetes - Kubernetes 什么时候自动重新创建 AWS ELB

python - 如何在 Boto3 中正确创建并附加 ELB

amazon-web-services - AWS ELB 导致 net::ERR_CERT_COMMON_NAME_INVALID 错误

amazon-web-services - 使用 kops 在 AWS 上的 kubernetes 集群中自定义 SSL 证书,身份验证失败

amazon-web-services - 合并cloudformation模板中的两个对象列表

amazon-web-services - k8s master前面的AWS负载均衡器

amazon-web-services - 如何通过 Cloudformation 模板为 AWS API GW 启用 Cloudwatch 日志记录