需要帮助修复 ALB 的此 CloudFormation 模板

问题描述

这是一个用于创建应用程序负载均衡器的 CloudFormation 模板。 我收到一条错误消息,说 - 属性子网的值必须是字符串列表类型。 安全组实体的声明是否正确?

AWstemplateFormatVersion: '2010-09-09'

Parameters:
  Name: 
    Description: Name of the project
    Type: String
  Environment: 
    Description: Environment of the Application Load balancer
    Type: String
  Publicsubnet:
    Description: subnet
    Type: List<AWS::EC2::subnet::Id>
  Vpc:
    Description: VPC 
    Type: AWS::EC2::VPC::Id
   
Resources:
  SecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: ElastiCache Security Group
      VpcId: !Ref Vpc
      SecurityGroupIngress:
        -
          IpProtocol: tcp
          FromPort: "80"
          ToPort: "80"
          FromPort: "443"
          ToPort: "443"
          CidrIp: "0.0.0.0/0"
      Tags:
        -
          Key: Name
          Value: "App-SG"
  ApplicationLB:
    Type: 'AWS::ElasticLoadBalancingV2::LoadBalancer'
    Properties:
      IpAddresstype: ipv4
      Name: Test-ALB
      Scheme: internet-facing 
      SecurityGroups:
        - !Ref SecurityGroup
      subnets:
        - !Ref Publicsubnet  
      Tags:
        - Key: Name
          Value: Test-ALB
      Type: application
  ALBListener:
    Type: 'AWS::ElasticLoadBalancingV2::Listener'
    Properties:
      DefaultActions:
        - Type: forward
          TargetGroupArn: !Ref ALBTargetGroup
      LoadBalancerArn:
        Ref: ApplicationLB
      Port: '80'
      Protocol: HTTP
  ALBTargetGroup:
    Type: 'AWS::ElasticLoadBalancingV2::TargetGroup'
    Properties:
      HealthCheckIntervalSeconds: 30
      HealthCheckTimeoutSeconds: 5
      HealthyThresholdCount: 3
      Port: 80
      Protocol: HTTP
      UnhealthyThresholdCount: 5
      VpcId: !Ref Vpc

检查整个模板也会有帮助,以防出现更多错误

解决方法

您的 PublicSubnet 已经是一个列表。所以你可以这样做:

Subnets: !Ref PublicSubnet