Docker Image 빌드를 자동화해보자
Feat. AWS Code Series
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Statement1",
"Effect": "Allow",
"Action": [
"ecr:BatchCheckLayerAvailability",
"ecr:CompleteLayerUpload",
"ecr:GetAuthorizationToken",
"ecr:InitiateLayerUpload",
"ecr:PutImage",
"ecr:UploadLayerPart"
],
"Resource": "*"
}
]
}
- 역할에 정책 연결
CodeBuild 프로젝트 생성:
1) AWS Management Console에서 CodeBuild 서비스로 이동
2) 새 프로젝트를 생성
3) Source: 깃 저장소를 선택하고, GitHub 또는 GitLab 계정과 연결
4) Environment: "Managed image"를 선택하고, "Operating system"으로 Ubuntu, "Runtime"으로 Standard, "Image"으로 최신 버전을 선택, "Environment type"은 "Linux"으로 설정
5) "Service role"에서 앞서 생성한 IAM 역할로 선택
내 깃허브 레포랑 연결프로젝트 생성 완료!
buildspec.yml 작성:
1) CodeBuild는 buildspec.yml 파일을 사용하여 빌드 명령을 어떻게 실행할지를 알게 됨
2) 프로젝트 루트에 buildspec.yml 파일 생성
3) 이 파일 내에는 Docker 빌드와 ECR에 푸시하는 명령이 포함되어야 함
Codebuild 스테이지에서 코드 빌드가 제대로 되는지 확인해보기
Q. 왜 CodeBuild에서는 IAM Role을 수동으로 설정해주고 Codepipeline에선 별도의 IAM Role을 수동으로 설정해주 지 않아도 되는 걸까?
AWS CodeBuild의 IAM 역할:
- CodeBuild는 빌드 환경 내에서 실행될 명령에 대한 권한이 필요! => 예를 들어, S3 버킷에서 아티팩트를 가져오거나 ECR에 도커 이미지를 푸시하는 작업이 포함됨
- CodeBuild 프로젝트를 생성하거나 수정할 때 사용자는 이러한 작업을 위해 필요한 권한을 가진 IAM 역할을 지정해야 함.
AWS CodePipeline의 IAM 역할:
- CodePipeline을 처음 생성할 때 AWS는 자동으로 IAM 서비스 역할을 생성. => 이 역할은 파이프라인에서 사용되는 다양 한 AWS 서비스에 대한 액세스 권한을 가짐. (예: CodeBuild, CodeDeploy, Lambda, S3 등)
- 사용자는 별도로 이 역할을 지정할 필요가 없음. But 파이프라인 설정이나 사용 사례에 따라 이 역할의 권한을 수정해야 할 수 있음