Задача 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'

1 ответ

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

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

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

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

Ваш настроенный маршрут должен вернуть success response(status : 200) по вызову.

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

Точно так же, если "/health-check" вы настроили для проверки работоспособности, пожалуйста, убедитесь, что вы получаете вызов yourwebsitename.com/health-check возвращает 200 код состояния.

Другие вопросы по тегам