LoginSignup
8
8

More than 3 years have passed since last update.

Djangoのローカルテスト環境からGoogle Cloud SQLを使用する

Last updated at Posted at 2017-11-24

はじめに

Google Cloud SQLもDjangoで使用するDBの選択肢の一つです。
Djangoを開発中のローカル環境からProxyを使って接続する、私が主に使用している方法です。
Proxyの部分は公式をなぞるのみです。
この記事はmacOSですが、LinuxでもProxyのインストールコマンドが違うのみで、その他は同様かと思います。

環境
OS: macOS 10.12 Sierra
Python: 3.6.3
Django: 1.11.2
Cloud SQL: 第二世代 MySQL 5.7

前提

以下、前提です。

Cloud SDKはインストールされており、認証も済んでいる

されていない場合はこちらが公式です -> Cloud SDK のインストール
え?認証?よくわからないって場合はとりあえずこれでいけるかと思います。
参考までに。

gcloud auth application-default login

Cloud SQLのインスタンスは作成されている

第二世代 MySQL 5.7 で。

Cloud SQLのAPIは有効化されている

Google Cloud Platform(以下、GCP)上の左上メニュー -> 「APIとサービス」から見つかります。Google Cloud SQL APIのことです。

MySQLはローカルマシンにインストールされている

されていますか?
念のため、MySQLがポート3306を使用してされていないことを確認してください。

lsof -n -P -i:3306

です。使われてたら止めてやってください。

Cloud SQLで接続ユーザーを作成する

Cloud SQLダッシュボードからユーザーを作成してください。
Cloud SQLダッシュボード:「左上のメニュー」->「SQL」
インスタンスを選択し、「インスタンスの詳細」から「ユーザー」で「ユーザーアカウントの作成」というボタンが見つかるはずです。

ここでは
ユーザー名: testuser
パスワード: password

ということにします。

Proxyのインストール

インストールしたいディレクトリへ移動してください。
そしてcurlです

curl -o cloud_sql_proxy https://dl.google.com/cloudsql/cloud_sql_proxy.darwin.amd64

Linuxの場合はこちらから
そして実行権限を付与

chmod +x cloud_sql_proxy

Proxyを開始

接続するインスタンスの「インスタンス接続名」を調べます。
GCPのダッシュボード左上のメニューからSQLを選択し、接続したいインスタンスを選択します。すると、インスタンスの詳細という画面から「このインスタンスに接続」という箇所がありますので「インスタンス接続名」をコピーしてください。

その上で、cloud_sql_proxyをインストールしたディレクトリへ移動し、下のコマンドを実行します。
もちろん<INSTANCE_CONNECTION_NAME>を上でコピーした「インスタンス接続名」で置き換えてください。つまり、-instance="aaaa:bbb:ccc"といった形です。

ちなみに、Macだと-instanceの後にDoubleQuotation""なしでも大丈夫ですがLinuxだとダメです。ハマったことあります。

./cloud_sql_proxy -instances=<INSTANCE_CONNECTION_NAME>=tcp:3306

MySQLセッションの開始とデータベースの作成

Proxyを起動している状態で先ほど作成したdjangoというユーザーでログインしましょう。プロトコルはtcpです。

mysql -h localhost --port 3306 --protocol tcp -u root -p

PostgreSQLの場合はこちらです

psql -U postgres -h 127.0.0.1 --port 5432

MySQLセッションが開始できたらDjangoで使用するデータベースを作成しておきましょう。データベース名はtestdbとします。

CREATE DATABASE testdb;

pymysqlのインストールとDjangoの設定

MySQLをDjangoで使用するたの設定です。
Djangoで使用する環境へ移動し、pymysqlをpipでインストールします。

sudo apt install libmysqlclient-dev
pip install PyMySQL

インストールしたら、Djangoプロジェクト内に以下を記述します。ベストプラクティスはわかりませんが、データベース設定を変更したいので今回はsetting.pyに記述します。

import pymysql

pymysql.install_as_MySQLdb()

さて、そのままデータベース設定を変更しましょう。
何も変更していない状態では以下の設定のはずです。

これを

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

こうです

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'testdb',
        'USER': 'testuser',
        'PASSWORD': 'password',
        'HOST': 'localhost',
        'PORT': '3306'
    }
}

あとはpython manage.py migrateしてあげれば(まだmakemigrationsしていなければmakemigrationsも)、あたかもローカル環境のデータベースに接続しているような感覚で開発ができるはずです。

ちなみにサーバ環境では、サーバのIPをCloud SQL側で承認ネットワークに追加し、setting.pyのHOSTをCloud SQLのIPにしてやるとそのまま使えたりします。

8
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
8