AWS Batch에서 "DockerTimeoutError" 오류를 해결하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2019년 7월 19일

AWS Batch 컴퓨팅 환경에서 "DockerTimeoutError: Could not transition to created; timed out after waiting 4m0s" 오류로 인해 작업에 실패합니다. 이 오류를 해결하려면 어떻게 해야 합니까?

간략한 설명

docker startdocker create 호출에 4분 넘게 걸리면 이 오류가 발생합니다. Amazon Elastic Container Service(Amazon ECS) 컨테이너 에이전트에서 설정한 기본 제한 시간 한도는 4분입니다.

이 오류는 다음 문제로 인해 발생할 수 있습니다.

  • AWS Batch 컴퓨팅 환경의 ECS 인스턴스 볼륨은 대기열에 있는 다른 모든 작업의 높은 I/O 압력의 영향을 받을 수 있습니다. ECS 인스턴스에서 생성되어 실행되는 이러한 작업은 버스트 잔고를 소진할 수 있습니다. 이 문제를 해결하려면 버스트 잔고 문제 해결 섹션의 단계를 수행합니다.
  • 중지된 Amazon ECS 컨테이너가 빨리 정리되지 않아서 도커 데먼을 해제할 수 없습니다. AWS Batch에서 제공하는 기본 AMI 대신 사용자 지정된 AMI를 사용하는 경우 도커 문제가 발생할 수 있습니다. AWS Batch의 기본 AMI는 Amazon ECS 정리 설정을 최적화합니다. 이 문제를 해결하려면 도커 문제 해결 섹션의 단계를 수행합니다.

이러한 문제가 오류 원인이 아닌 경우 다음을 시도합니다.

해결 방법

버스트 잔고 문제 해결

ECS 인스턴스의 버스트 잔고를 확인하려면 다음을 수행합니다.

1.    Amazon ECS 콘솔을 여십시오.

2.    탐색 창에서 [클러스터]를 선택하고 작업이 포함된 클러스터를 선택합니다.

참고: 클러스터의 이름은 컴퓨팅 환경의 이름으로 시작하며 그 뒤에_Batch_와 숫자 및 문자의 랜덤 해시가 붙습니다.

3.    [ECS 인스턴스] 탭을 선택합니다.

4.    [EC2 인스턴스] 열에서 인스턴스를 선택합니다.

참고: 실패한 작업의 인스턴스 ID를 찾으려면 aws batch describe-jobs –jobs awsExampleJobID 명령을 실행합니다. 인스턴스 ID가 containerInstanceArn 출력에 표시됩니다.

5.    Amazon EC2 콘솔의 [설명] 탭에 있는 [블록 디바이스]에서 볼륨에 대한 링크를 선택합니다.

6.    블록 디바이스 팝업 창의 [EBS ID]에서 볼륨을 선택합니다.

7.    [모니터링] 탭을 선택하고 [버스트 잔고]를 선택하여 버스트 잔고 지표를 확인합니다.

참고: 버스트 잔고가 0으로 떨어지면 버스트 잔고가 소진된 것입니다.

관리형 컴퓨팅 환경에 대한 시작 템플릿을 생성하려면 다음을 수행합니다.

참고: 시작 템플릿을 변경하면 새 컴퓨팅 환경을 생성해야 합니다.

1.    Amazon EC2 콘솔을 열고 [시작 템플릿]을 선택합니다.

2.    [Create launch template]을 선택합니다.

3.    [AMI ID]에서 기본 Amazon ECS 최적화 AMI를 선택합니다.

4.    [Storage (Volumes)] 섹션의 [Volume type] 열에서 볼륨 유형을 선택하고 [Size(GiB)] 열에 정수 값을 입력합니다.

참고: 볼륨 유형으로 [Provisioned IOPS SSD (io1)]를 선택하는 경우 IOPS에 대해 허용되는 정수 값을 입력합니다.

5.    [Create launch template]을 선택합니다.

6.    새 시작 템플릿을 사용하여 새로운 관리형 컴퓨팅 환경을 생성합니다.

사용자의 AMI로 AWS Batch 컴퓨팅 환경을 생성하려면 다음을 수행합니다.

참고: AMI를 변경하는 경우 새 컴퓨팅 환경을 생성해야 합니다. AMI ID 파라미터는 업데이트할 수 없기 때문입니다.

1.    Amazon EC2 콘솔을 엽니다.

2.    [인스턴스 시작]을 선택합니다.

3.    설정 마법사의 단계에 따라 인스턴스를 생성합니다.

중요: [스토리지 추가] 페이지에서 볼륨 유형 또는 인스턴스의 크기를 수정합니다. 볼륨 크기가 클수록 기준 성능이 높아지고 버스트 잔고를 보충하는 속도도 느립니다. I/O 로드가 높은 경우 더 나은 성능을 얻으려면 볼륨을 io1 유형으로 변경합니다.

4.    인스턴스에서 컴퓨팅 리소스 AMI를 생성합니다.

5.    AMI ID를 포함하는 AWS Batch에 대한 컴퓨팅 환경을 생성합니다.

도커 문제 해결

기본적으로 Amazon ECS 컨테이너 에이전트는 중지된 작업과 컨테이너 인스턴스의 작업에서 사용하지 않는 도커 이미지를 자동으로 정리합니다. 새 이미지를 포함하는 새 추가 작업이 실행되면 컨테이너 인스턴스 스토리지는 더 이상 사용하지 않는 도커 이미지로 빠르게 채워질 수 있습니다.

1.    AWS Batch 컴퓨팅 환경에 대해 SSH를 사용하여 컨테이너 인스턴스에 연결합니다.

2.    Amazon ECS 컨테이너 에이전트를 검사하려면 도커 inspect ecs-agent 명령을 실행하고 출력에서 env 섹션을 확인합니다.

참고: ECS_ENGINE_TASK_CLEANUP_WAIT_DURATION, ECS_IMAGE_CLEANUP_INTERVAL, ECS_IMAGE_MINIMUM_CLEANUP_AGE 및 ECS_NUM_IMAGES_DELETE_PER_CYCLE과 같은 변수의 값을 줄이면 작업 속도 및 이미지 정리 속도를 가속화할 수 있습니다. 또한 자동화된 작업 및 이미지 정리에 대한 조정 가능한 파라미터를 사용할 수 있습니다.

3.    업데이트된 값으로 새 AMI를 생성하거나 새 환경 변수를 포함하는 사용자 데이터로 시작 템플릿을 생성합니다.

새 AMI를 생성하려면 다음을 수행합니다.

1.    /etc/ecs/ecs.config 파일에서 에이전트 구성 파라미터를 설정합니다.

2.    컨테이너 에이전트를 다시 시작합니다.

3.    인스턴스에서 컴퓨팅 리소스 AMI를 생성합니다.

4.    AMI ID를 포함하는 AWS Batch에 대한 컴퓨팅 환경을 생성합니다.

시작 템플릿을 생성하려면 다음을 수행합니다.

1.    사용자 데이터를 사용하여 시작 템플릿을 생성합니다.

예를 들어, 다음 MIME 멀티파트 파일의 사용자 데이터는 컴퓨팅 리소스의 기본 도커 이미지 정리 설정을 재정의합니다.

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==--

2.    새 시작 템플릿을 사용하여 관리형 컴퓨팅 환경을 생성합니다.


이 문서가 도움이 되었습니까?

AWS에서 개선해야 할 부분이 있습니까?


도움이 필요하십니까?