AWS CodeBuild에서 도커 이미지를 사용할 때 발생하는 “이미지 구성을 가져오는 중 오류 발생: 요청이 너무 많음” 오류를 해결하고 싶습니다.
간략한 설명
CodeBuild에서 도커 이미지를 사용하는 경우 공용 DockerHub 리포지토리에서 레이어를 가져올 때 제한이 생길 수 있습니다.
제한이 때문에 발생하는 오류를 해결하려면 DockerHub 계정 보안 인증 정보를 사용해 레이어 풀을 인증하도록 CodeBuild를 구성해야 합니다.
중요: 다음 단계를 완료하려면 DockerHub 계정 및 계정 사용자 이름과 암호가 있어야 합니다.
해결 방법
AWS Secrets Manager로 DockerHub 보안 인증 정보 저장
-
AWS Secrets Manager 콘솔을 엽니다.
-
새 비밀 저장을 선택합니다.
-
비밀 유형 선택 섹션에서 기타 유형 비밀을 선택합니다.
-
이 비밀에 저장할 키/값 쌍 지정 섹션에서 비밀 키/값 탭을 선택합니다.
-
첫 번째 텍스트 상자에 사용자 이름을 입력합니다. 두 번째 텍스트 상자에 DockerHub 사용자 이름을 입력합니다. 그 후 행 추가를 선택합니다.
-
새 행의 첫 번째 텍스트 상자에 암호를 입력합니다. 두 번째 텍스트 상자에 DockerHub 암호를 입력합니다. 그 후 행 추가를 선택합니다.
-
다음을 선택합니다.
-
비밀 이름에 비밀 이름을 입력합니다. 예: dockerhub
-
다음을 선택합니다.
-
자동 회전 비활성화가 기본 설정으로 선택되어 있는지 확인합니다.
-
다음을 선택합니다.
-
스토어를 선택합니다.
-
비밀 이름 열에서 내 비밀을 선택합니다.
-
비밀 세부 정보 섹션에서 비밀 ARN에 대한 Amazon 리소스 이름(ARN)을 기록해 둡니다.
참고: 고객 관리 암호화 키로 구성된 비밀을 만든 경우, 구성된 키를 사용해 kms:Decrypt 작업에 권한을 추가해야 합니다.
프로비저닝 단계에서 발생하는 제한 문제 해결
-
CodeBuild 콘솔을 엽니다.
-
탐색 창에서 빌드를 선택하고 빌드 프로젝트를 선택합니다.
-
내 빌드 프로젝트를 선택합니다.
-
편집을 클릭한 후 환경을 선택합니다.
-
이미지 재정의를 선택합니다.
-
새 환경 이미지에서 사용자 지정 이미지를 선택합니다.
-
환경 유형에서 사용자 지정 이미지를 선택합니다.
-
이미지 레지스트리에서 기타 레지스트리를 선택합니다.
-
외부 레지스트리 URL에는 도커 이미지 이름을 입력합니다.
-
레지스트리 보안 인증 정보에는 앞서 기록해 둔 비밀 ARN을 입력합니다.
-
환경 업데이트를 선택합니다.
다른 단계에서 발생하는 제한 문제 해결
중요: 비밀에 액세스하려면 CodeBuild 서비스 역할에 AWS ID 및 액세스 관리(IAM) 권한을 부여해야 합니다.
-
CodeBuild 콘솔을 엽니다.
-
탐색 창에서 빌드를 선택하고 빌드 프로젝트를 선택합니다.
-
내 빌드 프로젝트를 선택합니다.
-
빌드 세부 정보 탭을 선택합니다.
-
환경 섹션의 서비스 역할에서 서비스 역할 ARN을 선택합니다. 그러면 IAM 콘솔이 열립니다.
-
권한 탭에서 인라인 정책 추가를 선택합니다.
-
JSON 탭을 선택합니다.
-
텍스트 편집기의 코드를 다음 IAM 정책으로 대체합니다.
참고: YOUR_SECRET_ARN을 기록해 둔 비밀 ARN으로 바꾸세요.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"secretsmanager:GetSecretValue"
],
"Resource": [
"YOUR_SECRET_ARN*"
]
}
]
}
-
정책 검토를 선택합니다.
-
이름에 정책 이름을 입력합니다. 예: dockerhub_secret_access 참고: 정책 이름은 원하는 대로 정할 수 있습니다. 이 이름은 나중에 참조할 용도로만 사용됩니다.
-
정책 생성을 선택합니다.
비밀을 찾을 수 있도록 CodeBuild 구성
-
CodeBuild 콘솔을 엽니다.
-
탐색 창에서 빌드를 선택하고 빌드 프로젝트를 선택합니다.
-
내 빌드 프로젝트를 선택합니다.
-
편집을 클릭한 후 환경을 선택합니다.
-
추가 구성 섹션을 확장합니다.
-
환경 변수를 추가하려면 환경 변수 섹션에서 이름에 DOCKERHUB_USERNAM을 입력합니다.
-
값 필드에 비밀 이름 다음에 :username을 입력합니다. 예: dockerhub:username
-
유형에서 비밀 관리자를 선택합니다.
-
다음 환경 변수를 추가하려면 환경 변수 추가를 선택합니다.
-
이름에 DOCKERHUB_PASSWORD를 입력합니다.
-
값 필드에 비밀 이름 다음에 :password를 입력합니다. 예: dockerhub:password
-
유형에서 비밀 관리자를 선택합니다.
-
환경 업데이트를 선택합니다.
-
다른 Docker 작업을 수행하기 전에 buildspec을 수정하고 다음 명령을 추가합니다.
echo "${DOCKERHUB_PASSWORD}" | docker login -u "${DOCKERHUB_USERNAME}" --password-stdin
경고: 이 명령을 사용하면 Docker 로그인 사용자 이름과 비밀번호의 세부 정보가 빌드 로그에 기록될 수 있습니다. 제한 오류를 해결한 후에 Docker 암호를 재설정하세요.
다음 예를 참고하세요.
version: 0.2
phases:
install:
commands:
- echo "${DOCKERHUB_PASSWORD}" | docker login -u "${DOCKERHUB_USERNAME}" --password-stdin
build:
commands:
- docker pull docker:dind