반응형
이번에는 PRE_BUILD 단계에서 발생한 빌드오류를 해결해 보자
1. 빌드 오류 파악하기
1-1. 오류 파악
- 열심히 S3 관련 문제를 해결했더니 이번에는 아래와 같은 PRE_BUILD 단계에서 에러가 발생했다.
COMMAND_EXECUTION_ERROR: Error while executing command: aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin {ecr 리포지토리 주소}. Reason: exit status 1
1-2. 빌드 로그 분석하기
- 조금 더 정확히 보기위해 빌드 로그를 확인했다. 아무래도 이번에는 IAM 권한관련 에러인것 같다. (ECR 권한에러)
[Container] 2023/10/28 11:15:48.610669 Running command echo Logging in to Amazon ECR...
Logging in to Amazon ECR...
[Container] 2023/10/28 11:15:48.615475 Running command aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin 473709498430.dkr.ecr.ap-northeast-2.amazonaws.com/recipia-repository
An error occurred (AccessDeniedException) when calling the GetAuthorizationToken operation: User: arn:aws:sts::473709498430:assumed-role/codebuild-recipia-member-build-nvpc-service-role/AWSCodeBuild-a96f8b53-10e3-4bdb-a7f9-109378a51781 is not authorized to perform: ecr:GetAuthorizationToken on resource: * because no identity-based policy allows the ecr:GetAuthorizationToken action
Error: Cannot perform an interactive login from a non TTY device
[Container] 2023/10/28 11:16:03.103564 Command did not exit successfully aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin 473709498430.dkr.ecr.ap-northeast-2.amazonaws.com/recipia-repository exit status 1
[Container] 2023/10/28 11:16:03.107195 Phase complete: PRE_BUILD State: FAILED
[Container] 2023/10/28 11:16:03.107211 Phase context status code: COMMAND_EXECUTION_ERROR Message: Error while executing command: aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin 473709498430.dkr.ecr.ap-northeast-2.amazonaws.com/recipia-repository. Reason: exit status 1
1-3. CodeBuild에 연결된 정책 파악하고 수정하러 가기
- 이전 포스트에서도 봤지만 "codebuild-recipia-member-build-nvpc-service-role" 이거였다.
- "IAM > 역할"로 가서 "codebuild-recipia-member-build-nvpc-service-role"를 검색한 후 아래에 나오는 일치하는 역할이름을 클릭해서 들어가자
1-4. 권한 추가하기
- 들어온 역할의 요약 하단의 "권한"을 클릭하고 우측의 “권한 추가” 버튼을 클릭한다.
- 아래와 같이 권한을 지정하는 화면이 나올텐데 처음에는 JSON이 선택되어있지않아서 아무것도 안보일것이다.
- 정책 편집기에 아래에 적어놓은 정책 내용(JSON코드)을 적고 “다음”을 누른다.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowCodeBuildAccess",
"Effect": "Allow",
"Action": [
"ecr:GetDownloadUrlForLayer",
"ecr:BatchGetImage",
"ecr:BatchCheckLayerAvailability",
"ecr:PutImage",
"ecr:InitiateLayerUpload",
"ecr:UploadLayerPart",
"ecr:CompleteLayerUpload",
"ecr:GetAuthorizationToken",
"ecr:DescribeRepositories",
"ecr:GetRepositoryPolicy",
"ecr:ListImages",
"ecr:DeleteRepository",
"ecr:BatchDeleteImage",
"ecr:SetRepositoryPolicy",
"ecr:DeleteRepositoryPolicy"
],
"Resource": "*"
}
]
}
- 이제 아래와 같이 "검토 및 생성" 페이지가 나올것이다. 여기서 정책 이름을 설정하고 하단의 “정책 생성”버튼을 누른다. 여기서 나는 정책 이름을 "codebuild-pre-build-error-handler"라고 설정해 줬다.
- 정책 생성이 완료되면 아래와 같이 방금 넣은 권한 정책이 생긴것을 볼수가 있다.
1-5. 이제 ECR 관련 권한을 추가했으니 다시 빌드를 했다.
- 이전의 "PRE_BUILD"에 나왔던 ECR에 접근하지 못했던 에러는 해결되어서 통과하고 다음으로 넘어갔다. 왜냐하면 방금 정책에 ECR 접근 권한들을 전부 넣어주었기 때문이다. 근데 이번에는 또 다음 BUILD 단계에서 에러가 발생했다.
에러를 해결하니까 또 에러가 발생했다. 실패는 성공의 어머니라고 실패를 거듭하면서 더 많은 지식들을 알게되어 기쁜마음도 있다. 당연히 스트레스도 받지만 새로운 지식을 얻어가는 과정이 재밌다. 다음 포스트는 새롭게 발생한 BUILD 단계의 에러를 해결해보겠다.
2023.10.30 - [AWS] - AWS CI/CD: CodePipeline 세 번째 빌드 오류 해결 (6편)
2023.10.29 - [AWS] - AWS CI/CD: CodePipeline 첫 번째 빌드 오류 해결 (4편)
반응형
'AWS > CodePipeline, CICD' 카테고리의 다른 글
AWS CI/CD: CodePipeline 배포 오류 수정 (7편) (1) | 2023.10.30 |
---|---|
AWS CI/CD: CodePipeline 세 번째 빌드 오류 해결 (6편) (1) | 2023.10.30 |
AWS CI/CD: CodePipeline 첫 번째 빌드 오류 해결 (4편) (2) | 2023.10.29 |
AWS CI/CD: CodePipeline 배포 및 검토 (3편) (0) | 2023.10.29 |
AWS CI/CD: CodePipeline 빌드 스테이지 추가 (2편) (2) | 2023.10.29 |