Amazon ECS에서 "CannotPullContainerError: You have reached your pull rate limit"라는 오류는 어떻게 해결하나요?

6분 분량
0

도커 허브에서 이미지를 가져오려고 할 때 다음 오류와 함께 Amazon Elastic Container Service(Amazon ECS) 작업이 실패합니다. "CannotPullContainerError: 이미지 검사를 5회 재시도했습니다. httpReaderSeeker: 열기 실패: 예기치 않은 상태 코드 https://registry-1.docker.io/v2/manifests/sha256:2bb501e6429 너무 많은 요청 - 서버 메시지: toomanyrequests: 풀 속도 한도에 도달했습니다. 인증 및 업그레이드를 통해 한도를 늘릴 수 있습니다. https://www.docker.com/increase-rate-limit"

간략한 설명

이 오류는 도커 허브 웹사이트에서 도커 풀 속도 한도에 도달한 후 도커 허브 웹사이트의 공용 도커 허브 리포지토리에서 이미지를 가져오려고 할 때 발생합니다. 속도 한도를 초과하면 HTTP 상태 코드 429가 반환됩니다. 도커 허브는 IP 주소를 사용하여 사용자를 인증하며, 풀 속도 한도는 개별 IP 주소를 기반으로 합니다. 익명 사용자의 경우 속도 한도는 IP 주소당 6시간당 100회 풀로 설정됩니다. 도커 ID가 있는 인증된 사용자의 경우 풀 속도는 6시간 주기당 200회의 풀로 설정됩니다. 이미지 풀 요청이 이러한 한도를 초과할 경우 Amazon ECS는 6시간이 경과할 때까지 이러한 요청을 거부합니다. Amazon ECS 또는 Amazon Elastic Kubernetes Service(Amazon EKS) 워크로드를 실행하는 경우 고정 IP 주소가 있는 NAT 게이트웨이를 통해 데이터를 가져옵니다. 이 경우 풀 한도를 초과하면 요청이 제한됩니다.

AWSSupport-TroubleshootECSTaskFailedToStart 런북을 사용하여 시작하지 못한 Amazon ECS 작업에 대한 오류를 해결합니다. 이 자동화는 다음 구성을 검토합니다.

  • 구성된 컨테이너 레지스트리에 대한 네트워크 연결
  • 실행 역할에 필요한 AWS Identity and Access Management(IAM) 권한 누락
  • Virtual Private Cloud(VPC) 엔드포인트 연결
  • 보안 그룹 규칙 구성
  • AWS Secrets Manager 비밀 참조
  • 로깅 구성

해결 방법

중요:

  • ECS 클러스터 리소스가 있는 동일한 AWS 리전에서 AWSSupport-TroubleshootECSTaskFailedToStart 런북을 사용합니다.
  • 런북을 사용할 때는 가장 최근에 실패한 작업 ID를 사용해야 합니다. 실패한 작업이 Amazon ECS의 일부인 경우 서비스에서 가장 최근에 실패한 작업을 사용합니다. 실패한 작업은 자동화 실행 중에 ECS:DescribeTasks에 표시되어야 합니다. 기본적으로 중지된 ECS 작업은 중지됨 상태로 전환된 후 1시간 동안 표시됩니다. 가장 최근에 실패한 작업 ID를 사용하면 작업 상태 정리가 자동화 중에 분석을 방해하지 않습니다.

참고: 런북의 출력이 권장 사항을 제공하지 않는 경우 다음 섹션의 수동 문제 해결 방법 중 하나를 사용하세요.

AWSSupport-TroubleshootECSTaskFailedToStart 런북을 실행하려면 다음을 수행합니다.

1.    AWS Systems Manager 콘솔을 엽니다.

2.    탐색 창의 변경 관리에서 자동화를 선택합니다.

3.    자동화 실행을 선택합니다.

4.    Amazon 소유 탭을 선택합니다.

5.    자동화 문서에서 TroubleshootECSTaskFailedToStart를 검색합니다.

6.    AWSSupport-TroubleshootECSTaskFailedToStart 카드를 선택합니다.
참고: 하이퍼링크된 자동화 이름이 아니라 카드의 라디오 버튼을 선택하세요.

