CodeBuild에서 Docker 이미지를 사용할 때 “이미지 구성 가져 오기 오류: toomanyrequests”오류를 해결하려면 어떻게 합니까?
최종 업데이트 날짜: 2020년 11월 19일
AWS CodeBuild에서 Docker 이미지를 사용할 때 발생하는 “이미지 구성 가져 오기 오류: toomanyrequests” 오류를 해결하고 싶습니다.
간략한 설명
CodeBuild에서 Docker 이미지를 사용하는 경우 퍼블릭 DockerHub 리포지토리에서 계층을 가져올 때 스로틀을 경험할 수 있습니다.
스로틀이 발생할 때 일어나는 오류를 해결하려면 DockerHub 계정 자격 증명을 사용하여 계층 풀링을 인증하도록 CodeBuild를 구성해야 합니다.
중요: 다음 단계를 완료하려면 DockerHub 계정과 계정의 사용자 이름 및 암호가 있어야 합니다.
해결 방법
AWS Secrets Manager를 사용하여 DockerHub 자격 증명 저장
1. 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. 첫 번째 텍스트 상자에 사용자 이름을 입력합니다. 두 번째 텍스트 상자에 DockerHub 사용자 이름을 입력합니다. 그런 다음 [행 추가(Add row)]를 선택합니다.
6. 새 행의 첫 번째 텍스트 상자에 [암호(password)]를 입력합니다. 두 번째 텍스트 상자에 DockerHub 암호를 입력합니다. 그런 다음 [행 추가(Add rowr)]를 선택합니다.
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 정책으로 바꿉니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"secretsmanager:GetSecretValue"
],
"Resource": [
"YOUR_SECRET_ARN*"
]
}
]
}
참고: 앞의 코드에서 YOUR_SECRET_ARN을 앞에서 설명한 보안 정보 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을 수정하고 다음 명령을 추가합니다.
docker login -u $dockerhub_username -p $dockerhub_password
예를 들면 다음과 같습니다.
version: 0.2
phases:
install:
commands:
- docker login -u $dockerhub_username -p $dockerhub_password
build:
commands:
- docker pull docker:dind