귀찮은 s3 정적웹호스팅 버킷 등록 Cli로 모두 해결하자

캡틴 노드랭크·2021년 8월 24일
1

AWS

목록 보기
1/1

매번 npm run build명령어로 빌드를 해주고 그 파일들을 복사하여 S3 bucket에 등록하는 과정이 귀찮다. AWS CLI를 통해 쉽게 해결할 수 있으며 그 과정을 알아보자.

IAM 등록

IAM은 AWS에서 제공하는 사용자, 그룹의 권한을 부여하여 관리가 가능할수 있도록 해주는 서비스이다.

왜 사용 하는거임?

간단한 예로, CLI를 이용하기 위해선 해당 버킷에 접근 가능한 권한을 부여해줘야하는데, 그것을 담당하는 편리한 서비스가 IAM이기 때문이다.

IAM은 사용자의 접근 가능한 ID와 키가 존재하며, 이를 이용하여 CLI에 접근이 가능하다.

결국, AWS 서비스와 상호작용이 가능한 오픈소스 툴이다.

사용자 그룹 생성

개(dog아님)의 사용자 그룹을 클릭한다

그룹 생성 클릭

사용자가 그룹의 정책에 따른 접근권한을 정해줄 수 있다.

그룹 이름을 작성한다.

특정 권한을 부여할 수 있는 정말 많은 옵션들이 존재하지만, 나는 모든 서비스 접근 권한을 얻을 수 있는 AdministratorAccess를 찾아서 선택해줬다.

S3 권한 하나에도 7개나 되는 정책이 존재한다.

사용자 생성

그룹을 생성했으니 사용자를 생성해준다. 좌측 카테고리 사용자클릭

사용자 추가클릭

이름은 임의로 정하고

액세스 유형AWS-CLI,SDK를 사용할 때 필요한 프로그래밍 방식과, AWS 관리자 콘솔에 접속할때 사용하는 방식이다.

다음으로 넘어간다.

권한 설정을 해준다. 그룹을 생성해줬으니 해당 그룹에 사용자를 추가해준다.

다음으로 넘어간다.

취향에 따라 설정한다. 다음 클릭

최종 확인 후 사용자 만들기 클릭

액세스 ID와 접근 key를 제공하는데, 반드시 .csv 파일을 반드시 다운로드 해줘야한다.

왜냐하면, 1회 제공이라 key를 확인할 수 없기 때문에 나중에 엑세스 키 만들기를 통해 새로 받아야하기 때문이다.

.csv파일은 잘 보관해두고 누출안되게 주의하자. 가능한 여러개 만들어두면 보안상 유리할 것 같다.

파일을 열어보면 이렇게 제공되는데 Access key IDSecret access key 유출 안되게 조심하자.

이 두개를 복사해서 나중에 사용해야한다.

대시보드 확인

대시보드를 확인해서 보안 권장 사항에 초록색 체크가 되있는지 반드시 확인한다.

AWS-CLI (feat. Ubuntu 20.04 LTS)

IAM에서 그룹과 사용자를 만들었다. CLI는 액세스 ID와 키로 이용할 수 있다.

바로 터미널 오픈

curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install

압축을

최신 버전의 CLI를 설치할려면 위의 명령어를 입력한다.

위 이미지는 이미 파일이 존재하기 떄문에 덮어쓰기를 한다.
y, n, r의 경우 하나하나 풀어지지지만 A를 입력하면 모두 풀린다.

그리고 설치파일을 권한으로 실행하여 마무리해준다.
(이미 설치되서 위 이미지와 같이 뜸)

aws --version 으로 버전 확인

AWS-CLI Setup

CLI를 설치후 초기 설정이 필요한데 내용은 아래와 같다.

A. AWS IAM 사용자 액세스ID
B. AWS IAM 사용자 액세스키
C. AWS 리전 설정 예시)ap-northeast-2 (서울)
D. 출력 포맷(json, html, text, table, yaml, yaml-extend) 중 택 1

위에 IAM에서 사용자를 생성했을 때 받은 키를 복붙 해준다.

기본 설정읕 끝이났다.

S3 버킷 관련 명령어

aws s3 ls // 버킷 조회
aws s3 mb s3://{bucket name} //버킷 생성
aws s3 rb s3://{bucket name} //버킷 삭제
aws s3 sync {local file path} s3://{bucket name} //버킷 동기화 업로드
aws s3 ls s3://{bucket name} //오브젝트 목록 조회
aws s3 rm s3://{bucketname/object/path} //오브젝트 삭제
aws s3 website s3://{bucket name} --index-document {기본 제공할 파일} —error-document {페이지 에러상황에 제공할 파일} //정적 웹 호스팅 시작
aws s3api delete-bucket-website --bucket {bucket name} // 정적 웹 호스팅 종료 

npm 스크립트에 적용해보기

client폴더에 들어가 package.json을 실행한다.

그리고 scripts탭을 확인하면 아래와 같은데...

  "scripts": {
    "start": " react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },

위의 명령어로 이렇게 추가해준다.

  "scripts": {
    "start": " react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
    "upload": "aws s3 sync ./build s3://bucket-name",
  },

npm run build로 빌드 파일을 생성하면

이렇게 생성되는데, npm run upload로 s3 버킷에 업로드를 할 수 있다. 하지만 매번 npm run build를 해서 빌드를 최신화 해줘야 하기 때문에 나는 이런식으로 해결했다.

 "autoupload": "react-scripts build && aws s3 sync ./build s3://bucket-name"

build로 덮어씌우고, 최신화된 build파일을 bucket에 업로드한다.

다음엔 그냥 정해진 시간마다 업로드 되는 방법을 알아보겠다.

ref: AWS-Linux AWS-CLI2 설치

profile
다시 처음부터 천천히... 급할필요가 없다.

0개의 댓글