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

6분 분량
0

AWS Fargate에서 Amazon Elastic Container Service(Amazon ECS) 작업을 실행할 때 Network Load Balancer 상태 확인 오류가 발생합니다.

간략한 설명

HTTP 및 HTTPS 상태 확인에 대한 내용은 Fargate의 Amazon ECS 작업에 대한 Application Load Balancer 상태 확인 실패 문제를 해결하려면 어떻게 해야 합니까?를 참조하십시오.

Amazon ECS 작업이 Network Load Balancer 상태 확인에 실패하면 서비스 이벤트 메시지에 다음 예와 유사한 오류가 표시됩니다.

  • "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)"
  • "Health checks requests getting timed out - (service AWS-service) (port 8443) is unhealthy in (target-group arn:aws:elasticloadbalancing:us-east-1:111111111111:targetgroup/aws-targetgroup/123456789) due to (reason Request timed out)."

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

Amazon ECS 작업이 중지된 경우 Amazon ECS에서 중지된 작업 오류 보기를 참조하십시오.

해결 방법

참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하면 AWS CLI의 오류 해결을 참조하십시오. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.

상태 확인 실패

Fargate 작업의 로드 밸런서 상태 확인 실패 문제를 해결하려면 다음 작업을 수행하십시오.

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

로드 밸런서가 Amazon ECS 작업에 대한 상태 확인을 수행할 수 있도록 하려면 다음 구성을 확인하십시오.

  • 컨테이너가 포트 80에 매핑된 경우 작업 보안 그룹은 포트 80에서 인바운드 트래픽을 허용합니다.
  • 애플리케이션은 작업 정의의 컨테이너 인스턴스에 매핑된 포트에서 실행할 수 있습니다.
  • 탄력적 네트워크 인터페이스 보안 그룹은 Amazon Virtual Private Cloud(Amazon VPC) CIDR 범위에서 트래픽을 허용합니다. 자세한 내용은 대상 보안 그룹을 참조하십시오.
  • Network Load Balancer 보안 그룹 규칙은 필수 컨테이너 포트에서 Amazon ECS 서비스 보안 그룹으로의 아웃바운드 트래픽을 허용합니다.
  • 작업에 대한 네트워크 인터페이스 서브넷의 네트워크 액세스 제어 목록(네트워크 ACL)은 상태 확인 포트에서 인바운드 트래픽을 허용합니다.
  • 네트워크 ACL은 임시 포트에서 아웃바운드 트래픽을 허용합니다.

작업이 Amazon VPC 연결 내에서 수동 검사에 올바르게 응답하는지 확인

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

참고: Amazon EC2 시작 유형에 대한 클러스터를 생성하거나 새 Amazon EC2 인스턴스를 시작할 수 있습니다. Amazon EC2 인스턴스를 시작하지 않으려면 ECS Exec을 사용할 수 있습니다.

작업 응답을 확인하려면 SSH를 사용하여 Amazon VPC 연결 내의 EC2 인스턴스에 연결합니다. 그 후 다음 명령 중 하나를 실행하여 대상 그룹 구성을 테스트합니다.

HTTP 상태 확인:

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

참고: example-task-private-ip를 작업 IP 주소로 바꾸고, example-port를 해당 포트로 바꾸십시오. 명령 출력에는 대상 그룹의 HTTP 상태 확인 구성에 대한 200-399 범위의 성공 상태 코드가 표시됩니다.

출력 예시:

HTTP/1.1 200 OK

대상에 SSL을 사용하지 않는 TCP 상태 확인:

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

참고: example-task-private-ip를 작업 IP 주소로 바꾸고, example-port를 해당 포트로 바꾸십시오.

출력 예시:

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

백엔드 상태 확인을 위해 SSL이 필요한 TCP 상태 확인:

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

참고: example-task-private-ip를 작업 IP 주소로 바꾸고, example-port를 해당 포트로 바꾸십시오.

출력 예시:

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

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

다음 작업을 수행하십시오.

작업에 더 긴 상태 확인 유예 기간이 필요한 경우, 다음과 같은 update-service AWS CLI 명령을 실행하여 healthCheckGracePeriodSeconds를 늘리십시오.

