서버 생성 후 소스를 업로드 하기전에 mysql과 연동하기 위한 몇가지 과정을 진행해 주었다.
구성 > 데이터베이스 > 편집 에서 새로운 데이터베이스를 생성해준다.
mysql
을 사용해 주었고 20GB
까지 프리티어 무료이다.
사용자 이름
과 암호
를 적절히 설정해주었다.
저장 후 RDS에 자동으로 해당 db가 생성된다.
구성 > 소프트웨어 > 편집 > 환경속성에
다음과 같은 항목들을 추가해준다.
DB_HOST
: RDS 엔드포인트 DB_NAME
: ebdbDB_USER
: 사용자 이름DB_PASSWORD
: 암호DB_PORT
: 3306EB에서 생성한 db의 디폴트 이름이 ebdb
이다. 생각없이 DB_NAME을 로컬 db명으로 했다가
이러한 오류를 만나고,, RDS명도 넣어보고,, 많은 시간을 허비했다.
settings.py
의 DATABASES
를 다음과 같이 설정해준다.
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': os.environ['DB_NAME'],
'USER': os.environ['DB_USER'],
'PASSWORD': os.environ['DB_PASSWORD'],
'HOST': os.environ['DB_HOST'],
'PORT': os.environ['DB_PORT'],
}
}
로그에서 다음과 같은 에러가 확인되었다..
어째서인지 os.environ.get()
으로 작성하면 환경변수를 읽지 못했다.
ValueError: invalid literal for int() with base 10: 'os.environ.get("DB_PORT")'
아마존 설명서에 나와있는대로 os.environ[]
을 사용해 주었더니 해결 되었다.
django.config
에 다음과 같은 내용을 추가하여 migrate 하도록 해주었다.
container_commands:
01_migrate:
command: "source /var/app/venv/*/bin/activate && python3 manage.py migrate"
leader_only: true
위 과정의 로그는 cfn-init-cmd
에서 확인할 수 있다.
엄청난 삽질 끝에 연동에 성공했다 흑흑🥲😂