Programming-[Infra]/Cloud-AWS

[AWS] 개요, S3, EC2, RDS 시작 방법 등

컴퓨터 탐험가 찰리 2020. 11. 3. 14:28
728x90
반응형

AWS

Deployment(배포)를 위해서 클라우드 형태로 서버를 제공하는 서비스가 AWS(Amazon Web Service) 이다.

추가로 배포를 할 수 있는 플랫폼은 Microsoft의 Azure, Digital Ocean, Heroku 등이 있다.

 

회원 가입 시에 계좌정보를 입력하게 되어있고, 1달러를 빼간다! 다만, 인증이 완료되고 나면 약 2주 안에 환불해준다.

AWS 서비스를 가입한 후 1년 동안은 지정된 규칙(Prettier, 지정된 컴퓨터로만 사용하는 등의 규칙)을 지키면 무료로 사용할 수 있다.

 

 

-- 

 

배포를 위한 가이드라인

1. 코드내에서 주로 상대주소를 쓴다.

내가 제작한 코드를 참고, 수정, 이용하는 사람들은 다른 환경에서 작업하기 때문에, 참조하는 주소가 다를 수 있다.

 

2. 환경변수를 사용해야 한다.

아직 정확히 이해는 안되지만, 포트 번호 등 사용자마다 다를 수 있는 환경 변수를 or 조건으로 지정해주어야 한다.

ex) app.listen(process.env.PORT || 9945)

 

3. 패키지 설치 시에 반드시 --save-dev 옵션을 달아준다.

다른 사용자가 npm install 시에 그 사용자의 package.json에 해당 패키지들이 설치되도록 하기 위해서 반드시 필요한 옵션이다.

 

--

 

SPA serve strategy

build : 많은 js 파일들을 html, css, js 파일의 통합본으로 합쳐준다. 

-> 해당 파일을 Amazon S3에 업로드하면 다른 사용자들이 이 파일을 받아가서 client side를 볼 수 있게 된다.

-> 빌드된 파일은 static, 정적 파일이다.

 

: React에서 제공하는 yarn build 스크립트를 통해서 build할 수 있다.

 

Serve Application deploy strategy

 

>서버

내가 만든 서버에 어떠한 사용자든지 접속을 허용하면 보안상의 위험이 있다. 이를 위해서 Amazon EC2 컴퓨터를 이용한다. 즉, 나의 컴퓨터를 서버 컴퓨터로 활용하는 것이 아니라, Amazon에서 제공하는 서버 컴퓨터를 활용하는 것이다.

 

>데이터베이스

데이터베이스는 AWS RDS라는 데이터베이스 제공 서비스를 활용한다.

 

추가적인 아키텍처들은 다음과 같다.

 

--

 

S3

 

 

0. 리액트 파일을 만들고, build 한다. (client 폴더에서 npm run build 명령어 입력)

1. 서비스 중 S3로 접속하여 버킷을 만든다. 버킷 이름은 다른 사용자가 만든 것과 중복되면 안되는듯?

2. 파일 설정을 위해 속성>정적 웹사이트 호스팅에 들어간다.

3. 인덱스문서 : index.html, 오류문서: 일단 index.html로 지정한다.

4. 다른 사용자들이 접속할 수 있도록 권한 설정을 해준다. 권한> 퍼블릭 액세스 설정 > 이 버킷의 퍼블릭 ACL 관리,이 버킷에 대한 퍼블릭 버킷 정책 관리에 해당하는 체크박스를 모두 해제 해준다. 저장 및 확인을 해준다.

5. 권한 > 버킷 정책 > 정책 생성기 > S3 Bucket Policy 선택, Principal : * , Actions : GetObject를 해준다.

6. ARN 부분은, 아래쪽 예시에 있는 arn: aws:s3:::<bucket_name>/<key_name>을 복사해온 후 입력칸에 붙여넣는다.

bucket_name 부분을 우리가 만드는 react app 이름으로, key_name은 지정해야하지만 우선 *로 모든 파일로 설정한다. (확인필요)

 

7. 완료 후 생성된 정책을 복사하여 버킷 정책 편집기에 붙여넣고 저장을 누른다.

8. 빌드해두었던 build 폴더를 개요> 드래그앤드랍을 통해서 업로드 한다. (아래쪽 업로드 클릭) : 폴더를 하면 안되고 파일들을 업로드 해야함.

9. 속성> 정적 웹사이트 호스팅의 엔드포인트로 접속하면 우리가 생성했던 클라이언트 페이지를 확인할 수 있다.

 

 

--

 

EC2

0. 서버 파일을 만든다.

-> 폴더 생성 > npm init, npm install --save-dev express, 필요 시 yarn add cors

 

1. 서비스 > 컴퓨팅 > EC2에 접속한다.

2. 인스턴스 > 인스턴스 시작 > Ubuntu Server 18.04 LTS (프리티어 사용가능)을 선택한다.

3. 프리티어 사용가능이라는 부분을 꼭 체크해야 한다. 과금을 하지 않는 인스턴스이다.

4. 시작하기 > 접속을 할 수 있는 키페어를 생성해야 한다.

5. 새 키 페어 생성을 선택하고, 키 페어 이름을 지정해준다.

6. 키 페어 다운로드를 한다. 인스턴스 시작을 할때만 제공되므로 키 페어를 잘 관리해야 한다.

7. 인스턴스 관리화면에서 Name을 설정해준다. 완성까지 시간이 좀 걸린다.

 

8. 연결 탭 > 인스턴스 액세스 방법을 참고한다.  SSH 클라이언트

