blog.takurinton.dev

Django + RDS

2020-10-15

こんにちは

どうも、僕です。
今回はAWSのEC2にデプロイしたDjangoのプロジェクトをRDSに接続する方法について書きたいと思います。
Djangoを理解してればとても簡単。困ることなんてありません。ではいきます。

バックアップを取る

DjangoではデフォルトのDBとしてプロジェクトを作成したときにsqlite3のテーブルがついてきます。
しかし、RDSに乗り換えるときにはsqlite3のデータは当然消えてしまいます。そのため、事前にバックアップを取っておこうと思います。

AWSのコンソールに入り、manage.pyのあるディレクトリで以下のコマンドを実行します。

./manage.py dumpdata <app_name> > <app_name>/fixtures/<file_name>.json

これを実行することでsqlite3のデータをjson形式で保存することができます。注意すべき点は、このjsonを保存する場所はアプリケーションの下のfixturesというディレクトリの下です。デフォルトでは存在しませんが、このコマンドを実行すれば自動で作られます(Windowsは知らん)

このファイルはあとで使うので大切に保存しておきましょう。
バックアップを取ることができたので次にいきましょう。

データベースを作る

ここ を参考にしてMySQLのインスタンスを作成しました。

また、ここには書いていませんが、RDSのセキュリティポートを開放しておく必要があります。ここ忘れてて少しハマりました。情けない。

作成したときに作られる以下の値はAmazon Linux2の環境変数にでも突っ込んでおきましょう。

class="content-img

Pythonのコードを少しだけ触る

Djangoの設定も少し変えなければいけません。settings.pyを編集しましょう。

.
.
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': os.environ['RDS_DB_NAME'],
        'USER': os.environ['RDS_USERNAME'],
        'PASSWORD': os.environ['RDS_PASSWORD'],
        'HOST': os.environ['RDS_HOSTNAME'],
        'PORT': os.environ['RDS_PORT'],
}
.
.

DATABASESのところをこんな感じに書き換えます。先ほどの奴らを環境変数に入れたと思うのでここで引っ張ってきて使います。べたうちしてもいいですが、できればしないほうがいいですね。

これでDjangoとデータベースの設定が終わりました。

初期化

次にDBを初期化します。

./manage.py makemigrations
./manage.py migrate

完了です。

sqliteのバックアップをMySQLに適用する

最後に、sqlite3のデータを新しくなったMySQLの環境に移したいと思います。
そのためには以下のコマンドを実行します。

./manage.py loaddata <file_name> --app <app_name>

ここではパスは気にしなくていいです。fixturesの下に作ったじゃん!とかじゃなくて普通にmanage.pyのあるディレクトリでやれば良きです。
また、filenameに拡張子もいりません。

これで完了です。DBにはsqlite3の元々のデータが入っています。不思議。(当たり前)

まとめ

sqlite3のデータ、意外と簡単に移せて良きです。
RDSにしたかったのでできて嬉しいです。