Назад | Перейти на главную страницу

Задача AWS Fargate не прошла проверку работоспособности ELB

Как я могу решить эту проблему дальше? Я пытаюсь запустить простой контейнер nginx, но балансировщик нагрузки жалуется, что проверки работоспособности не выполнены, и задача не отвечает на свой IP-адрес, вероятно, из-за ошибки балансировщика нагрузки.

Я установил для задачи приоритет 2 в облачной информации. Если я попытаюсь установить приоритет на 1, стек CF не сможет развернуться. Может это как-то связано?

# Create a rule on the load balancer for routing traffic to the target group
  LoadBalancerRule:
    Type: AWS::ElasticLoadBalancingV2::ListenerRule
    Properties:
      Actions:
        - TargetGroupArn: !Ref 'TargetGroup'
          Type: 'forward'
      Conditions:
        - Field: path-pattern
          Values: [!Ref 'Path']
      ListenerArn: 
        Fn::ImportValue: !Ref LoadBalancerListener
      Priority: !Ref 'Priority'

Ресурсы выглядят так:

Resources:

  # The task definition. This is a simple metadata description of what
  # container to run, and what resource requirements it has.
  TaskDefinition:
    Type: AWS::ECS::TaskDefinition
    Properties:
      Family: nginx
      Cpu: 256
      Memory: 512
      NetworkMode: awsvpc
      RequiresCompatibilities:
        - FARGATE
      ContainerDefinitions:
        - Name: nginx
          Cpu: 128
          Memory: 256
          Image: nginx
          PortMappings:
            - ContainerPort: 80

  Service:
    Type: AWS::ECS::Service
    DependsOn: LoadBalancerRule
    Properties:
      ServiceName: !Ref 'ServiceName'
      Cluster: 
        Fn::ImportValue: !Ref EcsCluster
      LaunchType: FARGATE
      DeploymentConfiguration:
        MaximumPercent: 200
        MinimumHealthyPercent: 75
      DesiredCount: !Ref 'DesiredCount'
      NetworkConfiguration:
        AwsvpcConfiguration:
          AssignPublicIp: ENABLED
          SecurityGroups: 
            - !Ref EcsHostSecurityGroup
          Subnets:
            - !ImportValue core-vpc-PublicSubnet1AID
            - !ImportValue core-vpc-PublicSubnet1BID
      TaskDefinition: !Ref 'TaskDefinition'
      LoadBalancers:
        - ContainerName: !Ref 'ServiceName'
          ContainerPort: 80
          TargetGroupArn: !Ref TargetGroup

  TargetGroup:
    Type: AWS::ElasticLoadBalancingV2::TargetGroup
    Properties:
      HealthCheckIntervalSeconds: 6
      HealthCheckPath: /
      HealthCheckProtocol: HTTP
      HealthCheckTimeoutSeconds: 5
      HealthyThresholdCount: 2
      TargetType: ip
      Name: !Ref 'ServiceName'
      Port: !Ref 'ContainerPort'
      Protocol: HTTP
      UnhealthyThresholdCount: 2
      VpcId: !ImportValue core-vpc-VPCID



  # This security group defines who/where is allowed to access the ECS hosts directly.
  # By default we're just allowing access from the load balancer.  If you want to SSH
  # into the hosts, or expose non-load balanced services you can open their ports here.
  EcsHostSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      VpcId: !ImportValue core-vpc-VPCID
      GroupDescription: Access to the ECS hosts and the tasks/containers that run on them
      SecurityGroupEgress:
        - CidrIp: 0.0.0.0/0
          IpProtocol: "-1"
      SecurityGroupIngress:
      - IpProtocol: tcp
        FromPort: '443'
        ToPort: '443'
        CidrIp: 138.106.0.0/16

# Create a rule on the load balancer for routing traffic to the target group
  LoadBalancerRule:
    Type: AWS::ElasticLoadBalancingV2::ListenerRule
    Properties:
      Actions:
        - TargetGroupArn: !Ref 'TargetGroup'
          Type: 'forward'
      Conditions:
        - Field: path-pattern
          Values: [!Ref 'Path']
      ListenerArn: 
        Fn::ImportValue: !Ref LoadBalancerListener
      Priority: !Ref 'Priority'

Вы не включили фактический балансировщик нагрузки в свой шаблон. Пожалуйста, включите это, чтобы получить полный ответ.

Ваша проблема, скорее всего, заключается в том, что вашему балансировщику нагрузки, который, скорее всего, имеет частный IP-адрес в ваших подсетях и связывается с ним, не разрешено связываться с вашими экземплярами ECS, поскольку они разрешают трафик только от 138.106.0.0/16.

Для других, которые могут столкнуться с той же проблемой:

Возможно, проблема связана с маршрутом, который вы настроили для проверки работоспособности.

Ваш настроенный маршрут должен возвращать success response(status : 200) на ПОЛУЧИТЬ вызов.

Если "/" это маршрут, который вы настроили для проверки работоспособности, убедитесь, что вы ПОЛУЧИТЬ позвонить yourwebsitename.com/ возвращает 200 код состояния.

Аналогично, если "/health-check" вы настроили проверку работоспособности, убедитесь, что вы ПОЛУЧИТЬ позвонить yourwebsitename.com/health-check возвращает 200 код состояния.