【问题标题】:AWS: Getting 502 from Application LoadBalancer to EC2 instanceAWS:从 Application LoadBalancer 获取 502 到 EC2 实例
【发布时间】:2021-11-03 15:33:04
【问题描述】:

我在 2 个公有子网中有 2 个 EC2 实例。 EC2 实例位于与 EC2 实例相同的公共子网中的 Application Load Balancer 前面。 EC2 的安全组设置为仅接受来自负载均衡器所在安全组的 tcp 流量。

当我点击 Application Load Balancers 端点时收到 502。

我正在使用 CloudFormation 进行部署。这是相关的代码。

AWSTemplateFormatVersion: "2010-09-09"
Description: Deploy a 3-tier wordpress system. (Plublic and Private subnets and DB on RDS)

Parameters:
  VpcId:
    Description: VPC id
    Type: String
    Default: vpc-0b6a616f830dd7d5a

  PublicSubnetA:
    Description: Subnet Id where instance will create
    Type: String
    Default: subnet-0616a6183bee2b276

  PrivateSubnetA:
    Description: Subnet Id where instance will create
    Type: String
    Default: subnet-06784a19612a64444

  PublicSubnetB:
    Description: Subnet Id where instance will create
    Type: String
    Default: subnet-04f7e39ac1431f22a

  PrivateSubnetB:
    Description: Subnet Id where instance will create
    Type: String
    Default: subnet-0fa6aa79eaee582bf

  EC2KeyName:
    Description: Name of an existing EC2 KeyPair to enable SSH access to the instance
    Type: AWS::EC2::KeyPair::KeyName
    Default: test
    ConstraintDescription: must be the name of an existing EC2 KeyPair.

  EC2InstanceType:
    Description: EC2 instance type
    Type: String
    Default: t2.micro
    ConstraintDescription: must be a valid EC2 instance type.

  WebServerInstanceAMI:
    Description: EC2 instance type
    Type: AWS::EC2::Image::Id
    Default: ami-0210560cedcb09f07
    ConstraintDescription: must be an existing AMI ID.

  SSHLocation:
    Description: The IP address range that can be used to SSH to the EC2 instances
    Type: String
    MinLength: 9
    MaxLength: 18
    Default: 0.0.0.0/0
    AllowedPattern: (\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})/(\d{1,2})
    ConstraintDescription: must be a valid IP CIDR range of the form x.x.x.x/x.

  Application:
    Description: Application Name
    Type: String
    AllowedPattern: "[A-Za-z0-9-]+"
    Default: test

  Environment:
    AllowedValues: [preprod,prod]
    Default: preprod
    Description: The name of the Environment
    Type: String