7.    다음을 선택합니다.
참고: 실행 후 분석 결과가 글로벌 출력 섹션에 표시됩니다. 그러나 문서 상태가 성공으로 바뀔 때까지 기다리세요. 또한 출력 섹션에서 예외가 있는지 확인하세요.

8.    자동화 문서 실행에서 간단한 실행을 선택합니다.

9.    입력 파라미터 섹션에서 AutomationAssumeRole에 Systems Manager Automation이 작업을 수행하도록 허용하는 역할의 ARN을 입력합니다.
참고: AutomationAssumeRole 또는 IAM 사용자나 역할에 AWSSupport-TroubleshootECSTaskFailedToStart 런북을 실행하는 데 필요한 IAM 권한이 있는지 확인하세요. IAM 역할을 지정하지 않으면, Systems Manager Automation는 런북을 실행하는 IAM 사용자 또는 역할의 권한을 사용합니다. Systems Manager Automation에 대한 역할 가정 만들기에 관한 자세한 내용은 작업 1: 자동화를 위한 서비스 역할 생성을 참조하세요.

10.    ClusterName에 작업 시작에 실패한 클러스터 이름을 입력합니다.

11.    TaskId에 가장 최근에 실패한 작업의 ID를 입력합니다.

12.    실행을 선택합니다.

자동화 결과에 따라 다음 수동 문제 해결 단계 중 하나를 사용합니다.

Amazon ECR 프라이빗 레지스트리로 퍼블릭 이미지 복사

Amazon Elastic Container Registry(Amazon ECR) 리포지토리를 생성한 다음, 이미지를 이 새 리포지토리로 푸시합니다. Amazon ECR 리포지토리에서 이미지를 가져올 때 도커 허브 풀 한도를 초과하지 않을 수 있습니다.

1.    다음과 유사한 명령을 실행하여 도커 허브에서 이미지를 가져옵니다.

docker pull example-image

2.    다음과 유사한 명령을 실행하여 도커 클라이언트가 Amazon ECR 레지스트리에 액세스하도록 인증합니다.

aws ecr get-login-password --region eu-west-1 | docker login --username AWS --password-stdin 1111222233334444.dkr.ecr.eu-west-1.amazonaws.com

3.    리포지토리에 푸시할 이미지에 태그를 지정하려면 다음과 유사한 명령을 실행합니다.

docker tag myrepository:latest 1111222233334444.dkr.ecr.eu-west-1.amazonaws.com/myrepository:latest

4.    다음과 유사한 명령을 실행하여 도커 이미지를 Amazon ECR 레지스트리로 푸시합니다.

docker push 1111222233334444.dkr.ecr.eu-west-1.amazonaws.com/myrepository:latest

5.    다음과 유사한 명령을 실행하여 새로 푸시된 Amazon ECR 이미지를 기본 이미지로 사용하도록 도커 파일을 업데이트합니다.

FROM 1111222233334444.dkr.ecr.eu-west-1.amazonaws.com/myrepository:tag

앞의 명령에서 다음 값을 원하는 값으로 바꿉니다.

  • example-image를 푸시하려는 공개 이미지의 이름으로
  • 1111222233334444를 자신의 계정 ID로
  • example-image를 Amazon ECR 레지스트리 이름으로
  • eu-west-1을 선택한 리전으로

도커 허브 풀 인증

도커 허브로 인증하면 인증된 사용자로서 더 많은 속도 한도가 적용되며 도커 사용자 이름에 따라 속도가 제한됩니다. 도커 허브 사용자 이름과 암호를 AWS Secrets Manager에 비밀로 저장한 다음, 이 비밀을 사용하여 도커 허브에 인증합니다.

도커 허브 보안 증명에 대한 Secrets Manager 비밀 생성

도커 허브 자격 증명에 대한 암호를 생성하려면 프라이빗 레지스트리 인증 켜기에서 기본 암호를 생성하려면 섹션 아래의 지침을 사용합니다.

작업 실행 IAM 역할 업데이트

비밀에 대한 Amazon ECS 작업 액세스 권한을 부여하려면 작업 실행 역할에 대한 인라인 정책으로서 필요한 권한을 수동으로 추가합니다.

1.    IAM 콘솔을 엽니다.

2.    탐색 창에서 역할을 선택합니다.

