ETC/Git

Github Action을 활용해 AWS S3, Cloudfront 자동 배포하기

daeunnniii 2021. 9. 17. 17:38
728x90
반응형

Github Action이란?

Github Actions이란 Github에서 제공하는 워크플로우(workflow)를 자동화하도록 도와주는 도구이다. 테스트, 빌드, 배포 등의 다양한 작업들을 자동화하여 처리한다.

GIthub가 MS에 인수되면서 기존의 소스저장소의 기능에서 DevOps플랫폼으로 으로 발전하고 있다. 비슷한 서비스로는 Gitlab, Bitbucket등이 있다.

요즘 트랜드는 CI/CD의 통합이라고 할 수 있다. 즉, 소스저장소와 배포시스템을 통합하는 것이다. 아키텍처의 변화로 작아진 어플리케이션들을 부담없이 자주 배포하기 위함이다.

 

사용 방법은 GitHub 소스 레파지토리에 .github/workflows/[파일이름].yml 파일만 추가하여 작성하면 된다.

Github Actions와 AWS S3, Cloudfront 사용하기

IAM 권한 추가

AWS IAM에서 사용자 권한을 수정해준다.

우리는 S3, Cloudfront를 활용할 것이므로 CloudFrontFullAccess, AmazonSeFullAccess 권한을 추가해준다.

이제 Github Action을 이용해 웹페이지를 배포해보기 위해 테스트용 index.html 파일을 생성한다.

그리고 ./github/workflows 경로에 main.yml 파일을 생성한다. 파이참에서 main.yml 파일을 생성할 경우 아래와 같이 메세지창이 뜨는데, add를 눌러주면 된다.

 

아래 코드는 Github Action 설정 소스파일 main.yml 내용이다. 아래 링크를 들어가보면 ec2, cloudfront 등에 대한 설정 예시를 참고할 수 있다. 아래 링크를 잘 참고해서 Gihub Action을 사용하면 된다.

https://github.com/marketplace?type=actions&query=cloudfront

 

GitHub Marketplace: actions to improve your workflow

Find the actions that help your team build better, together.

github.com

 

name: my-front
on:
  push:
    branches:
      - main
jobs:
  build:
    runs-on: ubuntu-latest
    env:
      AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
      AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
      AWS_REGION: 'ap-northeast-2'

    steps:
      - name: Checkout source code.
        uses: actions/checkout@master

      - name: Upload binary to S3 bucket
        uses: jakejarvis/s3-sync-action@master
        with:
          args: --acl public-read --exclude '*' --include 'index.html'
        env:
          AWS_S3_BUCKET: ${{ secrets.BUCKET_NAME }}

      - name: Invalidate cache CloudFront
        uses: chetan/invalidate-cloudfront-action@master
        env:
          DISTRIBUTION: ${{ secrets.DISTRIBUTION_ID }}
          PATHS: '/index.html'
        continue-on-error: true

이제 Gihub 레파지토리를 생성하여 작성한 파일을 모두 업로드한다.

하지만 아직 Actions를 눌러보면, build하는데에 에러가 난 것을 볼 수 있다. 위 코드를 자세히 보면, 아직 secrets 값을 설정해주지 않았으므로 에러가 나는 것은 당연하다.

그러면 이제 Settings>Secrets에 가서 AWS 관련 secrets 값을 설정해줄 것이다.

New repository secret 버튼을 클릭해서 설정해주자.

위 main.yml에서 설정해주어야하는 Secrets 값은 4개이다. Name에는 AWS_ACCESS_KEY_ID를 입력하고 Value에는 IAM 사용자의 액세스 키 ID를 입력하여 Add secret 버튼을 클릭해 secret 값을 등록한다.

마찬가지로 AWS_SECRET_ACCESS_KEY, BUCKET_NAME, DISTRIBUTION_ID도 등록해준다.

 

아래와 같이 4개의 secret 값 모두 등록해준다. BUCKET_NAME은 S3 버킷 이름, DISTRIBUTION_ID는 Cloudfront에서 생성했던 배포 ID 값이다.

이제 다시 'Re-run jobs' 버튼을 클릭하면 성공적으로 배포가 된 것을 확인할 수 있다.

 

Github Action과 AWS S3, Cloudfront가 잘 연동되어있는지 테스트

내가 지금 설정을 잘 한건가? 의심이 들 수 있다. 현재 cloudfront 도메인 이름을 브라우저에서 호출하면 아래와 같다. 삼성전자 갤럭시북이 할인 이벤트가 진행 중이라고 가정하고 가격을 2,000,000원으로 고쳐볼 것이다.

 

가격을 수정한 뒤 github 레파지토리에 push 한다. 그리고 다시 cloudfront 도메인을 브라우저에서 호출해보자.

잘 반영이 되었다!

 

 

 

 

 

참고: 스파르타코딩클럽 핵심쏙쏙AWS

728x90
반응형

'ETC > Git' 카테고리의 다른 글

Github Action을 활용해 ElasticBeanstalk로 자동 배포하기  (0) 2021.09.18