안녕하세요.

베스핀글로벌 기술지원팀 이주원 입니다.



AWS Batch 서비스는 서버리스 환경으로 원하는 컴퓨팅 환경에서 작업 명령을 스케쥴링 할 수 있습니다.


일반적인 Batch 작업과 같이 원하는 작업을 정의하고 컴퓨팅 환경을 구성하여 작업을 수행합니다.

이러한 작업정의는 AWS Batch 서비스에서도 생성할 수 있지만 Amazon ECS 서비스에서도 동일하게 작업을 정의할 수 있습니다.



( ↑ AWS Batch 서비스에서 작업 정의 생성 화면 )



( ↑ Amazon ECS 서비스에서 작업 정의 화면 )



이와 같은 이유는 AWS의 Batch 작업이 컨테이너 기반으로 이미지를 가져와 해당 이미지에서 작업을 수행하기 때문에 아마존의 컨테이너 서비스인 ECS에서 클러스터를 구성한 후에 동일하게 컨테이너 기반의 작업을 수행할 수 있는 것입니다.






오늘은 AWS Batch에서 정의된 작업 수행 시 발생하는 오류 중 A 고객사의 Pull rate limit 이슈에 대해 다루고자 합니다.


Q.


고객사 환경에서 Batch 작업에 대해 Failed 가 발생하였고, 해당 실패 사유를 보니 아래와 같은 에러메세지를 확인할 수 있었습니다.


CannotPullContainerError: inspect image has been retried 5 time(s): httpReaderSeeker: failed open: unexpected status code https://registry-1.docker.io/v2/amazon/aws-cli/… :  429 Too Many Requests - Server message: toomanyrequests: You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limit



에러메세지에서 보이듯 너무 많은 요청으로 인해 pull rate에 대한 limit을 초과했고 증가 시키기 위한 방법 또한 제시하고 있습니다.


이런 이슈가 발생하는 이유는 컨테이너 구성 시 이미지를 별도 리포지토리에서 가져오지 않을 시 기본적으로 Docker Hub 레지스트리에서 가져오기 때문입니다.

이럴경우 Docker Hub는 인증되지 않은 무료 고객일 경우 Pull rate limit을 통해 제한을 두고 있습니다.




A.


이러한 이슈를 피하기 위해서는 아래와 같이 Docker Hub 레지스트리가 아닌 별도의 이미지를 사용하는 방법이 있습니다.




1. Amazon 에서 제공하는 ECR Public Gallery를 사용하여 배포되어있는 이미지를 사용






기존 Docker Hub 레지스트리의 amazon/aws-cli 이미지를 가져오는 것이 아닌 AWS Public Gallery 의 bitnami/aws-cli 이미지를 가져오기 때문에 Docker Hub 의 Pull rate limit 을 피할 수 있습니다.




2. ECR 리포지토리 생성 후 이미지를 푸시하여 해당 이미지 태그를 사용


    1) Amazon ECR - 리포지토리 생성

    2) 이미지 Push

        [ 참고 https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html

    3) AWS Batch - 작업 정의 - 컨테이너속성 - 이미지 에 해당 푸시된 이미지 태그 사용 (ex. repository-url/image:)

        [ 참고 https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-pull-ecr-image.html ]


두 번째 방법도 같은 개념으로 리포지토리의 미리 이미지를 Push 한 후 해당 이미지를 Pull 하기 때문에 Docker Hub 에서 이미지를 가져오는 작업을 피할 수 있습니다.


위 두가지 방법 외에도 Docker Hub에 유료고객으로 가입하면 무료고객보다 상향된 Pull rate를 사용할 수 있습니다. 가입 후엔 인증 절차를 거친 후 Docker Hub의 이미지를 사용합니다.

자세한 방법은 아래 문서를 참고하시기 바랍니다.


[ Docker Hub Pull rate limit 관련 내용 : https://docs.docker.com/docker-hub/download-rate-limit/ ]

[ AWS ECS Fargate의 프라이빗 레지스트리 인증 : https://docs.aws.amazon.com/ko_kr/AmazonECS/latest/developerguide/private-auth.html ]


오늘 소개해드린 글을 통해 AWS Batch 작업 시 기본 레지스트리인 Docker Hub 의 Pull rate limit 에 대해 알아보고 이슈 발생 시 해결 방법을 살펴봤습니다.


도움이 되셨기를 바랍니다.



감사합니다.


베스핀클라우드 기술지원팀

이주원