AWS S3와 GitHub Actions로 자동 배포하기

Woody·2024년 12월 17일
post-thumbnail

GitHub Actions를 활용하여 React 프로젝트를 AWS S3에 자동으로 배포하는 방법을 알아보겠습니다.

1. S3 버킷 생성

이 포스팅을 참고하였습니다.

버킷을 생성 해줍니다.

  1. AWS 콘솔에서 S3 서비스로 이동
  2. "버킷 만들기" 클릭
  3. 버킷 이름 설정
  4. "퍼블릭 액세스 차단" 설정 해제

이 때 json으로 버킷 정책을 설정하는 과정에서

알 수 없는 오류
예상치 못한 오류가 발생했습니다. 나중에 다시 시도하세요. 오류가 계속되면 AWS Support에 문의하여 지원 을 받으세요.
API 응답
Action does not apply to any resource(s) in statement

이런 오류가 뜬다면,

Resource 값 끝에 /*를 반드시 포함해야 합니다!
버킷 내 모든 객체에 대한 접근을 허용하는 설정입니다.

2. GitHub Actions 워크플로우 설정

프로젝트 루트에 .github/workflows/deploy.yml 파일을 생성하고 다음 내용을 추가합니다.

name: Deploy React to S3

# 트리거 상황 설정
on:
  push:
    branches: ['Woody-refactor']
  pull_request:
    branches: ['main']

  workflow_dispatch:

# job의 이름을 'CI-CD'라고 해보겠습니다.
jobs:
  CI-CD: 
    runs-on: ubuntu-latest

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

	  #사용하는 node 버전
      - name: Setup Node.js
        uses: actions/setup-node@v2
        with:
          node-version: '20' 

      # Corepack 활성화 및 Yarn 버전 설정 추가
      - name: Enable Corepack
        run: |
          corepack enable
          corepack prepare yarn@4.1.1 --activate

      - name: Install dependencies
        run: yarn install

	  # env 파일에서 사용하는 환경 변수 설정
      - name: Build
        run: yarn build
        env:
          VITE_SERVER: ${{ secrets.VITE_SERVER }}
          VITE_JSON_SERVER: ${{ secrets.VITE_JSON_SERVER }}

      - name: Configure AWS Credentials
        uses: aws-actions/configure-aws-credentials@v1
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: ${{ secrets.S3_REGION }} # 설정한 리전

	  # '--delete' 설정으로 소스 코드와 S3 버킷의 상태를 완벽하게 동기화
	  #  S3 버킷에는 있지만 소스 디렉토리(./dist)에는 없는 파일들을 삭제하는 옵션
      - name: Deploy to S3
        run: aws s3 sync ./dist s3://설정한버킷이름 --delete

3. AWS IAM에서 액세스 키 생성

아래의 두 블로그를 참고하였습니다.
참고 포스팅1
참고 포스팅2

  1. AWS IAM 콘솔 접속
  2. 사용자 생성
  3. "보안 자격 증명" 탭 선택
  4. "액세스 키 만들기" 클릭
  5. 필요한 권한 설정
  6. 생성된 액세스 키 ID시크릿 키 저장

4. GitHub 레포지토리에 시크릿 설정

yaml파일에서 사용했던 시크릿키들을 추가해줍니다.

  1. GitHub 레포지토리의 Settings 탭으로 이동
  2. Secrets and variables > Actions 선택
  3. "New repository secret" 클릭
  4. yaml파일에서 설정해둔 secrets.~ 값 들을 추가해줍니다.
    • VITE_SERVER
    • VITE_JSON_SERVER
    • AWS_ACCESS_KEY_ID
    • AWS_SECRET_ACCESS_KEY
    • S3_REGION

5. S3 정적 웹 호스팅 활성화

  1. S3 버킷 속성 탭으로 이동
  2. "정적 웹 사이트 호스팅" 섹션에서 "편집" 클릭
  3. 정적 웹 사이트 호스팅 활성화
  4. 인덱스 문서: index.html
  5. 오류 문서: index.html (SPA의 경우)

6. 배포 테스트

저는 지정 브랜치에 push를 하면 실행하도록 짜놨기 때문에 코드를 하나 push를 해보겠습니다!

  1. 코드를 지정한 브랜치에 push

  2. 🟢 🔴 GitHub Actions 탭에서 워크플로우 실행 상태 확인
    성공하면, 초록불이 뜬 걸 볼 수 있습니다!

  1. ✨ S3 버킷의 정적 웹 사이트 호스팅 URL로 접속하여 배포 확인

    아직 별도의 도메인을 연결하지 않았지만, S3에서 제공하는 엔드포인트 주소로 접속하면 배포가 정상적으로 완료된 것을 확인할 수 있습니다!

HTTPS 사용을 위해서는 CloudFront 설정이 필요합니다.
CloudFront설정은 생략된 포스팅입니다.

profile
우디 월드

0개의 댓글