AWS s3 배포

김형진·2024년 10월 16일

AWS

Amazon에서 제공하는 클라우드 컴퓨팅 플랫폼으로, 다양한 클라우드 서비스를 제공합니다. 이 서비스들은 기업이나 개발자들이 인프라를 손쉽게 구축하고 운영할 수 있도록 돕습니다. AWS는 전 세계적으로 가장 널리 사용되는 클라우드 서비스 플랫폼 중 하나로, 컴퓨팅 파워, 스토리지, 데이터베이스, 네트워크, AI/ML, 보안, 분석 등의 다양한 기능을 제공합니다.


시작 전 리전 설정

  • 상단 나브바에서 리전 설정(가장 가까운 서버로 연결)
  • 한국에 경우 서울로 연결

1. S3 버킷 생성


### 2. 버킷 이름 설정


4. 버킷 생성

5. 해당 버킷 접속

만든 버킷 클릭

6. 속성 탭에서 정적 웹 사이트 호스팅 설정 변경

react 사용시 정적 파일이 index.html이므로 index.html로 설정 이후 저장

7. 권한 탭에서 퍼블릭 엑세스 차단 해제

8. 권한 탭에서 버킷 정책 설정


1) 정책 생성기 클릭

getObject: 버킷에 있는 객체의 정보를 읽을 수 있는 권한 부여


Add Statement 클릭 후 Generate Policy 클릭

정책 생성됨

9. 생성된 정책을 복사 후 버킷 정책 편집에 붙여넣고 저장

Resource에서 버킷 이름 뒤 /* 붙여줘서 하위 모든 폴더 접근 가능하게 만들어야함

{
  "Id": "Policy1729079666346",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1729079661050",
      "Action": [
        "s3:GetObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::test-kim/*", 
      "Principal": "*"
    }
  ]
}

10. 엑세스 키 발급

1) IAM 서비스에서 사용자 탭으로 들어옴

2)사용자 생성

3) 사용자 이름 입력

4) 권한 옵션 선택 후 사용자 생성

5) 생성 한 사용자에 접속 후 엑세스 키 만들기 클릭

6) AWS 컴퓨팅 서비스에서 실행되는 애플리케이션으로 옵션 선택

7) 설명 태그 설정(선택: 어디에 사용할 엑세스 키인지 설명 적으면 좋음)

8) 엑세스 키 확인

비밀 엑세스키는 잃어버리면 다시 못찾으므로 따로 저장해두는게 좋음

11. git action으로 AWS S3와 연결

이전 작성한 포스팅 확인(gitaction 설정):https://velog.io/@isacc7224/Git-action

1) yml 파일에서 밑의 코드 추가
AWS s3에 접근 하기 위한 코드

  - uses: awact/s3-action@master #마스터 브랜치 배포
     with:
       args: --acl public-read --follow-symlinks --delete 
     env:
       SOURCE_DIR: './build'
       AWS_REGION: 'ap-northeast-2'
       AWS_S3_BUCKET: ${{ secrets.AWS_S3_BUCKET }}
       AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
       AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}

uses: awact/s3-action@master

awact/s3-action@master**는 S3에 파일을 업로드하기 위한 GitHub Actions용 커뮤니티 액션이다
이 액션을 사용하면 빌드된 파일을 AWS S3 버킷으로 쉽게 배포할 가능함
@master는 이 액션의 마스터 브랜치를 사용하겠다는 의미이다

with

args: S3로 파일을 업로드할 때 추가로 전달할 옵션을 정의

  • --acl public-read: 업로드된 파일에 대해 퍼블릭 읽기 권한을 부여
    이를 통해 S3 버킷에 업로드된 파일을 누구나 읽을 수 있게 됨
  • --follow-symlinks: 이 옵션은 심볼릭 링크를 따라가서 그 실제 경로의 파일을 업로드하겠다는 의미
  • --delete: S3 버킷에 있는 기존 파일 중, 이번 업로드에 포함되지 않은 파일은 삭제합니다. 이 옵션은 버킷을 항상 최신 상태로 유지하는 데 유용함

env (환경 변수)

SOURCE_DIR: 로컬에서 S3 버킷으로 업로드할 디렉터리를 지정함.
이 코드에서는 ./build 디렉터리에 있는 파일들을 S3에 업로드함

AWS_S3_BUCKET: 사용할 버킷 이름
AWS_ACCESS_KEY_ID: AWS 엑세스 키
AWS_SECRET_ACCESS_KEY: AWS 비밀 엑세스 키

2) 전체 코드

# This workflow will do a clean installation of node dependencies, cache/restore them, build the source code and run tests across different versions of node
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-nodejs

name: Node.js CI

on:
 push:
   branches: [ "master" ]
 pull_request:
   branches: [ "master" ]

jobs:
 build:

   runs-on: ubuntu-latest

   strategy:
     matrix:
       node-version: [20.x]
       # See supported Node.js release schedule at https://nodejs.org/en/about/releases/

   steps:
   - uses: actions/checkout@v4
   - name: Use Node.js ${{ matrix.node-version }}
     uses: actions/setup-node@v4
     with:
       node-version: ${{ matrix.node-version }}
       cache: 'npm'
   - run: npm i
   - run: npm run build --if-present
   - run: npm test


   - uses: awact/s3-action@master
     with:
       args: --acl public-read --follow-symlinks --delete
     env:
       SOURCE_DIR: './build'
       AWS_REGION: 'ap-northeast-2'
       AWS_S3_BUCKET: ${{ secrets.AWS_S3_BUCKET }}
       AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
       AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}

yml 파일에 직접 엑세스키와 비밀 엑세스 키를 넣으면 위험함

12. yml 버킷, 엑세스, 비밀 엑세스 키 설정

1) git setting에서 Secrets and variables에서 Action으로 들어감

2) New repository secret으로 설정

이전에 AWS에서 설정한 buket이름, 발급 받은 엑세스 키, 비밀 엑세스 키를 설정하면 됨

13. action 작동 확인


생성한 yml 파일 클릭

클릭

계속 클릭

작동 확인

14. aws s3에서 url 가져오기

AWS S3버킷에서 속성탭으로 들어감 정적 웹 사이트 호스팅에 적힌 url 접속

15. 배포 완료

0개의 댓글