github 에서 push나 pull request가 발생할 때마다 AWS S3에 업로드를 자동으로 하는 프로세스를 만들고자 한다.
Github Repository에 푸쉬하면 CodeBuild가 이를 감지하고 build한다.
필요한 서비스로는
- CodeBuild 생성시 자동 생성되는 IAM Role
- S3
빌드 프로젝트 생성하기
Github에서 사용하고자 하는 Repository를 선택해준다.
webhook에서 push가 생기면 빌드가 될 수 있도록 선택한다.
IAM 역할 만들기
새 서비스 역할로 만든 후
IAM서비스로 이동해 역할에서 권한에서 정책연결을 선택하고
S3FullAccess 권한 정책가지고 있는 서비스 권한을 추가해준다.
다음과 같은 방법으로 필요한 정책을 생성해준다.
SSM 을 사용하기 위해서는 EC2에 SSM(AWS에서 인프라를 보고 제어하기 위해 사용할 수 있는 AWS 서비스)을 사용하기 위한 권한을 부여해야 한다.
- AmazonEC2RoleforSSM : 이 정책은 사용이 중단될 예정이다. 대신 EC2 인스턴스에서
AmazonSSMManagedInstanceCore 정책을 사용하여 Systems Manager 서비스 핵심 기능을 활성화한다.
- AmazonSSMManagedInstanceCore : 인스턴스가 Systems Manager 서비스 핵심 기능을 사용하도록 허용한다.
- AmazonS3FullAccess : AWS Management 콘솔을 통해 모든 버킷에 대한 전체 액세스를 제공한다.
- AWSCodeBuildAdminAccess : CodeBuild에 전체 액세스 권한을 추가한다.
- AmazonEC2ContainerRegistryPowerUser : IAM 사용자가 리포지토리에 대한 읽기 및 쓰기를 허용하는 관리 권한을 부여하지만, 리포지토리를 삭제하거나 리포지토리에 적용된 정책 설명을 변경할 수는 없다.
buildspec.yml
소스 디렉터리의 루트에서 buildspec.yml 파일을 작성한다.
나의 경우 configuration/ 폴더에 buildspec.yml 파일을 작성했다.
아래 내용을 기본 틀로 사용하면되고 본인이 필요한 환경에 맞게 작성해주면된다.
맨 마지막 s3부분에는 본인이 사용하고자 하는 s3 폴더의 경로를 설정해주면 된다.
version: 0.1
phases:
install:
commands:
- npm install
pre_build:
commands:
- echo pre-build
build:
commands:
- npm run build
post_build:
commands:
- ls -al
- aws s3 cp --recursive dist/ s3://[s3_bucket_name]/
- zip test.zip ./*
- aws s3 cp test.zip s3://[s3_bucket_name]/test.zip
- phases.build
- 프로젝트 빌드 시점
- phases.post_build
- phases.build가 끝난 후에 실행되는 시점
- --recursive
- 이 옵션을 사용하면 지정된 디렉터리 또는 접두사 아래의 모든 파일 또는 객체에 대해 명령이 수행된다. 즉, s3 폴더안에 dist 폴더 내용이 s3에 그대로 복사된다.
- zip
- 루트 폴더 아래 파일들을 zip으로 압축해서 압축된 파일은 s3에 업로드 한다.
빌드시작
위에 세팅이 끝나면 빌드 시작을 실행한다.
CodeBuild log
이 로그는 CodeBuild agent 가 buildspec.yml 사양 파일에 따른 모든 작업을 진행한 내용이다.
위에 내용이 빌드가 잘 되었으면 아래와 같이 모든 정보가 성공된 것을 확인할 수 있다.
S3에 파일이 생성되어 있는것과
Github에서도 초록색 체크표시를 통해 배포가 잘 된것을 확인할 수 있다.
참고
codebuild 사용 설명서
https://aws.amazon.com/ko/blogs/devops/how-to-enable-caching-for-aws-codebuild/
https://docs.aws.amazon.com/ko_kr/codebuild/latest/userguide/codebuild-user.pdf
codebuild 빌드 사양 참조
s3 cli 명령어
https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/cli-services-s3-commands.html