AWS CodeBuild에서 도커 이미지를 사용할 때 “error pulling image configuration: toomanyrequests” 오류를 해결하려면 어떻게 합니까?

최종 업데이트 날짜: 2021년 8월 4일

AWS CodeBuild에서 도커 이미지를 사용할 때 발생하는 “error pulling image configuration: toomanyrequests” 오류를 해결하고 싶습니다.

간략한 설명

CodeBuild에서 Docker 이미지를 사용하는 경우 퍼블릭 DockerHub 리포지토리에서 계층을 가져올 때 스로틀을 경험할 수 있습니다.

스로틀이 발생할 때 일어나는 오류를 해결하려면 DockerHub 계정 자격 증명을 사용하여 계층 풀링을 인증하도록 CodeBuild를 구성해야 합니다.

중요: 다음 단계를 완료하려면 DockerHub 계정과 계정의 사용자 이름 및 암호가 있어야 합니다.

해결 방법

AWS Secrets Manager를 사용하여 DockerHub 자격 증명 저장

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

2.    [새로운 보안 정보 저장(Store a new secret)]을 선택합니다.

3.    [보안 정보 유형 선택(Select secret typ)] 섹션에서 [기타 보안 정보 유형(Other type of secrets)]을 선택합니다.

4.    [이 보안 정보에 저장할 키/값 페어 지정(Specify the key/value pairs to be stored in this secret)] 섹션에서 [보안 정보 키/값(Secret key/value)] 탭을 선택합니다.

5.    첫 번째 텍스트 상자에 username을 입력합니다. 두 번째 텍스트 상자에 DockerHub 사용자 이름을 입력합니다. 그런 다음 [행 추가(Add row)]를 선택합니다.

6.    새 행의 첫 번째 텍스트 상자에 [암호(password)]를 입력합니다. 두 번째 텍스트 상자에 DockerHub 암호를 입력합니다. 그런 다음 [행 추가(Add row)]를 선택합니다.

7.    [다음]을 선택합니다.

8.    [보안 정보 이름(Secret name)]에 보안 정보의 이름을 입력합니다. 예: dockerhub

9.    [Next]를 선택합니다.

10.    [자동 교체 비활성화(Disable automatic rotation)]에 기본 설정이 선택되어 있는지 확인합니다.

11.    [다음]을 선택합니다.

12.    [스토어(Store)]를 선택합니다.

13.    [보안 정보 이름(Secret name)] 열에서 보안 정보를 선택합니다.

14.    보안 정보 세부 정보(Secret details) 섹션에서 보안 정보 ARN(Secret ARN)에 대한 Amazon 리소스 이름(ARN)을 확인합니다.

프로비저닝 단계에서 발생하는 스로틀 문제 해결

1.    CodeBuild 콘솔을 엽니다.

2.    탐색 창에서 [빌드(Build)]를 선택한 다음 [빌드 프로젝트(Build projects)]를 선택합니다.

3.    [빌드 프로젝트(build project)]를 선택합니다.

4.    [편집(Edit)]을 선택한 다음 [환경(Environment)]을 선택합니다.

5.    [이미지 재지정(Override image)]을 선택합니다.

6.    [새 환경 이미지(New environment image)]에 대해 [사용자 지정 이미지(Custom image)]를 선택합니다.

7.    [환경 유형(Environment type)]에서 사용자 지정 이미지를 선택합니다.

8.    [이미지 레지스트리(Image registry)]에 대해 [기타 레지스트리(Other registry)]를 선택합니다.

9.    [외부 레지스트리 URL(External registry URL)]에 Docker 이미지의 이름을 입력합니다.

10.    [레지스트리 자격 증명(Registry credential)]에 앞서 언급한 보안 정보 ARN을 입력합니다.

11.    [환경 업데이트(Update environment)]를 선택합니다.

다른 단계에서 발생하는 스로틀 문제 해결

중요: 보안 정보에 액세스하려면 CodeBuild 서비스 역할에 AWS Identity and Access Management(IAM) 권한을 부여해야 합니다.

1.    CodeBuild 콘솔을 엽니다.

2.    탐색 창에서 [빌드(Build)]를 선택한 다음 [빌드 프로젝트(Build projects)]를 선택합니다.

3.    [빌드 프로젝트(build project)]를 선택합니다.

4.    [빌드 세부 정보(Build details)] 탭을 선택합니다.

5.    [환경(Environment)] 섹션에서 [서비스 역할(Service role)]에 ARN의 서비스 역할을 선택합니다. 그러면 IAM 콘솔이 열립니다.

6.    [권한(Permissions)] 탭에서 [인라인 정책 추가(Add inline policy)]를 선택합니다.

7.    [JSON] 탭을 선택합니다.

8.    텍스트 편집기의 코드를 다음 IAM 정책으로 바꿉니다.

중요: YOUR_SECRET_ARN을 앞에서 설명한 보안 정보 ARN으로 바꿉니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetSecretValue"
            ],
            "Resource": [
                "YOUR_SECRET_ARN*"
            ]
        }
    ]
}

9.    [정책 검토(Review policy)]를 선택합니다.

10.    이름(Name)에 정책 이름을 입력합니다. 예: dockerhub_secret_access 참고: 정책의 이름을 선택할 수 있습니다. 이 이름은 사용자 본인이 나중에 참조할 수 있는 용도로만 사용됩니다.

11.    [정책 생성(Create policy)]을 선택합니다.

보안 정보를 검색하도록 CodeBuild 구성

1.    CodeBuild 콘솔을 엽니다.

2.    탐색 창에서 [빌드(Build)]를 선택한 다음 [빌드 프로젝트(Build projects)]를 선택합니다.

3.    [빌드 프로젝트(build project)]를 선택합니다.

4.    [편집(Edit)]을 선택한 다음 [환경(Environment)]을 선택합니다.

5.    [추가 구성(Additional configuration)] 섹션을 확장합니다.

6.    환경 변수를 추가하려면 [환경(Environment)] 변수 섹션에서 [이름(Name)]에 dockerhub_username을 입력합니다.

7.    [값(Value)]에 보안 정보의 이름을 입력하고 그 다음에는 :username을 입력합니다. 예: dockerhub:username

8.    [유형(Type)]에 대해 [Secrets Manager]를 선택합니다.

9.    다음 환경 변수를 추가하려면 [환경 변수 추가(Add environment variable)]를 선택합니다.

10.    [이름(Name)]에 dockerhub_password를 입력합니다.

11.    [값(Value)]에 보안 정보의 이름을 입력하고 그 다음에는 :password를 입력합니다. 예: dockerhub:password

12.    [유형(Type)]에 대해 [Secrets Manager]를 선택합니다.

13.    [환경 업데이트(Update environment)]를 선택합니다.

14.    다른 Docker 작업을 수행하기 전에 buildspec을 수정하고 다음 명령을 추가합니다.

echo "${DOCKERHUB_PASSWORD}" | docker login -u "${DOCKERHUB_USERNAME}" --password-stdin

예를 들면 다음과 같습니다.

version: 0.2

phases:
  install:
    commands:
      - echo "${DOCKERHUB_PASSWORD}" | docker login -u "${DOCKERHUB_USERNAME}" --password-stdin

  build:
    commands:
      - docker pull docker:dind

이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요하세요?