AWS Batch 컴퓨팅 환경의 작업이 실패하고 다음 오류가 반환됩니다. "DockerTimeoutError: Could not transition to created; timed out after waiting 4m0s." 오류를 해결하고 싶습니다.
간략한 설명
Docker 시작 및 Docker 생성 API 호출이 4분보다 오래 걸리면 AWS 배치에서 DockerTimeoutError를 반환합니다.
참고: Amazon Elastic Container Service(Amazon ECS) 컨테이너 에이전트가 설정하는 기본 시간 초과 제한은 4분입니다.
이 오류가 가장 일반적으로 발생하는 이유는 다음과 같습니다.
- AWS Batch 컴퓨팅 환경의 ECS 인스턴스 볼륨은 대기열에 있는 다른 모든 작업으로 인해 높은 I/O 부하를 받고 있습니다. 이러한 작업은 버스트 밸런스를 고갈시킬 수 있습니다.
- 중지된 ECS 컨테이너는 Docker 대몬을 비울 만큼 빠르게 정리되지 않습니다. AWS Batch가 제공하는 기본 AMI 대신 사용자 지정 Amazon Machine Image(AMI)를 사용하는 경우 Docker 문제가 발생할 수 있습니다.
이러한 문제 중 어느 것도 오류의 원인이 아닌 경우 다음 조치를 취하여 문제를 추가로 해결하세요.
해결 방법
버스트 밸런스 문제 해결
ECS 인스턴스의 버스트 밸런스 확인
참고: AWS Command Line Interface(AWS CLI) 명령 실행 시 오류가 발생하는 경우, AWS CLI 오류 문제 해결을 참고하세요. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하세요.
다음 단계를 완료합니다.
- Amazon ECS 콘솔을 엽니다.
- 탐색 창에서 클러스터를 선택합니다. 그런 다음 작업이 포함된 클러스터를 선택합니다.
참고: 클러스터의 이름은 컴퓨팅 환경의 이름으로 시작하여 _Batch_와 숫자와 문자의 임의 해시입니다.
- 인프라 탭을 선택합니다.
- 인프라 열의 컨테이너 인스턴스 행 아래에서 인스턴스 ID를 선택합니다.
참고: 실패한 작업의 인스턴스 ID를 찾으려면 AWS Batch describe-jobs AWS CLI 명령을 실행하세요. 인스턴스 ID는 containerInstanceArn에 대한 출력에 나타납니다.
- Amazon EC2 콘솔에서 인스턴스가 여전히 선택되어 있는지 확인합니다. 그런 다음 스토리지 섹션에서 volumeID에 대한 링크를 선택합니다.
- 블록 디바이스 팝업 창에서 볼륨 ID를 입력한 후 볼륨을 선택합니다.
- 모니터링 탭을 선택합니다. 그런 다음 버스트 밸런스를 선택하여 버스트 밸런스 지표를 확인하세요. 버스트 밸런스가 0으로 떨어지면 버스트 밸런스가 고갈됩니다.
관리형 컴퓨팅 환경을 위한 시작 템플릿 생성
참고: 시작 템플릿을 변경하는 경우 새 컴퓨팅 환경을 만들어야 합니다.
다음 단계를 완료합니다.
- Amazon EC2 콘솔을 연 다음 시작 템플릿을 선택합니다.
- 시작 템플릿 생성을 선택합니다.
- AMI ID의 경우 기본 Amazon ECS 최적화 AMI를 선택합니다.
- 스토리지(볼륨) 섹션의 볼륨 유형 열에서 볼륨 유형을 선택합니다. 그런 다음 크기(GiB) 열에 정수 값을 입력합니다.
참고: 볼륨 유형으로 프로비저닝된 IOPS SSD(io1)를 선택한 경우, IOPS에 허용되는 정수 값을 입력하세요.
- 시작 템플릿 생성을 선택합니다.
- 새 시작 템플릿을 사용하여 새로운 관리형 컴퓨팅 환경을 생성하세요.
AMI를 사용하여 AWS 배치 컴퓨팅 환경 생성
참고: AMI를 변경하는 경우 AMI ID 파라미터를 업데이트할 수 없으므로 새 컴퓨팅 환경을 생성해야 합니다.
다음 단계를 완료합니다.
- Amazon EC2 콘솔을 엽니다.
- 인스턴스 시작을 선택하세요.
- 설치 마법사의 단계에 따라 인스턴스를 생성합니다.
중요: 스토리지 추가 페이지에서 인스턴스의 볼륨 유형 또는 크기를 수정합니다. 볼륨 크기가 클수록 기준 성능은 높아지고 버스트 밸런스 보충 속도는 느려집니다. 높은 I/O 로드에서 더 나은 성능을 얻으려면 볼륨을 io1 유형으로 변경하세요.
- 인스턴스에서 컴퓨팅 리소스 AMI를 생성합니다.
- AMI ID가 포함된 AWS Batch용 컴퓨팅 환경을 생성합니다.
Docker 문제 해결
기본적으로 Amazon ECS 컨테이너 에이전트는 중지된 작업과 컨테이너 인스턴스가 사용하지 않는 Docker 이미지를 자동으로 정리합니다. 새 이미지로 새 작업을 실행하면 컨테이너 스토리지가 사용하지 않는 Docker 이미지로 채워질 수 있습니다. AWS Batch용 기본 AMI는 Amazon ECS 정리 설정을 최적화합니다.
다음 단계를 완료합니다.
- SSH를 사용하여 AWS Batch 컴퓨팅 환경의 컨테이너 인스턴스에 연결합니다.
- Amazon ECS 컨테이너 에이전트를 검사하려면 inspect ecs-agent Docker 명령을 실행합니다. 그런 다음 출력에서 env 섹션을 검토합니다.
**참고:**작업 및 이미지 정리 속도를 높이려면 다음 변수의 값을 줄이세요.
ECS_ENGINE_TASK_CLEANUP_WAIT_DURATION
ECS_IMAGE_CLEANUP_INTERVAL
ECS_IMAGE_MINIMUM_CLEANUP_AGE
ECS_NUM_IMAGES_DELETE_PER_CYCLE
자동 작업 및 이미지 정리를 위해 조정 가능한 파라미터를 사용할 수도 있습니다.
- 업데이트된 값으로 새 AMI를 생성합니다.
-또는-
새 환경 변수가 포함된 사용자 데이터를 사용하여 시작 템플릿을 생성합니다.
업데이트된 값으로 새 AMI 생성
다음 단계를 완료합니다.
- /etc/ecs/ecs.config 파일에서 에이전트 구성 파라미터를 설정합니다.
- 컨테이너 에이전트를 다시 시작합니다.
- 인스턴스에서 컴퓨팅 리소스 AMI를 생성합니다.
- AMI ID가 포함된 AWS Batch용 컴퓨팅 환경을 생성하세요.
새 환경 변수가 포함된 사용자 데이터를 사용하여 시작 템플릿 생성
다음 단계를 완료합니다.
-
사용자 데이터를 사용하여 시작 템플릿 생성.
예를 들어, 다음 MIME 멀티 파일의 사용자 데이터는 컴퓨팅 리소스에 대한 기본 Docker 이미지 정리 설정을 재정의합니다.
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="==MYBOUNDARY=="
--==MYBOUNDARY==
Content-Type: text/x-shellscript; charset="us-ascii"
#!/bin/bash
echo ECS_IMAGE_CLEANUP_INTERVAL=60m >> /etc/ecs/ecs.config
echo ECS_IMAGE_MINIMUM_CLEANUP_AGE=60m >> /etc/ecs/ecs.config
--==MYBOUNDARY==--
MIME 멀티파트 파일에 대한 자세한 내용을 알아보려면 cloud-init 웹 사이트의 MIME 멀티파트 파일을 참조하세요.
-
새 시작 템플릿을 사용하여 관리형 컴퓨팅 환경을 만드세요.
관련 정보
CloudWatch 지표를 게시하는 AWS 서비스
컴퓨팅 리소스 AMI
GitHub 웹사이트의 amazon-ecs-agent