ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • TIL.80 AWS_실습2_EC2 & RDS 연동 및 배포
    TIL 2020. 12. 28. 16:31
    728x90

    AWS_실습_2

    이젠 AWS에 데이터베이스에 대해 알아보자


    서비스 -> 데이터베이스 -> RDS 

    데이터베이스 데시보드에서 

    DB 생성 전에 필요한 작업이 하나 있다.

    바로 파라미터 그룹을 설정하는것이다.

    (말그대로 설정값이라는 의미로 받아들이면된다)

     

    아래와 같이 파라미터 그룹을 설정하자

    이렇게 만들 파라미터 그룹안에서 값을 utf8mb4로 변경하자

     

    다시한번 아래와 같이 값을 변경해줘야한다.

     

    이제 DB에 저장될때 깨지는 문제없을것이다!


    이제 데이터베이스를 생성해보자

    참고로 DB를 제작한 사람의 첫째딸 My , 둘째딸 Maria 라고 한다!!!

     

    추가로 프로젝트별로 RDS를 하나씩 생성하는것이 아니다.

    과금의 요소가 되고 프로젝트 할때마다 RDS를 하나씩 생성하는건 투머치하다.

    즉 내가 DB를 하나 올리고 추후 다른 프로젝트를 진행한다면 지금 생성한 DB안에 데이터베이스만 생성하는방향으로 진행하자

    하나의 RDS 서버 안의 여러개의 DB를 만들어 둘수있다.

     

    마스터 사용자이름 : admin -> root로 변경

    이렇게 다 만들고나면 아래와 같이 생성중으로 데이터베이스가 하나 만들어지는걸 볼 수 있다.

     


    이렇게 완성을 하고 보안 그룹을 하나 더 설정해줘야한다.

    현재 단계에서 까지는 내 IP 하나로만 접속이 가능한 상태이다.

     

    사실 아래 상태는 DB 보안 측면상 굉장히 안전한 상태이다.

    가급적 외부에서 맘대로 들어 올 수 없게 만들어주는게 맞지만

    하지만 우리는 설정을 바꾸고 모두 접속가능하도록 바꿔줄것이다.

     

    아래화면에서 인바운드 규칙을 변경해주자

     

     

    이제 전세계 어디서든 계정정보와 비밀번호만 알면 접근이 가능하게 되어버렸다

    사실 권장 하는 바는 아니다!


    이제 아래 엔드포인트 주소를 이용해 터미널로 접근해보자

     

    아래의 화면이 만들었던 AWS상에 있는 DB에 접근한 것이다! (내 로컬 DB가 아니다)

    mysql -h 주소 -u root -p
    # AWS RDS 생성 당시 비밀번호

     

    이제 로컬에쓷던 DB를 데이터를 밀어넣는 방법을 알아보자

    만약 초기단계부터 이렇게 구성해 놓는다면 따로 덤프를 할 이유가 없을것이다!


    덤프로 이관시킬 데이터베이스는 생성이 되있는 상태에서 아래의 명령어를 사용할 수 있다.

    따라서 AWS DB에도 데이터베이스를 하나 만들어주자

     

    이제 덤프를 시도해보자

    먼저 덤프를 뜨고자하는 로컬 DB를 아래와 같은 명령어를 이용해 sql 파일을 하나 빼준다.

    mysqldump -u root -p lineamigos > lineamigos.sql

    성공!

    그럼 Lineamigos.sql 이란 파일이 하나 생성되고 이 파일을 토대로 데이터베이스에 데이터를 밀어 넣으면 된다.

    mysql -h AWS_DB 엔드포인트 주소 -u root -p lineamigos(DB명) < lineamigos.sql

    덤프 진짜루 성공!!

    이제 이것까지 마무리 했다면 AWS_EC2 에서 mysql 설정을 위 정보로 바꿔주면 된다.

     

    참고로 백업의 개념으로 자주자주 덤프를 떠놓으면 DB에 예기치못한 에러가 발생했을때 백업시키기가 편하다!


    EC2 RDS 연동 및 배포 하기!

    먼저 AWS_pem 경로로 이동해서 EC2 서버에 접속해보자

    전체 과정은 미니콘다를 설치하고 , 패키지 업그레이드를 하고, 최소한의 패키지만 설치하면 된다.

     

    먼저 우분투/리눅스 환경이므로 우분투형 미니콘다 설치를 해주자

    미니콘다 설치주소 카피 

    repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh

    1. 설치 스크립트 받기.

    2. 실행권한 부여하기

    3. 미니콘다 실행해서 설치하기

    설치후에는  source .bachrc 로컬환경과 마찬가지로 설정을 해준다.

    source .bashrc

    앞에 (base)가 추가된 모습이다

     

    다음 할일 apt-get 메서드를 이용해 패키지 업데이드 및 업그레이드 실행

    sudo apt-get update
    sudo apt-get upgrade

     

    업데이트와 업그레이드를 해준 후, GCC를 설치해줘야 이후 MySQL 다운로드시 에러가 나지 않으므로

    GCC를 먼저 설치해주자

    sudo apt-get install gcc
    sudo apt-get install libmysqlclient-dev

     

    설치가 마무리되었다면 가상환경을 만들어주자

    conda create -n project python=3.8

     

    내가 만든 가상환경을 만들어준후 나의 git repositorie 를 클론해보자

     

    프로젝트에서 필요한 패키지 목록을 설치를 해줘야 배포를 하고 동작할 수 있게 된다.

    따라서 아래 명령어로 모든 목록을 설치해주도록 하자

    pip install -r requirements.txt

     

     

    이제 해야할일은

    내 프로젝트의 my_settings.py를 만들고

    settings.py 에서 EC2 서버의 퍼블릭 IP를 설정해주고 서버를 돌려보면 된다.

     

    먼저 settings.py 아래와 같이 변경

     

    호스트는 RDS MySQL의 호스트 주소이고

    패스워드는 MySQL의 서버 접속 암호

    네임은 DB 이름

    우리는 호스트를 RDS 호스트로 바꿔주면 

    EC2 서버에서 RDS로 접근을 해서 로컬에서 서버를 돌리는 것처럼 똑같이 돌려줄수 있다.

    그럼 RDS 호스트를 확인해보자

    아래의 엔드포인트 주소를 넣어주면 된다.

     

    그럼 이제 서버를 돌려보자

     

    그럼이제 로컬에서 엔드포인트를 적용하여 정보를 잘 가져오는지 확인해보자

    아래와 같이 로컬에서는 서버를 돌리지 않았지만 잘 불러오는것을 확인 할 수 있다.

     

    자 그럼 여기서 끝이 아니다.

    정말 길다!!

    이후 배우게될 postman을 통해 엔드포인트 호출을 확인할수는 있다

     

    그래서 서버는 어떻게 돌릴 수 있는걸까??

    장고에서의 manage.py runserver 명령어는 단일 쓰레드로 동작하여 개발/테스트로는 적당하지만

    Request가 많은 운영환경에서는 적합하지 않다!!

    따라서 멀티쓰레드를 지원하는 웹 애플리케이션 서버프로그램인 gunicorn을 설치해서 배포해보도록 하자!!

     

    gunicorn은

    웹 애플리케이션 서버가 있고 여기서 우리가 만든 장고 웹 애플리케이션을 돌려주는 방법이다.

    pip install gunicorn

     

    다음으로 해야할 일은 ssh 세션이 끉어져도 서버를 동작시켜 주기위해서

    nohub 이라는 툴을 써서 gunicorn을 백그라운드로 동작시켜 주도록 하겠다.

     

    백그라운드가 아닌 그냥? 돌리는 명령어

    gunicorn --bint=0.0.0.0:8000 welonmusk.wsgi
    

     

    백그라운드로 돌리는 방법

    welonmusk.wsgi 파일을 적어주는데 wsgi는 장고의 웹 애플리케이션을 지정해주는 역할을 하며

    & 는 백그라운드로 동작하라는 명령어이다.

    nohup gunicorn --bine=0.0.0.0:8000 welonmusk.wsgi &

     

    얼피 적용해봤을때 잘 돌아가는건지 육안으로 확인이 되지 않는다.

    아래 명령어로 어떤 명령이 실행되었는지 알아 볼 수 있다.

    ps -ef | grep python

     

    자 일단은 실행은 잘되는것 같으니 진짜로 백그라운드로 서버가 돌아가고 있는지 다시 호출해보자

    여기서 로컬/EC2 어디에도 runserver는 하지 않은 상태이다.

    위의 이미지에서는 welonmusk.wsgi 파일 명령어를 사용하였는데

    이는 예시로 알려주기 위한 명령어로 나의 라인아미고스 프로젝트의 lineamigos.wsgi로 바꿔주면 아래와 같이

    runserver를 하지 않고도 서버가 잘 돌아가는걸 볼 수 있다!!

     

    728x90

    'TIL' 카테고리의 다른 글

    TIL.82 Git rebase  (0) 2020.12.30
    TIL.81 Git Flow  (0) 2020.12.29
    TIL.79 AWS_EC2_실습  (0) 2020.12.27
    TIL.78 JWT Token 유효시간 설정  (1) 2020.12.26
    TIL.77 List Comprehension의 속도가 빠른이유  (0) 2020.12.24
Designed by Tistory.