본문 바로가기
클라우드 및 인프라/AWS

[AWS] CodeBuild를 사용해서 Github Push 감지해서 S3에 업로드하기

by 작은소행성 2022. 4. 28.

 

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 빌드 사양 참조

https://docs.aws.amazon.com/ko_kr/codebuild/latest/userguide/build-spec-ref.html#build-spec-ref-name-storage

 

 

s3 cli 명령어

https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/cli-services-s3-commands.html

 

반응형