About/Cloud

[AWS] AWS RDS + Django MySQL 데이터베이스 구축

김징어 2022. 4. 11. 14:35

AWS RDS에서 MySQL 데이터베이스를 구축하고 Django 프로젝트와 연결하는 방법에 대하여 알아보겠습니다.


AWS RDS 및 Django 설정

1. AWS Mangement Console의 RDS에 접속하여 데이터베이스 생성 버튼 클릭

2. MySQL 선택

3. 데이터베이스 설정 정보 입력

데이터베이스 식별자, 유저이름, 비밀번호 등을 입력합니다.

4. 인스턴스 및 스토리지 정보 입력

예제에서는 프리티어를 사용하므로 기본값으로 사용하도록 하겠습니다.

5. 연결 정보 입력

  • 퍼블릭으로 접근하기 위해서는 퍼블릭 액세스 예로 변경
  • 보안그룹 선택 
    • 보안그룹의 인바운드/아웃바운드에서 현재 사용하는 PC(혹은 상황에 맞게) 트래픽이 허용되어야 합니다.
  • 추가 구성에서 데이터베이스 포트 변경 가능

6. 추가 구성 정보 입력

초기 데이터베이스 정보, 백업, 암호화, 모니터링, 로그 등 다양한 추가 구성 정보 입력

7.  데이터베이스 생성 버튼 클릭 후 생성 완료

  • 길게는 수 분정도 걸리는 것 같습니다.

8. 데이터베이스 구성 정보 확인

  • Django와 연결하기 위해서는 엔드포인트 및 포트 정보를 확인합니다.

9. django 프로젝트에서 mysqlclientpymysql을 설치합니다.

pip install mysqlclient
pip install pymysql

10. django 프로젝트 setting 변경

<djangoProject>/settings.py 에 다음 내용 추가(mysql 호환용)

import pymysql
pymysql.install_as_MySQLdb()

 

<djangoProject>/settings.py 의 데이터베이스 구성 정보 변경 

생성한 RDS의 정보로 데이터베이스의 구성을 변경합니다.

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', # engine: mysql
        'NAME' : 'project1', # DB Name
        'USER' : 'admin', # DB User
        'PASSWORD' : <설정한 패스워드>, # Password
        'HOST': 'database-1.c81rqsppwitx.us-east-1.rds.amazonaws.com', # 생성한 데이터베이스 엔드포인트
        'PORT': '3306', # 데이터베이스 포트
        'OPTIONS':{
            'init_command' : "SET sql_mode='STRICT_TRANS_TABLES'"
        }
    }
}

11. db migrate

터미널을 열어 django 프로젝트의 데이터베이스 정보를 새로운 데이터베이스로 migrate 합니다.

python manage.py migrate

13. django 서버 실행

django 서버가 정상적으로 실행되는지 확인합니다. (새로운 데이터베이스를 생성했기 때문에 데이터는 없습니다.)

python manage.py runserver

에러가 나는 경우

데이터베이스의 엔드포인트에 접근할 수 없는 경우

django.db.utils.OperationalError: (2003, "Can't connect to MySQL server on '[database-1.c81rqsppwitx.us-east-1.rds.amazonaws.com](<http://database-1.c81rqsppwitx.us-east-1.rds.amazonaws.com/>)' (timed out)")

-> 데이터베이스의 보안그룹의 인바운드/아웃바운드를 확인합니다.

Access Denied의 경우

django.db.utils.OperationalError: (1045, "Access denied for user 'admin'@'211.224.69.220' (using password: YES)")

-> 데이터베이스의 USER-PASSWORD가 잘못되었습니다.

_mysql을 찾을 수 없는 경우

NameError: name '_mysql' is not defined

<djangoProject>/settings.pypymysql.install_as_MySQLdb() 코드를 추가하지 않았습니다.


AWS RDS에서 MySQL 데이터베이스를 구축하고 Django 프로젝트와 연결하는 방법에 대하여 알아보았습니다.