Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
Fargate에서 Amazon ECS 작업의 상태 확인 실패 문제를 해결하려면 어떻게 해야 합니까?
AWS Fargate의 Amazon Elastic Container Service(Amazon ECS) 작업에서 상태 확인에 실패합니다.
간략한 설명
Fargate에서의 Amazon ECS 작업 상태 확인 실패는 다음과 같은 이유로 발생할 수 있습니다.
- 컨테이너 상태 확인 오류
- 대상이 로드 밸런서에 대해 비활성화된 가용 영역에 있음
- CPU 또는 메모리의 리소스 제약
- 잘못 구성된 상태 확인 설정
- 네트워크 연결 문제
작업이 로드 밸런서 상태 확인에 실패하면 Amazon ECS 서비스 이벤트 메시지에 다음 오류 중 하나가 나타납니다.
- "(service AWS-service) (port 8080) is unhealthy in (target-group arn:aws:elasticloadbalancing:us-east-1:111111111111:targetgroup/aws-targetgroup/123456789) due to (reason Health checks failed with these codes: [5xx]/[4xx]/[3xx]) or (Request timed out)."
- "(service AWS-Service) (task eaa3ec9e9f104070b461490987654321) failed container health checks."
- "(service AWS-Service) (instance 10.122.144.145) (port 8080) is unhealthy in (target-group arn:aws:elasticloadbalancing:ap-south-1:120987654321:targetgroup/AWS-Service-TG/159c835dc9d8cf84) due to (reason Target is in an Availability Zone that is not enabled for the load balancer)."
On the Amazon ECS task console, you might also receive the error, "Task failed ELB health checks in (target-group arn:aws:elasticloadbalancing:ap-south-1:111111111111:targetgroup/aws-targetgroup/123456789)".
해결 방법
참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하면 AWS CLI의 오류 해결을 참조하십시오. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.
HTTP [5xx]/[4xx]/[3xx] 또는 (Request timed out) 오류 해결
로드 밸런서의 상태 확인 구성 확인
Elastic Load Balancing(ELB) 로드 밸런서가 200 HTTP 코드를 수신해야 하지만 3xx, 4xx 또는 5xx 오류 코드를 대신 수신할 때 이러한 오류가 발생합니다. 이에 따라 로드 밸런서는 작업을 중지하고 비정상 상태로 표시합니다. 이 문제를 해결하려면 올바른 상태 확인 경로를 구성하거나 상태 확인 설정을 수정하십시오.
Application Load Balancer의 HTTP 오류에 대한 자세한 내용은 로드 밸런서가 HTTP 오류를 생성을 참조하십시오.
Amazon ECS 작업이 시간 제한 내에 로드 밸런서 상태 확인에 응답하지 않으면 요청 시간 초과 오류가 발생합니다.
로드 밸런서가 상태 확인을 수행할 수 있는지 확인
다음 구성을 확인합니다.
- 로드 밸런서와 연결된 보안 그룹이 등록된 컨테이너 포트의 Amazon ECS 작업 탄력적 네트워크 인터페이스로의 아웃바운드 트래픽을 허용합니다.
- Amazon ECS 보안 그룹이 로드 밸런서와 연결된 보안 그룹에서 등록된 컨테이너 포트의 모든 인바운드 트래픽을 허용합니다.
시간 제한 파라미터 구성
Amazon ECS 작업의 상태 확인 응답이 느린 경우 HealthCheckGracePeriod 파라미터의 값을 높이는 것이 바람직합니다.
애플리케이션이 일반적으로 상태 확인 응답에 오래 걸리는 경우 대상 그룹의 상태 확인 시간 제한 값을 늘릴 수도 있습니다. 이 파라미터는 Amazon ECS 작업이 상태 확인에 응답하는 데 걸리는 시간을 정의합니다.
리소스 사용량 확인
애플리케이션에 데이터베이스에 대한 백엔드 연결이 필요한 경우 데이터베이스 수준에서 리소스 사용량이 많은지 확인하십시오. 리소스를 많이 사용하면 애플리케이션 초기화 프로세스 중에 문제가 발생하고 로드 밸런서 상태 확인 중에 오류가 발생할 수 있습니다.
느린 응답 문제 해결
ECS Exec을 사용하여 상태 확인 경로 및 포트에서 애플리케이션이 어떻게 응답하는지 확인할 수 있습니다. 백엔드에서 지연 없이 성공적인 응답이 오는지 확인하려면 다음 명령을 실행합니다.
curl -iv localhost:container-port/path
참고: container-port를 컨테이너가 사용하는 포트로, path를 상태 확인 경로로 바꾸십시오.
상태 확인 구성 확인
먼저 대상 그룹 상태 확인에서 구성한 경로에 파일이 있는지 확인합니다.
파일이 올바른 위치에 있지만 상태 확인에 여전히 실패하는 경우 다음 단계를 완료하십시오.
- Amazon Elastic Compute Cloud(Amazon EC2) 콘솔을 엽니다.
- 탐색 창에 있는 로드 밸런싱에서 대상 그룹을 선택합니다.
- 대상 그룹을 선택합니다.
- 상태 확인 탭을 선택하고, 편집을 선택합니다.
- 대상 그룹 편집 페이지에서 성공 코드에 오류 메시지의 HTTP 코드를 입력합니다. 예를 들어 404를 입력합니다.
- 저장을 선택합니다.
중요: 대상 그룹 프로토콜이 애플리케이션에서 지원하는 HTTP 프로토콜로 설정되어 있어야 합니다.
Amazon ECS의 리소스 제약 확인
Amazon ECS 서비스 지표에서 CPU 및 메모리 사용률을 확인합니다. CpuUtilization 또는 MemoryUtilization이 지속적으로 높으면 성능 문제가 발생하여 상태 확인이 실패할 수 있습니다.
리소스 사용량을 줄이려면 다음 작업을 수행하십시오.
- 작업 정의에 더 많은 CPU 및 메모리 리소스를 할당합니다.
- 구성을 수평적으로 스케일링하려면 실행 중인 작업의 수를 늘려 워크로드를 여러 인스턴스에 균등하게 분배하면 폭증 시 성능이 개선됩니다.
- 다양한 부하 조건에서 시스템 성능을 정기적으로 평가하면 잠재적 병목 현상을 식별하고 리소스를 더 효과적으로 할당할 수 있습니다.
- 애플리케이션의 네트워크 사용, 연결 패턴 및 응답 시간을 모니터링하면 잠재적 병목 현상을 식별하고 비효율적인 네트워크 사용 패턴을 최적화할 수 있습니다.
시스템 동작을 자주 모니터링하고 필요에 따라 구성을 조정하는 것이 바람직합니다.
컨테이너 상태 확인 실패 오류 문제 해결
작업의 ECS 컨테이너 인스턴스가 서비스에서 통과할 수 없는 상태 확인을 사용하는 경우 컨테이너 상태 확인 실패 오류가 발생합니다. 이 문제를 해결하려면 Amazon ECS 작업의 컨테이너 상태 확인 실패 문제를 해결하려면 어떻게 해야 합니까?를 참조하십시오.
대상 Amazon ECS 작업의 가용 영역 문제 해결
활성화하지 않은 가용 영역에 대상을 등록하면 등록된 대상에 트래픽이 수신되지 않습니다. 자세한 내용은 가용 영역 및 로드 밸런서 노드를 참조하십시오.
예를 들어, Amazon ECS 서브넷은 us-east-1x 및 us-east-1y 가용 영역에 속합니다. 로드 밸런서에서 us-east-1p 및 us-east-1q 가용 영역이 활성화되면 오류가 발생합니다.
로드 밸런서의 가용 영역에 대한 서브넷을 사용하도록 Amazon ECS를 업데이트하려면 update-service AWS CLI 명령을 실행합니다.
aws ecs update-service --cluster cluster-name --service service-name --region region-code --network-configuration '{"awsvpcConfiguration": {"subnets": ["subnet-1","subnet-2"],"securityGroups": ["sg-abcdxyz"]}}'
참고: cluster-name을 클러스터 이름으로, service-name을 서비스 이름으로, region-code를 AWS 리전으로 바꾸십시오. 또한 subnet-1과 subnet-2를 서브넷으로, sg-abcdxyz를 보안 그룹으로 바꾸십시오.
관련 정보
- 언어
- 한국어

