AWS 배포전략

Creating the dots·2021년 10월 29일
0

AWS

목록 보기
3/7

그동안은 로컬 환경에서 클라이언트, 서버, 데이터베이스를 띄워 작성한 코드를 구동했었다. 우리가 개발한 서비스를 외부 사용자가 접속할 수 있도록 하려면 어떻게 해야할까?

배포

개발한 서비스를 유저가 이용할 수 있도록 하는 것

클라이언트

AWS에서 제공하는 S3 서비스를 통해 사용자에게 클라이언트를 제공할 수 있다.

클라이언트 앱을 정적파일로 빌드하여 제공한다. 따라서 S3를 이용해 클라이언트를 배포한다.

  • 빌드

    • 불필요한 데이터를 없애고 여러 갈래러 퍼져있는 데이터를 통합/압축하여 배포하기 최적화된 상태로 만드는 것
    • 빌드 이후 데이터 용량이 줄고, 웹 사이트의 로딩 속도가 빨라진다.
    • 리액트의 경우, npm run build와 같은 명령을 사용해서 정적 파일 형태의 결과물을 만들어 낸 후 배포하면 된다. 사용하고 있는 환경에 따라 빌드 과정은 다를 수 있다.
    • ec2 서버를 다시 시작했다면 주소가 바뀌므로 client 폴더의 .env 파일을 수정해주어야한다.
  • 버킷 생성하기

    • 빌드한 파일을 업로드한다
    • 속성 탭에서 정적 웹 사이트 호스팅을 활성화시키고 인덱스 문서와 오류 문서로 index.html을 작성한다. 이는 각각 웹사이트 주소에 접속했을때 보일 기본 페이지와 오류 발생시 메인 페이지를 전환하기 위한 페이지이다.
    • 권한 탭에서 퍼블릭 액세스 차단을 해제한다.
    • 권한 탭에서 버킷 정책 옵션에서 편집-정책생성을 클릭한다. select type of policy에는 s3 bucket policy를 선택하고, principal는 모두에게 공개할 것이므로 를, actions 옵션에서는 'get object'를 선택해 버킷에 접근하는 모든 사용자가 버킷 내 객체 데이터를 읽을 수 있도록 한다. 이는 웹사이트 용도로 구성할 때 선택하면 좋다. arn에는 복사한 arn뒤에 /를 추가로 작성해준다. 생성한 정책을 복사해서 정책 부분에 붙여넣은 뒤 저장한다.

서버

AWS EC2 서비스를 통해 서버를 구성하고 서비스를 제공할 수 있다.

  • AMI 선택하기
    필요한 컴퓨터 운영체제, CPU 등을 선택할 수 있다.

  • 키 페어 선택 또는 생성하기
    생성한 인스턴스를 원격으로 제어하기 위해서는 SSH 연결을 통해 원격접속이 필요하다. 키페어 다운로드를 눌렀을때 생성되는 .pem 파일은 파라이빗 키 파일이며 퍼블릭 키는 AWS에 저장된다. 이 둘을 모두 이용해야 SSH를 통해 인스턴스에 접근할 수 있다. 따라서 .pem 파일을 잘 관리해야한다.

  • SSH 프로토콜
    서로 다른 PC가 인터넷과 같은 public network를 통해 통신할때 보안상 안전하게 통신하기 위한 통신 규약이다. 주고받는 데이터를 암호화해서 해당 키 페어를 가지지 않은 사람은 통신되는 데이터를 알아볼 수 없으므로 보안산 안전한 통신 방법이다.

    • 처음 SSH 프로토콜로 연결할 때에는 pem 파일에 대한 권한을 수정해주어야 하는데, 누구나 접근할 수 있는 권한이 부여되어있다면 인스턴스는 연결을 거부한다. pem 파일이 있는 위치로 이동한뒤 (ex. cd Downloads) chmod 400 <pem파일명>.pem을 해주어야한다.
    • ssh -i 명령어를 이용해 인스턴스에 연결한다.
  • 개발환경 구축하기

    • 개발환경을 구축한 후에는 깃 클론을 받은 후 서버 폴더에서 npm install 해준다.
    • 이때, 파일이 1024번 이하의 포트를 사용해 서버 실행한다면 관리자 권한이 필요하므로 sudo npm start 명령어를 입력해야한다. 그냥 npm start를 할 경우, EACCESS: permission denied 에러가 발생한다.
