Балансировщик нагрузки приложений - проверка работоспособности завершилась неудачно с этими кодами: [301]

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

Шаблон задачи:

---
AWSTemplateFormatVersion: 2010-09-09 
Parameters:
    ExRole:
      Type: String
    
    RDS:
      Type: String
 
    Dbname:
      Type: String
    
    dbpassword:
      Type: String

    containerName:
      Type: String
    
    taskFamily:
      Type: String


Resources:
    Task:
        Type: AWS::ECS::TaskDefinition
        Properties:
            Family: !Ref taskFamily
            Cpu: 1 vCPU
            ExecutionRoleArn: !Ref ExRole
            Memory: 1 GB
            NetworkMode: bridge
            RequiresCompatibilities:
                - EC2
            TaskRoleArn: !Ref ExRole
            ContainerDefinitions: 
              - Essential: true
                Image: wordpress:latest
                Name: !Ref containerName
                PortMappings:  
                  - ContainerPort: 80
                    HostPort: 0
                    Protocol: tcp 
                Environment:
                  - Name: WORDPRESS_DB_HOST
                    Value: !Ref RDS 
                  - Name: WORDPRESS_DB_USER
                    Value: !Ref Dbname 
                  - Name: WORDPRESS_DB_PASSWORD
                    Value: !Ref dbpassword
                  - Name: WORDPRESS_DB_NAME
                    Value: !Ref Dbname
    
Outputs:
  Task:
    Description: Contains all the task specifications
    Value: !Ref Task
    Export:
      Name: !Sub "${AWS::StackName}-Task"

Балансировщик нагрузки приложений:

---
AWSTemplateFormatVersion: 2010-09-09
Parameters:
    
    SubnetA:
      Type: String
    
    SubnetB:
      Type: String
    
    VpcID:
      Type: String
      
    Env:
      Type: String

Resources:
    Albsg:
        Type: AWS::EC2::SecurityGroup
        Properties:
            GroupName: !Sub "albsg-${Env}"
            VpcId: !Ref VpcID
            SecurityGroupIngress:
                - IpProtocol: tcp
                  FromPort: 80
                  ToPort: 80
                  CidrIp: 0.0.0.0/0
                  Description: For traffic from Internet
            GroupDescription: Security Group for demo server
    Alb:
        Type: AWS::ElasticLoadBalancingV2::LoadBalancer
        Properties: 
            IpAddressType: ipv4
            Name: !Sub "Alb-${Env}"
            Scheme: internet-facing
            SecurityGroups: 
                - !Ref Albsg
            Subnets:
                - Ref: "SubnetA"
                - Ref: "SubnetB"
            Type: application
    DefaultTargetGroup:
        Type: AWS::ElasticLoadBalancingV2::TargetGroup
        DependsOn: Alb
        Properties:
            Name: !Sub "Albtg-${Env}"
            VpcId: !Ref VpcID
            Port: 80
            Protocol: HTTP
            Matcher:
              HttpCode: 302
    LoadBalancerListener:
        Type: AWS::ElasticLoadBalancingV2::Listener
        Properties:
            LoadBalancerArn: !Ref Alb
            Port: 80
            Protocol: HTTP
            DefaultActions:
                - Type: forward
                  TargetGroupArn: !Ref DefaultTargetGroup
Outputs:
  Albsg:
    Description: security group for application load balancer
    Value: !Ref Albsg
    Export:
        Name: !Sub "${AWS::StackName}-Albsg"
  Alb:
    Description: application load balancer
    Value: !Ref Alb
    Export:
      Name: !Sub "${AWS::StackName}-Alb"
  DefaultTargetGroup:
    Description: Default Target Group
    Value: !Ref DefaultTargetGroup
    Export:
      Name: !Sub "${AWS::StackName}-DefaultTargetGroup"       

Мой экземпляр находится в состоянии истощения и выходит из строя, см. Этот снимок экрана:  введите описание изображения здесь




Ответы (1)


301 означает, что при доступе к узлу ECS на его целевом пути проверки работоспособности выполняется перенаправление (отсюда и 301). Чтобы исправить, либо обновите путь в проверке работоспособности до того, который не будет перенаправлять, либо вместо этого обновите код (ы) статуса проверок работоспособности, чтобы включить 301. Это можно сделать как единый код состояния (301) или как диапазон (200-399).

person Chris Williams    schedule 06.08.2020
comment
Как это Matcher: HttpCode: 200-399? - person ; 06.08.2020
comment
Да именно так :) - person Chris Williams; 06.08.2020
comment
Это сработало!! Спасибо!! Но у меня есть запрос, хотя проблема решена с помощью 200-399, но я действительно не понимаю вашего ответа, в котором вы сказали To fix either update the path in the health check to one that won't redirect. Можете подробно объяснить или привести пример? - person ; 06.08.2020
comment
В проверках работоспособности вы также можете указать путь, при выполнении проверки работоспособности он будет выполнять HTTP-запросы к указанному порту конечной точки и пути. Текущая комбинация из них выполняет 301 редирект. Если вы обновили путь до местоположения, на которое он перенаправляется, он должен вернуть 200 вместо 301 для проверки работоспособности. :) - person Chris Williams; 06.08.2020
comment
как и в моем случае, у меня есть путь по умолчанию / каким должен быть путь в моем случае, чтобы он возвращал 200? - person ; 06.08.2020
comment
Ему нужно будет перейти на путь на вашем хосте, который возвращает 200? Будет ли / делать перенаправление в вашем приложении на другой путь? - person Chris Williams; 06.08.2020