Resources:
  LoadBalancerSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      VpcId: !Ref VpcId
      GroupDescription: ELB Security Group
      SecurityGroupIngress:
        - FromPort: 80
          IpProtocol: tcp
          CidrIp: 0.0.0.0/0
          ToPort: 80
          Description: Allow from internet
      Tags:
        - Key: Name
          Value: !Sub '${Application}-loadbalancer-sg'
        - Key: Project
          Value: !Ref Application
  WebServerSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: 'SSH and Port 80'
      VpcId:
        Ref: VpcId
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: 22
          ToPort: 22
          CidrIp: !Ref 'SSHLocation'
        - IpProtocol: tcp
          FromPort: 80
          ToPort: 80
          SourceSecurityGroupId:
            Ref: LoadBalancerSecurityGroup
      Tags:
        - Key: Name
          Value: !Sub '${Application}-webserver-sg'
        - Key: Project
          Value: !Ref Application
  LoadBalancer:
    Type: AWS::ElasticLoadBalancingV2::LoadBalancer
    Properties:
      Name: ApplicationLoadBalancer
      Scheme: internet-facing
      Subnets:
        - !Ref PublicSubnetA
        - !Ref PublicSubnetB
      SecurityGroups:
        - !Ref LoadBalancerSecurityGroup
  LoadBalancerListener:
    Type: AWS::ElasticLoadBalancingV2::Listener
    Properties:
      LoadBalancerArn: !Ref LoadBalancer
      Port: 80
      Protocol: HTTP
      DefaultActions:
        - Type: forward
          TargetGroupArn: !Ref ApplicationTargetGroup
  ApplicationTargetGroup:
    Type: AWS::ElasticLoadBalancingV2::TargetGroup
    Properties:
      HealthCheckIntervalSeconds: 30
      HealthCheckProtocol: HTTP
      HealthCheckTimeoutSeconds: 15
      HealthyThresholdCount: 3
      UnhealthyThresholdCount: 3
      HealthCheckPath: /index.html
      Matcher:
        HttpCode: '200'
      Name: ApplicationTargetGroup
      VpcId: !Ref VpcId
      Port: 80
      Protocol: HTTP
      TargetGroupAttributes:
        - Key: deregistration_delay.timeout_seconds
          Value: '20'
      Targets:
        - Id: !Ref WebServerInstance1
          Port: 80
        - Id: !Ref WebServerInstance2
          Port: 80
  WebServerInstance1:
    Type: AWS::EC2::Instance
    Properties:
      InstanceType: !Ref EC2InstanceType
      KeyName: !Ref EC2KeyName
      SubnetId: !Ref PublicSubnetA
      SecurityGroupIds:
        - !Ref WebServerSecurityGroup
      ImageId: !Ref WebServerInstanceAMI
      UserData:
        Fn::Base64: !Sub |
          #!/bin/bash -xe
          cd /tmp
          sudo yum update -y
          sudo yum install -y httpd
          echo "Welcome from the instance 1" > /var/www/html/index.html
          sudo -u root service httpd start
  WebServerInstance2:
    Type: AWS::EC2::Instance
    Properties:
      InstanceType: !Ref EC2InstanceType
      KeyName: !Ref EC2KeyName
      SubnetId: !Ref PublicSubnetB
      SecurityGroupIds:
        - !Ref WebServerSecurityGroup
      ImageId: !Ref WebServerInstanceAMI
      UserData:
        Fn::Base64: !Sub |
          #!/bin/bash -xe
          cd /tmp
          sudo yum update -y
          sudo yum install -y httpd
          echo "Welcome from the instance 2" > /var/www/html/index.html
          sudo -u root service httpd start
Outputs:
  LoadBalancerDnsName:
    Description: Load Balancer public facing DNS
    Export:
      Name: !Sub ${AWS::StackName}-LoadBaancer
    Value: !GetAtt LoadBalancer.DNSName

我查看了控制台 UI 中部署的资源,并且可以在 EC2 实例上看到正确的安全组规则。我看不到 ALB 何时无法向 EC2 实例发送消息。

问题:为什么我在访问 ALB 端点时会收到 502 错误?

【问题讨论】:

  • 你检查过网络服务器是否正在运行吗?
  • vpc配置呢?是自定义 vpc 吗?
  • @MarkoE 你的权利,网络服务器不工作。知道为什么我的用户数据脚本没有启动服务器吗?
  • 你能提供模板的完整细节吗?专有网络?您甚至没有指定您使用的是什么 AMI。
  • 看看用户数据部分,我可能会从sudo -u root service httpd start切换到sudo systemctl start httpd

标签: amazon-web-services amazon-ec2 amazon-cloudformation aws-security-group aws-load-balancer


【解决方案1】:

我在我的 VPC 中部署您的模板。 模板非常好并且可以正常工作,包括您的负载平衡器和网站。

因此,导致您的问题的任何原因都在此模板之外。可能 VPC 定义 不正确,但未显示。如果需要,您可以使用 VPC 设置的详细信息提出新问题。

【讨论】:

    猜你喜欢
    • 2019-04-19
    • 1970-01-01
    • 1970-01-01
    • 2022-11-02
    • 2015-06-10
    • 1970-01-01
    • 1970-01-01
    • 2019-02-17
    • 2019-01-01
    相关资源
    最近更新 更多