클라우드 및 인프라/AWS

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

작은소행성 2022. 4. 28. 11:27

 

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

 

반응형