9. linux 기반 컴퓨터는 루트 디렉토리에서 .ssh로 폴더를 조회할 수 있다.

10. root 폴더 내에 .ssh 폴더를 만든다. (없다면, 있다면 .ssh

11. "mv ~/다운로드 펨키파일(Tab으로 조회) ./(현재 위치인 .ssh 폴더) "명령어로 펨키를 .ssh 폴더로 이동시킨다. 안되면 GUI 방식으로 이동

12. 아마존에서 안내하는대로 chmod 명령어를 실행한다.(.ssh 폴더에서!)

13. 아래 "예:" 부분에 있는 ssh -i 명령어를 실행한다. @ 뒤에는 IPv4 퍼블릭 주소를 넣어주도록 한다.(주는거 복붙하면 됨)

 

14. 입력이 되면 ubuntu에 접속이 된다.

15. 이 컴퓨터에는 node, npm이 설치되어 있지 않고 git만 설치되어 있다. (AWS에서 git 기본 설치됨)

16. sudo apt update, sudo apt install nodejs, sudo apt install npm 명령어를 통해 node와 npm을 설치한다. node -v, npm 명령어로 설치 상태를 확인한다.

17. github에 올려놓은 서버 파일을, git clone 주소 명령어를 통해 clone 한다.(이후 사용자 인증 로그인)

18. npm install로 모든 dependencies를 설치한다.(클라이언트? 및 서버 폴더에서 npm install)

19. node index.js로 서버 구동을 확인한다. >> 우리 폴더는 스크립트상 npm start

 

20. 퍼블릭에 서버를 공개하기 위해 보안 설정을 한다.

21. 인스턴스에서 오른쪽 열 부분에 보안그룹 부분의 링크를 누른다.

22. 아랫부분 인바운드에서 우리의 SSH만 허용되어 있음을 볼 수 있다.

23. 편집을 누르고, HTTP 유형을 추가한다. 포트 80, 소스는 위치무관으로 설정한다.

24. 사용자 지정 TCP 규칙 , 포트는 서버의 포트번호, 위치무관을 추가한다.

25. 이후 IPv4 주소(퍼블릭 IPv4 주소)를 입력하면 접속이 가능함을 확인할 수 있다. 주소 뒤에 포트 번호를 추가해줘야한다. 터미널에서 서버를 끄면 서버가 종료되는 것을 확인할 수 있다.

 

26. 터미널이 종료되어도 서버의 구동을 유지하기 위해서 PM2라는 모듈을 사용한다.

27. EC2 우분투 컴퓨터에서 sudo npm install pm2 -g 명령어로 글로벌로 설치한다.(글로벌 설치라서 sudo 권한 활용)

28. pm2 명령어를 치면 설치됬음을 확인할 수 있다.

29. pm2 start index.js(엔드포인트)로 서버 구동, pm2 list 명령어로 구동중인 서버를 확인할 수 있다.

30. 터미널을 꺼도 서버가 구동됨을 볼 수 있다.

 

--

 

RDS

 

0. 서비스 > RDS에 접속한다.

1. 데이터베이스 생성, MYSQL, 아래쪽 프리티어 옵션을 반드시 체크한다.(과금x)

2. MYSQL 8.0.11을 선택한다(권장)

3. 설정 > DB 인스턴스 식별자 : db 이름을 입력한다. 마스터 사용자, 암호를 입력한다.

★ 요금구성 프리티어로 설정해주어야 함.

4. 고급설정 > 추가연결구성 > 퍼블릭 액세스 가능성 : 예 로 선택한다 (초기 개발을 위함)

5. 데이터 베이스 옵션 > 포트는 기본적으로 3306을 쓰지만, 보안을 위해 13306 등 다른 포트를 지정해준다.

6. 데이터베이스를 생성하면 시간이 좀 걸린다..

7. 보안그룹에 들어가서 모든트래픽, 소스 - 위치무관으로 설정해주어야 한다.

 

7. service mysql start 명령어를 입력한다.(맥에서는 mysql.server start 서버 실행 명령어)

8. mysql -u {유저이름} --host {엔드포인트} -P {RDS에서 입력한 포트} -p  (Enter) 후 비밀번호 입력 시 mysql에 접속할 수 있다.

9. 처음 만들었던 database를 확인할 수 있다.

10. 보통은 위와 같은 CLI 방식이 아닌 GUI tool을 통해서 RDS를 관리한다. host(엔드 포인트) username, password및 port를 설정하여 접속한다.

 

 

---

 

Office hour

 

서비스 개발 전에 미리 deployment 부터 해놓는 것이 좋다. 개발을 하면서 베타테스트를 해보는 것이다.

 

-클라우드의 반대말로 자체적으로 서버를 위한 전산실을 보유해 운영하는 방식을 온프레미스 라고 한다.

비용이나 확장성 측면에서 외주 방식인 클라우드 방식이 유리하지만, 은행이나 대기업 등은 보안상의 이유로 온프레미스 방식을 사용하는 곳이 많다. 유지보수 측면에서도 온프레미스 방식이 유리하다(클라우드가 멈추면 서버가 다운됨)

 

-IaaS, PaaS, SaaS의 차이점

 

-DevOps는 백엔드, QA, 프론트엔드 등의 전반적인 프로세스를 관리하는 직군이다. DevOps 직군에서 지켜야되는 기본 수칙에 대한 내용은 다음 사이트에서 확인 가능하다.

12factor.net/ko/

 

-대용량의 트래픽 처리를 위해서는 아마존의 RDS를 사용하는 것이 필요하지만, 큰 프로젝트가 아니라면 구글의 파이어베이스를 사용해도 된다.

728x90
반응형