3.    ecsTaskExecutionRole에 대한 역할 목록을 검색한 다음, 연결된 정책을 볼 역할을 선택합니다.

4.    권한 탭에서 권한 추가를 선택한 다음, 인라인 정책 생성을 선택합니다.

5.    정책 생성 페이지에서 JSON을 선택한 후, 다음 정책을 복사하여 붙여 넣습니다.

{
	"Version": "2012-10-17",
	"Statement": [{
		"Effect": "Allow",
		"Action": [
			"secretsmanager:GetSecretValue",
			"kms:Decrypt"
		],
		"Resource": [
			"arn:aws:secretsmanager:eu-west-1:1111222233334444:secret:dockerhub-0knT",
			"arn:aws:kms:eu-west-1:1111222233334444:key/mykey"
		]
	}]
}

앞의 정책에서 다음 값을 원하는 값으로 바꿉니다.

  • 1111222233334444를 자신의 계정 ID로
  • eu-west-1을 선택한 리전으로
  • mykey를 AWS KMS 키로

참고: 키가 사용자 지정 AWS Key Management Service(AWS KMS) 키를 사용하는 경우에만 kms:Decrypt를 포함하세요. 사용자 지정 키의 ARN을 리소스로 추가합니다.

6.    정책 검토를 선택합니다.

7.    이름에 정책 이름(ECSSecrets)을 입력합니다.

8.    정책 생성을 선택합니다.

도커 인증용 비밀을 사용하는 작업 정의 생성

Amazon ECS 작업 정의를 생성하려면 클래식 콘솔을 사용하여 작업 정의 생성의 지침을 따릅니다. 작업 실행 역할에서 이전 섹션에서 업데이트한 작업 실행 IAM 역할을 선택합니다.

**컨테이너 정의 ** 섹션에서 다음 단계를 완료합니다.

1.     컨테이너 추가를 선택합니다.

2.    컨테이너 이름에 컨테이너 이름을 입력합니다.

3.     이미지에 이미지 이름을 입력하거나 프라이빗 이미지의 경로를 포함합니다(예: repository-url/image.tag).

4.    프라이빗 리포지토리 인증을 선택합니다.

5.    Secrets Manager ARN 또는 이름에 생성한 시크릿의 ARN을 입력합니다.

6.    추가를 선택합니다.

Amazon ECS 클러스터 생성 및 Amazon ECS 작업 실행

Amazon ECS 클러스터를 생성합니다. 그런 다음 생성한 작업 정의를 사용하여 작업을 실행합니다.

Amazon ECR 퍼블릭 레지스트리를 공공 컨테이너 이미지에 사용

도커 파일에서 사용 중인 공공 이미지를 식별합니다. 적절한 검색 필터를 사용하여 Amazon ECR Public Gallery에서 이러한 이미지를 검색합니다. 퍼블릭 리포지토리를 탐색하고 이미지를 가져오기 위해 인증할 필요는 없습니다. Amazon ECR Public에는 운영 체제, AWS 게시 이미지, Kubernetes 추가 기능 및 아티팩트를 포함하여 널리 사용되는 기본 이미지가 포함되어 있습니다. 도커 허브의 속도 한도에 도달하지 않도록 Amazon ECR 퍼블릭 레지스트리에서 이미지를 가져옵니다.

작업 정의에서 컨테이너 이미지의 소스로 다음 이미지를 사용합니다.

ContainerDefinitions: [
 {
 ...
 Image: 'public.ecr.aws/cloudwatch-agent/cloudwatch-agent:latest'
 ...
 }
 ]

다음 이미지를 도커 파일의 기본 이미지로 사용하도록 선택할 수도 있습니다.

Docker File  
FROM public.ecr.aws/amazonlinux/amazonlinux:latest

도커 Pro 또는 Team 구독으로 업그레이드

더 많은 풀이 필요한 경우 24시간 동안 50,000회의 풀을 제공하는 도커 Pro 또는 Team 구독으로 요금제를 업그레이드합니다. 요금제에 대한 자세한 내용은 요금 및 구독 (도커 허브 웹사이트) 을 참조하십시오.

관련 정보

Amazon ECR 요금

Amazon ECR Public Service Quotas

AWS 공식
AWS 공식업데이트됨 일 년 전
댓글 없음