[Django] Elastic Beanstalk + mysql 연동하기

울상냥·2023년 4월 18일
0

배포

목록 보기
16/18

서버 생성 후 소스를 업로드 하기전에 mysql과 연동하기 위한 몇가지 과정을 진행해 주었다.

db 생성

구성 > 데이터베이스 > 편집 에서 새로운 데이터베이스를 생성해준다.

mysql을 사용해 주었고 20GB까지 프리티어 무료이다.
사용자 이름암호를 적절히 설정해주었다.

저장 후 RDS에 자동으로 해당 db가 생성된다.

환경변수 설정

구성 > 소프트웨어 > 편집 > 환경속성에

다음과 같은 항목들을 추가해준다.

  • DB_HOST : RDS 엔드포인트
  • DB_NAME : ebdb
  • DB_USER : 사용자 이름
  • DB_PASSWORD : 암호
  • DB_PORT : 3306

EB에서 생성한 db의 디폴트 이름이 ebdb이다. 생각없이 DB_NAME을 로컬 db명으로 했다가

이러한 오류를 만나고,, RDS명도 넣어보고,, 많은 시간을 허비했다.

settings.py

settings.pyDATABASES를 다음과 같이 설정해준다.

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[] 을 사용해 주었더니 해결 되었다.

.ebextensions django.config 작성

django.config에 다음과 같은 내용을 추가하여 migrate 하도록 해주었다.

container_commands:
  01_migrate:
    command: "source /var/app/venv/*/bin/activate && python3 manage.py migrate"
    leader_only: true

위 과정의 로그는 cfn-init-cmd 에서 확인할 수 있다.

migrate 성공!

엄청난 삽질 끝에 연동에 성공했다 흑흑🥲😂

profile
안되면 되게하라

0개의 댓글