//패키지 매니저가 관리하는 패키지의 정보를 최신 상태로 업데이트
sudo apt update

//nvm 설치
//참고 링크https://github.com/nvm-sh/nvm
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash

export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm

//node.js 설치
nvm install node

//npm 설치
sudo apt install npm
  • 보안그룹 설정하기
    보안 그룹은 AWS에서 임대한 인스턴스의 가상 방화벽이다. 인스턴스로 들어가는 트래픽은 인바운드, 나가는 트래픽을 아웃바운드라고 한다. 허용하는 규칙을 설정해두어 그 외의 접근을 필터링한다. EC2 인스턴스를 생성하면 SSH 접속을 위한 SSH 규칙만 생성되어있다. 아웃바운드는 기본적으로 모든 트래픽을 허용한다. 규칙은 트래픽의 프로토콜, 포트, 소스(IP)에 대한 규칙을 설정할 수 있다.

데이터베이스

AWS의 데이터베이스 특화 서비스 RDS를 이용해 EC2를 통해 배포된 Server Application의 데이터를 저장, 제공하는 데이터베이스를 배포할 수 있다.

  • DBMS와 템플릿 선택하기
    DBMS로는 Mysql, MariaDb, Oracle, SQL Server, PostgreSQL 등이 있고 템플릿으로는 프로덕션, 개발/테스트, 프리티어 등을 고를 수 있다.

  • 설정

    • DB 클러스터 식별자 이름, 마스터 사용자 이름, 마스터 암호
      마스터 사용자 이름과 마스터 암호는 DB에 연결할때 쓰이는 정보로 기억해두어야한다.
    • 연결 부분에서 퍼블릭 액세스 기능을 "예"로 설정한다.
    • 보안그룹에서는 default 보안 그룹을 설정해 로컬 환경 터미널에서 테스트가 가능하도록 한다.
    • 추가연결 구성 토글에서 포트를 변경해준다. 기본으로 3306 포트를 사용한다.
    • 추가 구성 토글에서 초기 데이터베이스 이름을 사용할 DB 이름으로 설정한다.
    • DB 생성은 5분 이상 시간이 소요된다.
  • RDS의 DB에 연결하기

    • RDS의 엔드포인트를 복사한 후 mysql -u [마스터 이름] --host [엔드포인트 주소] -P 13306(포트번호) -p를 입력한 후 엔터를 친 후 설정해놓은 비밀번호를 입력하면 접속된다.
    • show databases 명령어를 입력했을때 설정한 데이터베이스의 이름이 존재한다면 정상적으로 연결된 것이다.
  • 보안그룹 설정하기
    RDS의 추가연결 구성 토글에서 사용하기로 한 포트(기본은 3306)에 대한 인바운드 규칙을 수정해주어야한다. 13306번 포트를 사용할 경우, 다음과 같이 사용자 지정 TCP로 설정해 13306번 포트에 대한 IPv4와 IPv6에 대한 접근을 허용해주어야한다.


ec2와 rds에서 인바운드 규칙을 추가해주어 특정 프로토콜과 포트에 대해 접근을 허용해주는 것이 헷갈렸는데 이번에 정리할 수 있었다. 그리고 어떤 프로토콜이 어떤 포트를 사용하고, 1024 이하의 포트는 관리자 권한으로 서버를 실행해야한다는 점 등을 확실히 배우게 되었다.
profile
어제보다 나은 오늘을 만드는 중

0개의 댓글