Flask와 AWS RDS연동하기

이정규·2021년 10월 18일
0

RDS (Maria DB) 설정

  1. AWS 데이터베이스를 생성한다.
  2. 프리티어 모드를 선택한다.
  3. 할당된 스토리지 20Gib로 설정한다. (프리티어 모드에서는 이게 최대)
  4. 마스터 사용자 이름 / 마스터 암호를 설정한다.
  5. 퍼블릭 엑세스 설정에서 "예"를 누른다. (추후에 보안그룹에서 지정된 IP만 접근하도록 설정한다.)
  6. 데이터 베이스를 생성한다.

파라미터 설정

  1. DB엔진을 설정하는 부분이 있다. 해당 부분은 전에 RDS를 만들었을 때 생성했던 버전과 일치시킨다.

  2. 파라미터 그룹 생성을 완료한 뒤, 해당 파라미터를 클릭하여 수정버튼을 누른다.

  3. time_zone을 검색해서 Asia/Seoul 로 변경한다.

  4. Character Set을 변경한다. 해당 부분은 utf8mb4로 변경한다.

    여기서 utf8mb4와 utf8의 차이는 이모지 저장 가능 여부이다. utf8로 설정하면 에러가 나는 경우가 많으니 미리 utf8mb4로 설정하여 에러가 나지 않게 하자.

    • character_set_cilent
    • character_set_connection
    • character_set_database
    • character_set_filesystem
    • character_set_results
    • character_set_server
    • collation_connection
    • collation_server
  5. 설정한 뒤, RDS에 해당 파라미터를 반영해보자. 만들어진 RDS로 들어간다.

  6. RDS를 클릭하고 수정버튼을 누른다.

  7. DB 파라미터 그룹에서 방금 만들어둔 파라미터 그룹을 설정한다.

  8. 그리고 다음을 누르면 수정 사항 요약에서 즉시 적용을 누른다.

    예약된 다음 유지 시간으로 설정하면 새벽 시간대에 수정작업이 이루어진다. 현재 DB가 서비스중이라면 해당 사항으로 해야하지만, 현재는 초기 설정이므로 즉시 적용으로 한다.

  9. 정상 적용을 위해 한 번 더 DB를 재부팅한다. 그러면 파라미터 그룹이 적용이 완료가 된다.

보안그룹 설정

  1. 생성된 RDS를 누르고 연결 & 보안에 들어가면 VPC 보안 그룹 이라는게 있다. 여기서 그걸 누르자.
  2. 밑에 인바운드 규칙 이라는게 있다. 해당 버튼을 누르고 Edit Inbounds rules 를 누른다.
  3. 여기서 해당 DB를 접근가능하게 IP들을 설정한다.

해당 사항같이 한다면, 모든 IP를 허용하겠다는 뜻이다. 이러면 모든 사용자가 DB에 접근할 수 있다.

이제 DB설정은 끝이났다. 이제 Flask와 DB를 연결해보자.

Flask - AWS RDS연결

여기서 연결에서 쓰이는 것은 pymysql라이브러리를 사용한다. 왜 Maria DB인데 mysql라이브러리를 사용해? 하면서 의문을 가질 수 있다.

Maria DB는 Mysql을 기반으로 만들어졌기 때문에 전반적인 사용법은 mysql과 똑같다. 그래서 해당 라이브러리를 이용해 연동해도 전혀 상관이 없다.

pymysql 설치

pip3 install pymysql

db_connect.py

from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

config.py

aws_db = {
    "user": "{마스터 사용자 이름}",
    "password": "{마스터 암호}",
    "host": "{DB의 엔드포인트}",
    "port": "3306", # Maria DB의 포트
    "database": "{DB에 만들어둔 database 이름}",
}

SQLALCHEMY_TRACK_MODIFICATIONS = False
SQLALCHEMY_DATABASE_URI = f"mysql+pymysql://{aws_db['user']}:{aws_db['password']}@{aws_db['host']}:{aws_db['port']}/{aws_db['database']}?charset=utf8"

app.py

from flask import Flask
import config
from db_connect import db

def create_app(test_config=None):
    app = Flask(__name__)

		# Config 설정
    if test_config is None:
        app.config.from_object(config)
    else:
        app.config.update(test_config)
		
    db.init_app(app)

if __name__ == "__main__":
    create_app().run()

해당 파일처럼 연동해준다면 이제 flask에서 해당 AWS RDS에 접근가능하게 설정이 된다.

profile
강한 백엔드 개발자가 되기 위한 여정

0개의 댓글