Google Cloud SQL を雑にMySQLの代用品として利用してみた
※このエントリは、MySQL Casual Advent Calendar 2014 の2日目として書かれたものです。12/2(火)現在、まだいくつか枠が残っておりますので、興味のある方はぜひ参加してみてはいかがでしょうか。
※このエントリに掲載されているGoogle Cloud SQLは課金が必須なサービスです。本文中でも多少触れますが、クレジットカードなしでは試すこともできませんので、ご注意ください。
Google Cloud SQL とは?
最近クラウド分野に力を入れてきているGoogleですが、かなり前にGoogle Cloud SQL(以下Cloud SQL)をリリースしています。今思い出したかのようにリリース時の記事を検索してみたのですが、@ITによると、2011年11月にサービス提供をしているらしいので、すでに3年経過していることになります(ちなみに正式公開は米国時間の2014年2月11日)。
もはや「安定したサービス」と言えるのではないでしょうか。
なぜMySQL Casualの話題にCloud SQL?
Cloud SQLについてあまりご存知ない方にとって見れば、「そもそもMySQLとどう関係があるの?」という疑問が頭を過ることでしょう。ご安心を。大いに関係ありまくりです。
Google Cloud SQLは、そもそもMySQLが基盤となっているサービスです。どういう事かイマイチ想像がつかないかもしれませんが、気にせず読み進めていただけると、きっと納得していただけるはずです。
手始めにプロジェクトを作ろう
Cloud SQLを利用するには、Google Developers ConsoleからGoogle Cloud Platform(以下GCP)にプロジェクトを作る必要があります。
もしすでにGCPにプロジェクトを持っている場合は、それを流用しても構いませんし、別途新規作成してもいいでしょう。
ただし、Cloud SQLはGoogleの提供するストレージにデータを貯めこむシステムでして、このストレージが有料となります。予め課金を有効にしておきましょう。完全無料(クレジットカードなし)では利用不可能ですので、もし何らかの理由で決済手段がない方は諦めるしかありません。
Google Cloud SDK をインストールしよう
GCPでは、管理ツール郡をGoogle Cloud SDKとして配布しています。これを利用することで、コマンドラインからCloud SQLをはじめとしたクラウドリソースの操作・参照が可能となります。
Google Cloud SDKはLinux, Mac OS X, Windowsで動作します。上記リンク先より手順を確認し、ダウンロード及びインストールをしておきましょう。
無事にインストールが完了したら、gcloud コマンドが利用可能となっているはずです。
Google Cloud SDKでアカウント認証をしよう
gcloud コマンドが利用可能となっていることが確認出来たら、Google Cloud SDKでアカウント認証をしましょう。
$ gcloud auth login
このようにするとブラウザが開き、認証ページへと移動しますので、認証を行いましょう。もし認証ページが開かない場合は、ターミナルにURLが表示されているはずですので、手動でそのURLにアクセスして、認証を行ってください。なお、認証済みアカウントの確認は
$ gcloud auth list
で可能です。
Cloud SQL インスタンスを作ろう
今度はいよいよCloud SQLインスタンスの作成に入っていきます。と言っても、実はさほど手順は多くなく、以下のようなコマンドを実行するだけです。
$ gcloud sql instances create \
[今作るインスタンス名(好きな名前でok)] \
--project [さっき作ったプロジェクトのID] \
--tier D0 \
--assign-ip
オプションはそれぞれ以下のような意味を持っています。
- project : インスタンス作成先のプロジェクトID(必須)
- tier : インスタンスのタイプ。D0は128MBのRAM。--tierを指定しないとD1となる。参考: Pricing
- assign-ip: グローバルIPの割り当てを行うオプション。これをつけないとGoogle App Engineからしかアクセスできない。
より詳細なオプションについては、こちらのドキュメントを参照してください。
実行以下のような表示となれば、無事にCloudSQLインスタンスの作成に成功したことになります。
Creating Cloud SQL instance...done.
Created [https://www.googleapis.com/sql/v1beta3/projects/oreore-project-xxx/instances/db00x].
NAME REGION TIER ADDRESS STATUS
db00x us-central D0 xxx.xxx.xxx.xx RUNNABLE
アクセスコントロールリスト(ACL)を調整しよう
新しく出来上がったCloud SQLインスタンスでは、もう既にMySQLが稼働しています。が、そこへアクセスするためのネットワーク経路が確保されていません。
Cloud SQLでは基本的に外部ネットワークからのアクセスを遮断しているため、最低でもMySQLクライアントのアクセス元となるIPを許可する必要があります。
Google Developers Consoleからプロジェクトを1つ選択し、「ストレージ」>「Cloud SQL」というふうにメニューを選択すると、以下のようなCloud SQLのインスタンス一覧画面がでてきます。
インスタンスを選択したら、「アクセス制御」タブをクリックしてください。すると、以下のような画面になります。
ここで「承認済みネットワーク」の右にある「新しく追加」というリンクをクリックし、MySQLクライアントのアクセス元となるIPを登録することで、ネットワーク経路が確保されます。
なお、この画面にあるIPアドレスは、MySQLクライアントで接続するときに必要ですので、忘れないようにしましょう。
MySQLのrootパスワードを設定しよう
前述の承認済みネットワーク追加画面で、もうひとつ大事なのが「rootパスワードの設定」という項目です。
これはMySQLのrootパスワードのことを指しており、実運用上必須の設定項目ですので、これも設定しておきます。
MySQLクライアントで接続してみよう
ここまでできれば、とりあえず接続して中身を確認することができます。以下のようなコマンドで実際に接続してみましょう。
$ mysql -u root -p -h [Cloud SQL インスタンスのIPアドレス]
接続できたら、あとは普段利用しているMySQLと同様に自由に探索してみましょう!!
きっと「Cloud SQLはMySQLそのままじゃん」って思うに違いないですよ!
Webアプリで試してみた
実は前回のHachioji.pmにて、「Cloud SQLとDockerをつかってyancha(webチャット)を立ち上げる」という内容のLTを行いました。その時使ったDocker imageがこちら。
折角ですので、このDocker imageを使って、実際にyanchaを起動してみましょう。ちなみにyanchaはバックエンドDBとしてsqliteまたはMySQLが利用可能でして、ytnobody/docker-yanchaでは環境変数MYSQL_HOSTを指定するとMySQLを使用するようになります。
Cloud SQLを利用したdocker-yanchaの起動コマンドは、以下のようなものです。
$ sudo docker run \
--rm \
-p 3000:3000 \
-e MYSQL_HOST=[あなたのCloud SQLインスタンスのIP] \
-e MYSQL_DBNAME=yancha \
-e MYSQL_USER=root \
-e MYSQL_PASSWORD=[設定したパスワード] \
-it ytnobody/docker-yancha
きちんと起動できたら、以下のような表示となります。
Running Yancha on Docker - Yancha Cloud ...
ここまで出来たら、あとは http://localhost:3000/ にアクセスすれば、実際にwebチャットとして稼働していることが確認できると思います。
(以下の画像は稼働時の参考です。
まとめ
実運用にはもう少しちゃんとした設定(SSL周りとか)が必要ではあるのですが、小規模かつ軽薄なアプリケーションなら、比較的簡単にCloud SQLでwebアプリケーションを稼働させることが可能です。
個人的な感想としては、速度面では微妙だと思うのですが(とにかく速度!!!という感じの用途には全く向かない)、運用上の手間がほぼかからないのと、リクエストの少ないwebアプリケーションであれば比較的安価にMySQLを稼働させておけるという面で、選択の一つとしては悪くないと思いました。