aws ecs update-service --cluster example-cluster --service example-service --region example-region --health-check-grace-period-seconds example-value --force-new-deployment

참고: example-cluster를 클러스터 이름으로, example-service를 서비스 이름으로, example-region을 AWS 리전으로, example-value를 상태 확인 유예 기간(초)으로 바꾸십시오.

대상 그룹의 대상이 기본 제한 기간보다 응답하는 데 더 오래 걸리므로 상태 확인에 실패하고 있는지 확인하십시오. 이 문제를 해결하려면 다음 modify-target-group 명령을 실행하여 대상 그룹 제한 시간(초)을 늘리십시오.

aws elbv2 modify-target-group --target-group-arn Target-Group-ARN --health-check-timeout-seconds Timeout-Value

참고: Target-Group-ARN을 대상 그룹 ARN으로, Timeout-Value를 그룹 제한 시간 값(초)으로 바꾸십시오.

애플리케이션 오류를 보려면 애플리케이션 로그를 확인합니다.

애플리케이션이 HealthCheckPath에서 보내는 응답 코드가 대상 그룹의 상태 확인 파라미터에 있는 응답 코드와 일치하는지 확인하십시오. 애플리케이션에서 액세스 로깅을 구성한 경우 ELB-HealthChecker/2.0 키워드를 사용하여 기록된 응답을 확인하십시오. AWS CloudWatch Logs를 사용하는 경우 CloudWatch Logs Insights를 사용하여 다음 쿼리를 실행합니다.

fields @timestamp, @message| sort @timestamp desc
| filter @message like /ELB-HealthChecker/

쿼리 출력에는 Network Load Balancer가 보내는 상태 확인 요청, 응답 코드 및 오류가 표시됩니다.

대상이 로드 밸런서에 대해 활성화되지 않은 가용 영역에 있음

가용 영역에 대상을 등록하는 경우 등록된 대상이 트래픽을 수신하도록 해당 가용 영역을 활성화해야 합니다.

중요: 로드 밸런서를 생성한 후에는 Network Load Balancer의 가용 영역을 비활성화할 수 없습니다. 그러나 추가 가용 영역을 활성화할 수 있습니다.

로드 밸런서가 구성된 가용 영역을 식별하려면 다음 describe-load-balancers 명령을 실행합니다.

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

참고: example-arn-load-balancer를 로드 밸런서 ARN으로 바꾸고 example-region을 해당 리전으로 바꾸십시오.

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

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

참고: example-cluster-name을 클러스터 이름으로, example-service-name을 서비스 이름으로, example-region을 해당 리전으로 바꾸십시오. 명령 출력에는 서비스의 서브넷 ID가 표시됩니다.

작업 서브넷의 가용 영역을 식별하려면 다음 describe-subnets 명령을 실행합니다.

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

참고: example-subnet-ids를 서브넷 ID로 바꾸고 example-region을 해당 리전으로 바꾸십시오. 명령 출력에는 서비스가 구성된 가용 영역이 표시됩니다.

Amazon ECS 서비스의 서브넷 구성을 변경하려면 다음 update-service 명령을 실행합니다.

aws ecs update-service --cluster cluster-name --service service-name --network-configuration "awsvpcConfiguration={subnets=[subnet-xxxxx,subnet-yyyyy]}"

참고: cluster-name을 클러스터 이름으로, service-name을 서비스 이름으로 바꾸십시오.

백엔드 종속성

애플리케이션의 상태 확인 경로가 데이터베이스와 같은 업스트림 또는 다운스트림 서비스와 통신하는 경우 서비스를 사용할 수 있는지 확인하십시오. 서비스 관련 문제로 인해 상태 확인이 실패할 수 있습니다.

Amazon ECS 작업은 여러 가지 이유로 비정상 상태일 수 있습니다. 위에 나온 해결 방법으로도 문제가 해결되지 않으면 Amazon ECS의 서비스 로드 밸런서 문제 해결을 참조하십시오.

관련 정보

Network Load Balancer 대상 그룹의 상태 확인

네트워크 구성

AWS 공식
AWS 공식업데이트됨 3달 전