Статическая страница на экземпляре EC2 не поддерживается за балансировщиком нагрузки в CloudFormation - PullRequest
0 голосов
/ 24 мая 2018

У меня проблемы с устранением неполадок, почему статическая страница, размещенная на экземпляре EC2, не обслуживается через балансировщик нагрузки.

Я уверен, что экземпляр EC2 настроен правильно, потому что: - Я могу пропинговать экземпляркогда входящий ICMP разрешен в соответствующей группе безопасности - я могу просматривать веб-страницу, когда добавляю публичное имя экземпляра в раздел «Выходы» (хотя я не хочу делать это напрямую, поскольку экземпляр должен находиться забалансировщик нагрузки).

Так что я думаю, что есть проблема с группами безопасности и / или сетевыми маршрутами.

Вот упрощенная версия шаблона CloudFormation (должна быть запущена в eu-west-1):

enter image description here

AWSTemplateFormatVersion: 2010-09-09
Resources:
  VPC:
    Type: 'AWS::EC2::VPC'
    Properties:
      CidrBlock: 10.0.0.0/16
      InstanceTenancy: default
      EnableDnsSupport: 'true'
      EnableDnsHostnames: 'true'

  IGW:
    Type: 'AWS::EC2::InternetGateway'

  IGWAttachment:
    Type: 'AWS::EC2::VPCGatewayAttachment'
    Properties:
      VpcId: !Ref VPC
      InternetGatewayId: !Ref IGW

  PublicSubnet:
    Type: 'AWS::EC2::Subnet'
    Properties:
      CidrBlock: 10.0.0.0/24
      AvailabilityZone: eu-west-1a
      MapPublicIpOnLaunch: 'True'
      VpcId: !Ref VPC

  App:
    Type: 'AWS::EC2::Instance'
    Properties:
      DisableApiTermination: 'false'
      InstanceInitiatedShutdownBehavior: stop
      ImageId: ami-70edb016
      InstanceType: t2.micro
      Monitoring: 'false'
      UserData: >-
        IyEvYmluL2Jhc2gNCnl1bSB1cGRhdGUgLXkNCnl1bSBpbnN0YWxsIC15IGh0dHBkMjQNCnNlcnZpY2UgaHR0cGQgc3RhcnQNCmNoa2NvbmZpZyBodHRwZCBvbg0KZ3JvdXBhZGQgd3d3DQp1c2VybW9kIC1hIC1HIHd3dyBlYzItdXNlcg0KY2hvd24gLVIgcm9vdDp3d3cgL3Zhci93d3cNCmNobW9kIDI3NzUgL3Zhci93d3cNCmZpbmQgL3Zhci93d3cgLXR5cGUgZCAtZXhlYyBjaG1vZCAyNzc1IHt9ICsNCmZpbmQgL3Zhci93d3cgLXR5cGUgZiAtZXhlYyBjaG1vZCAwNjY0IHt9ICsNCmVjaG8gJzxodG1sPjxoZWFkPjx0aXRsZT5TdWNjZXNzITwvdGl0bGU+PC9oZWFkPjxib2R5PlN1Y2Nlc3MhPC9ib2R5PjwvaHRtbD4nID4gL3Zhci93d3cvaHRtbC9kZW1vLmh0bWw=
      NetworkInterfaces:
        - AssociatePublicIpAddress: 'true'
          DeleteOnTermination: 'true'
          Description: Primary network interface
          DeviceIndex: 0
          SubnetId: !Ref PublicSubnet
          GroupSet:
            - !Ref SGApp

  ELB:
    Type: 'AWS::ElasticLoadBalancing::LoadBalancer'
    Properties:
      Subnets:
        - !Ref PublicSubnet
      Instances:
        - !Ref App
      SecurityGroups:
        - !Ref SGELB
      Listeners:
        - LoadBalancerPort: '80'
          InstancePort: '80'
          Protocol: HTTP
      HealthCheck:
        Target: 'HTTP:80/'
        HealthyThreshold: '3'
        UnhealthyThreshold: '5'
        Interval: '15'
        Timeout: '5'

  SGELB:
    Type: 'AWS::EC2::SecurityGroup'
    Properties:
      VpcId: !Ref VPC

  AllowInboundHTTPToELB:
    Type: 'AWS::EC2::SecurityGroupIngress'
    Properties:
      GroupId: !Ref SGELB
      IpProtocol: tcp
      FromPort: '80'
      ToPort: '80'
      CidrIp: 0.0.0.0/0

  SGApp:
    Type: 'AWS::EC2::SecurityGroup'
    Properties:
      VpcId: !Ref VPC

  AllowInboundHTTPFromELB:
    Type: 'AWS::EC2::SecurityGroupIngress'
    Properties:
      GroupId: !Ref SGApp
      IpProtocol: tcp
      FromPort: '80'
      ToPort: '80'
      SourceSecurityGroupId: !Ref SGELB
  RouteTable:
    Type: 'AWS::EC2::RouteTable'
    Properties:
      VpcId: !Ref VPC

  PublicRoute:
    Type: 'AWS::EC2::Route'
    Properties:
      DestinationCidrBlock: 0.0.0.0/0
      RouteTableId: !Ref RouteTable
      GatewayId: !Ref IGW

  SubnetRouteTableAssociation:
    Type: 'AWS::EC2::SubnetRouteTableAssociation'
    Properties:
      RouteTableId: !Ref RouteTable
      SubnetId: !Ref PublicSubnet

Outputs:
  LoadBalancerDNSName:
    Value: !GetAtt ELB.DNSName

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

После того как ваш шаблон CF создан, перейдите к ресурсам и проверьте, что экземпляр EC2 находится в исправном состоянии в ELB под консолью loadbalancers.Если он вреден для здоровья, он не будет направлять трафик на него.

0 голосов
/ 24 мая 2018

Я расшифровал ваш UserData и увидел, что у вас нет index.html, HTTP:80/ будет искать index.html по умолчанию.Поскольку index.html httpd не будет перенаправлен на тестовую страницу с кодом ответа unhealthy 302, как вы упомянули в комментариях, TCP: 80 будет работать или использовать HTTP:80/demo.html

#!/bin/bash
yum update -y
yum install -y httpd24
service httpd start
chkconfig httpd on
groupadd www
usermod -a -G www ec2-user
chown -R root:www /var/www
chmod 2775 /var/www
find /var/www -type d -exec chmod 2775 {} +
find /var/www -type f -exec chmod 0664 {} +
echo '<html><head><title>Success!</title></head><body>Success!</body></html>' > /var/www/html/demo.html
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...