매번 npm run build
명령어로 빌드를 해주고 그 파일들을 복사하여 S3 bucket
에 등록하는 과정이 귀찮다. AWS CLI를 통해 쉽게 해결할 수 있으며 그 과정을 알아보자.
IAM은 AWS에서 제공하는 사용자, 그룹의 권한을 부여하여 관리가 가능할수 있도록 해주는 서비스이다.
간단한 예로, CLI를 이용하기 위해선 해당 버킷에 접근 가능한 권한을 부여해줘야하는데, 그것을 담당하는 편리한 서비스가 IAM이기 때문이다.
IAM은 사용자의 접근 가능한 ID와 키가 존재하며, 이를 이용하여 CLI에 접근이 가능하다.
결국, AWS 서비스와 상호작용이 가능한 오픈소스 툴이다.
개(dog아님)의 사용자 그룹을 클릭한다
그룹 생성
클릭
사용자가 그룹의 정책에 따른 접근권한을 정해줄 수 있다.
그룹 이름을 작성한다.
특정 권한을 부여할 수 있는 정말 많은 옵션들이 존재하지만, 나는 모든 서비스 접근 권한을 얻을 수 있는 AdministratorAccess
를 찾아서 선택해줬다.
S3
권한 하나에도 7개나 되는 정책이 존재한다.
그룹을 생성했으니 사용자를 생성해준다. 좌측 카테고리 사용자
클릭
사용자 추가
클릭
이름은 임의로 정하고
액세스 유형
은 AWS-CLI
,SDK
를 사용할 때 필요한 프로그래밍 방식과, AWS 관리자 콘솔에 접속할때 사용하는 방식이다.
다음으로 넘어간다.
권한 설정을 해준다. 그룹을 생성해줬으니 해당 그룹에 사용자를 추가해준다.
다음으로 넘어간다.
취향에 따라 설정한다. 다음
클릭
최종 확인 후 사용자 만들기
클릭
액세스 ID와 접근 key를 제공하는데, 반드시 .csv 파일을 반드시 다운로드 해줘야한다.
왜냐하면, 1회 제공이라 key를 확인할 수 없기 때문에 나중에 엑세스 키 만들기
를 통해 새로 받아야하기 때문이다.
.csv
파일은 잘 보관해두고 누출안되게 주의하자. 가능한 여러개 만들어두면 보안상 유리할 것 같다.
파일을 열어보면 이렇게 제공되는데 Access key ID
와Secret access key
유출 안되게 조심하자.
이 두개를 복사해서 나중에 사용해야한다.
대시보드를 확인해서 보안 권장 사항에 초록색 체크가 되있는지 반드시 확인한다.
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
으로 버전 확인
CLI를 설치후 초기 설정이 필요한데 내용은 아래와 같다.
A. AWS IAM 사용자 액세스ID
B. AWS IAM 사용자 액세스키
C. AWS 리전 설정 예시)ap-northeast-2 (서울)
D. 출력 포맷(json, html, text, table, yaml, yaml-extend) 중 택 1
위에 IAM
에서 사용자를 생성했을 때 받은 키를 복붙 해준다.
기본 설정읕 끝이났다.
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} // 정적 웹 호스팅 종료
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
에 업로드한다.
다음엔 그냥 정해진 시간마다 업로드 되는 방법을 알아보겠다.