EC2上のDjangoからAmazon RDSに接続する


環境

  • AWS RDS
  • Python: 3.6
  • pipenv: 2018.7.1
  • pip: 18.0.0
  • Django: 1.11.18

執筆したきっかけ

  • 研究で開発する実験用システムに必要!
  • デプロイしたシステムとDBを接続したい
  • 他の手段やどのDBがいいかはわからない..
  • あくまで備忘録程度です

Amazon RDS側の設定

  1. Amazon RDSのコンソールを起動する
  2. 画面下にあるRDS無料枠の対象オプションのみ有効化にチェックを入れる
  3. データベースはMariaDBを選択する
  4. インタンスの識別子,ユーザ名などを入力する
    • データベース名の入力を忘れない.あとで面倒なことになる
    • VPCセキュリティグループは,EC2と同一のグループにする
  5. インスタンス生成後,セキュリティグループのリンク先を開く
  6. インバウンドとアウトバウンドに,Mysql用のルールを追加する
    • ソースは0.0.0.0とする(本当は接続元IPを限定するべき)
    • このルールが上手く設定できないと,ERROR 2003 (HY000): Can’t connect to MySQL server on...のエラー発生原因になる

Django側の設定

mysqlを使用するため,mysqlclientをインストールする

pipenv install mysqlclient

settings.pyを編集する

settings.py
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'DB名',
        'USER': 'マスターユーザー',
        'PASSWORD': 'マスターユーザーパスワード',
        'HOST': 'エンドポイント',
        'PORT': '3306',
    }
}

Djangoの管理コマンドを用いて,設定内容が有効かどうかを検証する

python manage.py dbshell

補足

タイムゾーンの設定ができておりません.また,DBを追加するときはSSHで入ってから,追加するのだろうか...

参考