Amazon Elastic Container Service(Amazon ECS) 작업이 컨테이너 상태 확인에 실패했습니다. 이 문제를 해결하려면 어떻게 해야 하나요?
간략한 설명
다음 오류가 발생하면 작업의 Amazon ECS 컨테이너가 서비스에서 통과할 수 없는 상태 확인을 사용하고 있는 것입니다.
(service AWS-Service) (task ff3e71a4-d7e5-428b-9232-2345657889) failed container health checks
참고: 탄력적 로드 밸런싱(ELB) 상태 확인 문제가 발생하는 경우 Amazon ECS에서 Application Load Balancer 상태 확인을 통과하기 위해 Amazon ECS 작업을 실행하려면 어떻게 해야 합니까? 단원을 참조하세요.
해결 방법
Amazon ECS 컨테이너 상태 확인 실패 문제를 해결하려면 다음 팁을 시도해 보십시오.
- Amazon ECS에 프로비저닝하기 전 컨테이너를 로컬에서 테스트하여 컨테이너 상태 확인 통과 여부를 확인합니다.
- 컨테이너에 전달하는 명령이 올바른지, Amazon ECS 작업에 올바른 구문을 사용하는지 여부를 확인합니다.
- 컨테이너에 인스턴스화할 충분한 시간이 있는지 확인합니다.
- Amazon ECS 작업이 잠시 실행 중인지 애플리케이션 로그와 Amazon CloudWatch Logs를 확인합니다.
컨테이너를 로컬에서 테스트하여 컨테이너 상태 확인 통과 여부를 확인합니다.
컨테이너를 Amazon ECS에 프로비저닝하기 전 컨테이너가 예상대로 작동하는지 확인하고, 지정된 컨테이너 상태 확인을 통과해야 합니다. Docker 웹 사이트에서 Dockerfile HEALTHCHECK 구성을 사용하여 컨테이너를 테스트할 수 있습니다. 컨테이너가 Dockerfile에 정의된 상태 확인을 통과한 다음에 작업 정의에서 상태 확인 구성을 지정할 수 있습니다. 상태 확인 구성을 지정하면 Amazon ECS 컨테이너 에이전트가 지정 상태 확인을 모니터링 및 보고할 수 있습니다.
참고: Amazon ECS는 컨테이너 이미지에 내장되어 있고, 컨테이너 정의에서 지정하지 않은 Docker 상태 확인을 모니터링하지 않습니다. 컨테이너 정의에서 지정한 상태 확인 파라미터는 컨테이너 이미지에 있는 모든 Docker 상태 확인보다 우선합니다.
Amazon ECS 작업에 대한 올바른 구문 사용 여부를 확인합니다.
Amazon ECS 작업에 대한 올바른 명령과 구문 사용 여부를 확인합니다.
예를 들어 AWS 관리 콘솔 JSON 패널, AWS Command Line Interface(AWS CLI) 또는 API를 사용하는 경우, 다음과 같이 명령 목록을 대괄호로 묶습니다.
["CMD-SHELL", "curl -f http://localhost/ || exit 1"]
AWS 관리 콘솔을 사용하여 ECS 작업을 편집하는 경우 괄호를 포함할 필요가 없습니다.
"CMD-SHELL", "curl -f http://localhost/ || exit 1"
또한 상태 확인 명령을 큰따옴표로 구분하지 않아야 합니다 (예: ["CMD-SHELL", "healthcheck.sh", "||", "exit 1"]). 대신 다음 명령 구문을 사용합니다.
["CMD-SHELL", "healthcheck.sh || exit 1"]
컨테이너에 인스턴스화할 충분한 시간이 있는지 확인
컨테이너를 시작하는 데 시간이 걸리면 컨테이너가 컨테이너 상태 확인에 실패할 수 있습니다. startPeriod를 어드밴스드 컨테이너 정의 파라미터를 설정해 보십시오. 이렇게 하면 실패한 상태 확인이 최대 재시도 횟수에 포함되기 전에 Amazon ECS 컨테이너가 부트스트랩할 시간을 충분히 확보할 수 있습니다.
작업이 잠시 실행 중인지 애플리케이션 로그와 Amazon CloudWatch Logs 확인
Amazon ECS 컨테이너를 한동안 실행했고 컨테이너 상태 확인에 실패했다면 애플리케이션 로그를 확인하십시오. Amazon ECS 작업에서 awslogs 로그 드라이버를 사용하는 경우 Amazon CloudWatch에서 애플리케이션 로그를 확인하십시오.
참고: AWS Fargate는 관리형 서비스입니다. 따라서 기본 인프라에 액세스할 수 없습니다. 문제를 해결하려면 Amazon Elastic Compute Cloud(Amazon EC2)에서 Amazon ECS 작업을 시작하십시오. 그런 다음 SSH를 사용하여 Amazon EC2 인스턴스에 연결합니다. Amazon ECS Exec을 사용하여 ECS 컨테이너와 직접 상호 작용할 수도 있습니다.