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

4분 분량
0

AWS Batch 컴퓨팅 환경에서 작업이 실패하고 ‘DockerTimeoutError: 생성 항목으로 전환할 수 없음 대기 후 제한 시간 초과 4m0s’ 오류를 반환합니다. AWS Batch에서 ‘DockerTimeoutError’ 오류를 해결하려면 어떻게 해야 합니까?

간략한 설명

docker startdocker create API 호출이 4분 넘게 걸리면 AWS Batch는 DockerTimeoutError 오류를 반환합니다.

참고: Amazon Elastic Container Service(Amazon ECS) 컨테이너 에이전트에서 설정한 기본 제한 시간 한도는 4분입니다.

이 오류는 여러 가지 이유로 발생할 수 있지만, 일반적으로 다음 중 하나로 인해 발생합니다.

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

이러한 문제 중 어느 것도 오류의 원인이 아니면 추가적으로 다음을 수행하여 문제를 해결할 수 있습니다.

해결 방법

버스트 밸런스 문제 해결

ECS 인스턴스의 버스트 밸런스 확인

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

2.    탐색 창에서 **클러스터(Clusters)**를 선택합니다. 그런 다음, 작업이 포함된 클러스터를 선택합니다.

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

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

4.    EC2 인스턴스(EC2 Instance) 열에서 인스턴스를 선택합니다.

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

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

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

7.    모니터링(Monitoring) 탭을 선택합니다. 그런 다음, **버스트 밸런스(Burst Balance)**를 선택하여 버스트 밸런스 지표를 확인합니다. 버스트 밸런스가 0으로 떨어지면 버스트 밸런스가 소진된 것입니다.

관리형 컴퓨팅 환경에 대한 시작 템플릿 생성

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

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

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

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

4.    스토리지(볼륨)(Storage (Volumes)) 섹션의 볼륨 유형(Volume type) 열에서 볼륨 유형을 선택합니다. 그런 다음, 크기(GiB)(Size(GiB)) 열에 정수 값을 입력합니다.

참고: 볼륨 유형으로 프로비저닝된 IOPS SSD(io1)(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에 대한 컴퓨팅 환경을 생성합니다.

Docker 문제 해결

기본적으로 Amazon ECS 컨테이너 에이전트는 중지된 태스크와 컨테이너 인스턴스가 사용하지 않는 Docker 이미지를 자동으로 정리합니다. 새 이미지를 포함한 새 작업을 실행하면 컨테이너 스토리지가 사용자가 사용하지 않는 Docker 이미지로 가득 찰 수 있습니다.

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

2.    Amazon ECS 컨테이너 에이전트를 검사하려면 Docker 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 멀티파트 파일의 사용자 데이터는 컴퓨팅 리소스의 기본 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==--

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


관련 정보

CloudWatch 지표를 게시하는 AWS 서비스

컴퓨팅 리소스 AMI

amazon-ecs-agent(AWS GitHub)

AWS 공식
AWS 공식업데이트됨 2년 전