Fargate에서 Amazon ECS 작업에 대한 Network Load Balancer 상태 확인 오류 문제를 해결하려면 어떻게 해야 합니까?

5분 분량
0

AWS Fargate에서 Amazon Elastic Container Service(Amazon ECS) 작업을 실행할 때 발생하는 Network Load Balancer 상태 확인 오류를 해결하고 싶습니다.

간략한 설명

상태 확인이 구성되면 Network Load Balancer는 등록된 각 대상에 정기적으로 상태 확인 요청을 보냅니다. TCP 상태 확인의 경우, 상태 확인은 단순히 지정된 포트에서 TCP 연결을 열려고 시도합니다. 구성된 제한 시간 내에 지정된 포트에서 연결을 열지 못하면 비정상으로 간주됩니다. UDP 서비스의 경우 대상 그룹에서 비 UDP 상태 확인을 사용하여 대상 가용성을 테스트합니다. HTTP 및 HTTPS 상태 확인에 대해 자세히 알아보려면 Fargate의 Amazon ECS 작업에 대한 Application Load Balancer 상태 확인 실패 문제를 해결하려면 어떻게 해야 합니까?를 참조하세요.

Amazon ECS 작업이 Network Load Balancer 상태 확인에 실패하면 Amazon ECS 서비스 이벤트 메시지에서 다음과 같은 오류가 표시될 수 있습니다.

  • Health checks failed error - (service AWS-service) (port 80) is unhealthy in (target-group arn:aws:elasticloadbalancing:us-east-1:111111111111:targetgroup/aws-targetgroup/123456789) due to (reason Health checks failed)
  • Target is in an Availability Zone that is not turned on for the load balancer error - (service AWS-service) (port 80) is unhealthy in (target-group arn:aws:elasticloadbalancing:us-east-1:111111111111:targetgroup/aws-targetgroup/123456789) due to (reason Target is in an Availability Zone that is not enabled for the load balancer)

Amazon ECS 작업 콘솔의 오류 메시지 예시:

Task failed ELB health checks in (target-group arn:aws:elasticloadbalancing:us-east-1:111111111111:targetgroup/aws-targetgroup/123456789)

컨테이너 상태 확인 오류가 발생하는 경우 Amazon ECS 작업의 컨테이너 상태 확인 오류를 해결하려면 어떻게 해야 합니까?를 참조하세요.

Amazon ECS 작업이 중지된 경우, 중지된 작업의 오류 확인을 참조하세요.

**참고:**Amazon ECS 작업은 여러 가지 이유로 인해 비정상 상태를 반환할 수 있습니다. 다음 해결 방법으로도 오류가 해결되지 않으면 서비스 로드 밸런서 문제 해결을 참조하세요.

해결 방법

**중요:**모든 AWS Command Line Interface(AWS CLI) 명령을 검토하고 example 문자열의 모든 인스턴스를 특정 값으로 바꾸세요. 예를 들어 example-task-private-ip를 특정 작업의 프라이빗 IP 주소로 바꾸세요.

참고: AWS CLI 명령을 실행할 때 오류가 발생하면 최신 버전의 AWS CLI를 실행하고 있는지 확인하세요.

상태 확인 실패

Amazon ECS Fargate 작업의 로드 밸런서 상태 확인 실패 문제를 해결하려면 다음 단계를 완료하세요.

  • 로드 밸런서와 Amazon ECS 작업 간의 연결 상태 확인
  • 작업이 Amazon Virtual Private Cloud(Amazon VPC) 내의 수동 검사에 올바르게 응답하는지 확인합니다.
  • Amazon ECS 컨테이너에서 애플리케이션의 상태 및 구성을 확인합니다.

로드 밸런서와 Amazon ECS 작업 간의 연결 상태 확인

로드 밸런서가 Amazon ECS 작업에 대한 상태 확인을 수행할 수 있는지 확인합니다.

  • 컨테이너가 포트 80에 매핑된 경우 컨테이너 보안 그룹이 포트 80에서 수신 트래픽을 허용하는지 확인합니다.
  • Amazon ECS Fargate ENI 보안 그룹이 Amazon VPC CIDR 범위에서 트래픽을 허용하는지 확인합니다. 이렇게 하면 Network Load Balancer 노드가 Amazon ECS 작업에 도달하여 상태 확인을 수행할 수 있습니다. 자세한 내용을 보려면 대상 보안 그룹을 참조하세요.
  • Fargate 작업용 탄력적 네트워크 인터페이스의 서브넷과 연결된 네트워크 액세스 제어 목록(ACL) 이 수신 트래픽을 허용하는지 확인합니다. 수신 트래픽은 상태 확인 포트에서 허용되어야 합니다. 또한 네트워크 ACL이 임시 포트의 송신 트래픽을 허용하는지 확인합니다.

**해당 작업이 Amazon VPC 내의 수동 검사에 올바르게 응답하는지 확인합니다. **

