2018

6

2

herokuでMySQL環境作ってやんよ!!!

スポンサードリンク


個人的な趣味レベルのアプリケーションをいちいちAWSやGCPにデプロイするのは結構カロリー高いです。
とにかく思いついた勢いでプロダクトをリリースしたいときに味方になってくれるのがherokuたん。

herokuが公式にサポートしているデータベースはPostgresで「そーなんだ(Postgresようわからん)」「モックだからhereokuでいいか」くらいにしか認識してなかったんですが・・・
よくよく調べたらアドオンがかなり豊富でMySQL使えるやん!
導入も超カンタンということで手のひら返しでお世話になります。

herokuにMySQL環境を構築

ClearDBアドオンは、ClearDBというherokuとは別のDaaSを組み込んでherokuアプリと連動可能です。

herokuアプリにMySQLを新規作成

# プランを指定してMySQLを新規作成
$ heroku addons:create cleardb:プラン名 --app アプリ名

ClearDB MySQLの料金プラン

herokuの使えるMySQLの無料プラン(ClearDBアドオンのignite)の容量が5MBまで。
料金プランによって容量とかコネクション数が違うんで参考までに。そのほかのサポート比較は公式へ。
プラン名月料金 容量接続数
Ignite 無料 5MB 10
Punch $9.99/月 1GB 15
Drift $49.99/月 5GB 30
Scream $99.99/月 10GB 40
Standard25 $54.27/月 25GB 10
Standard50 $108.53/月 46.6GB 20
Standard100 $217.07/月 93.1GB 40
Standard200 $434.13/月 186GB 80
Standard400 $868.26/月 373GB 160
Standard800 $1736.52/月 745GB 320
Standard1600 $3473.05/月 1.46TB 640
Premium400 $876.67/月 373GB 160
Premium800 $1753.34/月 745GB 320
Premium1600 $3506.69/月 1.46TB 640
Premium3200 $7013.38/月 2.91TB 1,280
Premium6400 $18736.13/月 6.25TB 3,480
Premium12800 $30392.42/月 12.5TB 7,680

データベースホストおよび環境情報を取得

$ heroku config | grep CLEARDB
--> CLEARDB_COBALT_URL: mysql://username:password@hostname/database_name?reconnect=true
これで作成したデータベースアクセス情報が取得できます。
mysql://ユーザー名:パスワード@ホスト/データベース名?reconnect=true

作成したMySQLをherokuアプリに紐付け

$ heroku config:set DATABASE_URL='mysql://username:password@hostname/database_name?reconnect=true'
--> Setting DATABASE_URL and restarting ⬢ heroku-app-name... done, v76
--> DATABASE_URL: mysql://username:password@hostname/database_name?reconnect=true

# cleardbのコンパネページをブラウザで表示
$ heroku addons:open cleardb

GUIツールからローカルでもherokuのDBに接続

herokuと紐づけたMySQLにローカルからも接続したいので「Sequel Pro」というGUIツールからも接続できる様に以下の項目を設定して接続します。


Pythonアプリで作成したDBに接続

herokuコマンドから取得したDB情報をherokuにデプロイするpythonアプリに追加
import pymysql
import pymysql.cursors

connection = pymysql.connect(
        host='ホスト',
        user='ユーザー名',
        password='パスワード',
        db='データベース名',
        charset='utf8',
        cursorclass=pymysql.cursors.DictCursor)
    try:
        with connection.cursor() as cursor:
            cursor.execute(sql)
            results = cursor.fetchall()                
    finally:
        cursor.close()
        connection.close()


トップへ