카테고리 없음

Github Actions로 배포 자동화하기 (S3 + CloudFront )

려낭 2024. 11. 12. 19:10

AWS IAM 사용자 추가하기

 

귀찮아서 IAM 사용자를 추가하지 않고 root 사용자인 상태로 자동화 작업을 하고싶었는데

서치를 해보니 Root 사용자 계정은 모든 리소스에 대한 완전한 접근 권한을 가지고 있어

보안 위협이 될 수 있기 때문에 절대 절대 권장되지 않는다고 한다,,  바아로 만들어보자. !

 

 

IAM 이란 AWS 리소스에 대한 액세스를 안전하게 제어할 수 있는 웹 서비스이다.

 

IAM > 액세스 관리 > 사용자 

사용자 생성을 클릭한다.

 

 

 

사용자 이름을 작성한다.

 

 

기존 정책 직접 연결을 선택하고 

AmazonS3FullAccess와 CloudFrontFullAccess를 선택한다.

 

 

생성 완료 후에 액세스 키 만들기를 클릭

 

 

AWS 외부에서 실행되는 애플리케이션 선택

 

 

액세스 키와 비밀 액세스 키를 복사하여 꼭 메모장에 저장해두고

.csv 파일도 다운받아둔다.

 

Github Actions 설정

 

자동화하려는 레파지토리의 settings에 들어가 Secrets and variables > Actions에 들어간다.

 

 

Repository secrets에 New repository secret 생성 버튼을 눌러

 

 

ID와 Access Key, Cloudfront ID, .env에 작성된 것들을 secrets로 설정해준다.

 

 

 

 

Actions 에 set up a workflow yourself 에서 .yml파일을 작성한다.

 

 

React, yarn, vite 로 create 한 앱이라 빌드 파일 경로를 dist/로 설정해줘야 한다.!!

name: Build & Deploy React App

on:
  push:
    branches:
      - main

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: 코드 체크아웃
        uses: actions/checkout@v3

      - name: AWS IAM 사용자 설정
        uses: aws-actions/configure-aws-credentials@v2
        with:
          aws-access-key-id: ${{ secrets.AWS_S3_ACCESS_KEY }}
          aws-secret-access-key: ${{ secrets.AWS_S3_SECRET_ACCESS_KEY }}
          aws-region: ${{ secrets.AWS_REGION }}

      - name: 의존성 설치
        run: yarn install

      - name: 리액트 빌드
        run: yarn build
        env:
          VITE_APP_BASE_URL: ${{ secrets.VITE_APP_BASE_URL }}

      - name: 빌드한 파일 S3에 업로드
        run: aws s3 sync dist/ s3://${{ secrets.AWS_S3_BUCKET_NAME }}

      - name: CloudFront 캐시 무력화 설정
        uses: chetan/invalidate-cloudfront-action@v2
        env:
          DISTRIBUTION: ${{ secrets.AWS_CLOUDFRONT_ID }}
          PATHS: "/*"
          AWS_REGION: ${{ secrets.AWS_REGION }}
          AWS_S3_ACCESS_KEY: ${{ secrets.AWS_S3_ACCESS_KEY }}
          AWS_S3_SECRET_ACCESS_KEY: ${{ secrets.AWS_S3_SECRET_ACCESS_KEY }}

 

 

upload failed: dist/vite.svg to s3://***/vite.svg An error occurred (AccessControlListNotSupported) when calling the PutObject operation: The bucket does not allow ACLs

 

빌드한 파일 S3에 업로드 과정에서 이러한 오류가 났었어서

서치해보니 

최근 S3에서는 버킷이 ACL을 비활성화한 경우에 --acl public-read와 같은 옵션을 사용할 수 없도록 변경되었습니다.
이 문제를 해결하려면 --acl public-read 옵션을 제거하고 대신 버킷 정책을 통해 객체에 공용 읽기 권한을 설정해야 합니다.

 

ㅇ..ㅣ 이런

--acl public-read 옵션을 제거하니 바로 성공했다..!