Amazon VPC 내의 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스 작업이 수동 검사에 올바르게 응답하는지 확인합니다.

참고: Amazon EC2 시작 유형에 대한 클러스터를 생성하거나 새 Amazon EC2 인스턴스를 시작할 수 있습니다. Amazon EC2 인스턴스를 시작하지 않으려면 ECS exec 기능을 사용할 수 있습니다. 이 작업을 수행하려면 --enable-execute-command를 사용하여 동일한 VPC에서 독립 실행형 작업을 시작합니다.

(옵션 1) HTTP 상태 확인의 경우:

$ curl -Iv http://<example-task-private-ip>:<example-port>/<healthcheck_path>

출력 예시:

HTTP/1.1 200 OK

참고: 대상 그룹에서 HTTP 상태 확인을 위해 설정된 구성에 대해 200~399 범위에 있는 성공적인 상태 코드를 수신할 수 있습니다.

(옵션 2) 대상에 SSL을 사용하지 않는 TCP 상태 확인의 경우:

$ nc -z -v -w10 example-task-private-ip example-port

출력 예시:

nc -z -v -w10 10.x.x.x 80
Connection to 10.x.x.x port 80 [tcp/http] succeeded!

(옵션 3) 백엔드 상태 확인을 위해 SSL이 필요한 TCP 상태 확인의 경우:

$ nc -z -v -w10 --ssl example-task-private-ip example-port

출력 예시:

nc -z -v -w10 10.x.x.x 443
Connection to 10.x.x.x port 443 [tcp/https] succeeded!

ECS 컨테이너에서 애플리케이션의 상태 및 구성 확인

  • 대상 그룹의 ping 포트 및 상태 확인 경로가 올바르게 구성되었는지 확인합니다.
  • Amazon ECS 서비스에 대한 CPU 및 메모리 사용률 지표를 모니터링합니다.
  • Amazon ECS 작업에서 Network Load Balancer에 등록하기 위해 더 긴 상태 확인 유예 기간이 필요한 경우 healthCheckGracePeriodSeconds를 늘리세요. 상태 확인 유예 기간을 업데이트하려면 다음 명령을 실행합니다.
$ aws ecs update-service --cluster example-cluster --service example-service --region <example-region> --health-check-grace-period-seconds <example-value-in-seconds>
  • 애플리케이션 로그에서 애플리케이션 오류를 확인합니다. 자세한 내용을 보려면 CloudWatch Logs에서 awslogs 컨테이너 로그 보기를 참조하세요.
  • HealthCheckPath에서 애플리케이션이 보낸 응답 코드를 확인합니다. 애플리케이션에 액세스 로깅이 구성된 경우 ELB-HealthChecker/2.0 키워드를 사용하여 기록된 응답을 확인합니다. CloudWatch Logs를 사용하는 경우 Log Insights를 사용하여 다음 쿼리를 실행하세요.
fields @timestamp, @message
| sort @timestamp desc
| filter @message like /ELB-HealthChecker/

대상이 로드 밸런서가 꺼진 가용 영역에 있음

로드 밸런서의 가용 영역을 켜면 로드 밸런싱에서 AZ에 로드 밸런서 노드를 생성합니다. AZ에 대상을 등록하는 경우 등록된 대상이 트래픽을 수신할 수 있도록 AZ를 켜야 합니다. 자세한 내용을 보려면 가용 영역 및 로드 밸런서 노드를 참조하세요.

로드 밸런서가 구성된 가용 영역을 식별하려면 다음 명령을 실행하세요.

$ aws elbv2 describe-load-balancers --load-balancer-arn <example-arn-load-balancer> --region <example-region> --query "LoadBalancers[].AvailabilityZones[].ZoneName"

참고:Network Load Balancer를 생성한 후에는 가용 영역을 끌 수 없지만 추가 가용 영역을 켤 수는 있습니다.

Amazon ECS Fargate 작업이 구성된 가용 영역을 식별하려면 다음 명령을 실행합니다.

참고: 다음 명령은 서비스가 구성된 서브넷을 반환합니다.

$ aws ecs describe-services —cluster <example-cluster-name> —services <example-service-name> --region <example-region> --query "services[].networkConfiguration.awsvpcConfiguration.subnets"

이전 서브넷의 가용 영역을 식별하려면 다음 명령에서 이전 서브넷 ID를 사용합니다.

**참고:**다음 명령은 서비스가 구성된 가용 영역을 반환합니다.

$ aws ec2 describe-subnets --subnet-ids <example-subnet-ids> --region <example-region> --query "Subnets[].AvailabilityZone"

참고: AWS CLI update-service 명령을 사용하여 Amazon ECS 서비스의 서브넷 구성을 변경할 수 있습니다.

관련 정보

서비스 로드 밸런서 문제 해결

대상 그룹에 대한 상태 확인

AWS 공식
AWS 공식업데이트됨 일 년 전