GCPのデータベースサービス Cloud SQL

2015年9月2日(水)
向井 哲也

コマンドラインインターフェースでCloud SQLを始める

ここまで、Cloud SQLのWebインターフェースでの操作方法を紹介してきました。Webインターフェースで作成したものと同じ設定のインスタンスを、今度はコマンドラインから作成する方法を紹介します。コマンドラインでCloud SQLを使う際には、gcloudコマンドを利用します。

まず、gcloudコマンドで利用するアカウントとプロジェクトをセットします。

$ gcloud auth login
$ gcloud config set project <プロジェクトID>

次に、インスタンスを作成します。インスタンスを作成するコマンドは次の通りです。

$ gcloud sql instances create <インスタンス名> <オプション>

WebインターフェースではD0タイプのインスタンスをアジア地域に作成したので、ここでも同じ設定で作成します。インスタンス名は「gcp-mukai-cli」としました。この設定でインスタンスを作成するためにオプションをつけると、コマンドは次のようになります。

$ gcloud sql instances create gcp-mukai-cli --tier="D0" --region="asia-east1"

少し待つと、インスタンスができあがります。続いてIPv4アドレスの割り当てと、接続できるIPアドレスの追加を行います。既に起動しているインスタンスの設定を変更するコマンドは、次の通りです。

$ gcloud sql instances patch  <インスタンス名> <オプション>

IPv4アドレスを割り当てるオプションは、「--assign-ip」、接続元IPアドレスを追加するオプションは「--authorized-networks <ネットワーク>」です。IPv4アドレスの割り当てと接続元ネットワークの追加を同時に行うコマンドは次のようになります。

$ gcloud sql instances patch gcp-mukai-cli --assign-ip  --authorized-networks <CIDR表記>

「patch」で指定できるオプションは基本的には「create」でも指定可能なので、インスタンス作成時点にIPv4アドレスの割り当てや接続元IPアドレスの追加も可能です。

引き続きユーザの作成を行います。2015年5月時点では、gcloudコマンドにはCloud SQLにユーザを作成する機能が提供されていないため、rootユーザでCloud SQLに接続してからMySQLでユーザを作成します。

まずは、rootユーザのパスワードを設定します。

$ gcloud sql instances set-root-password gcp-mukai-cli -p <パスワード>

次に、作成したパスワードでMySQLに接続します。

$ mysql -h <割り当てられたIPアドレス> -u root -p

引き続き、MySQLでデータベースを作成し、そのデータベースへの全権限を持つユーザを作成します。なお、Cloud SQLのrootユーザにはALLの権限がないため、データベース指定なしのGRANT ALLで全権限を付与することはできません。

mysql > CREATE DATABASE testdb;
mysql > GRANT ALL ON testdb.* to mukai@'%';
mysql > SET PASSWORD FOR mukai@'%'=password('<パスワード>');

Cloud SQLインスタンスの作成方法は以上です。あとは通常のMySQLと同じように、ご自身のアプリケーションから接続して使うだけです。

Google App EngineでCloud SQLを使う

Google App Engine(以下、GAE)からCloud SQLを利用する場合は、自動的にユーザはroot、接続元のホストはlocalhostとなります。また、ホストとしてIPアドレスを使用する必要はなく、Unixソケットを利用して接続が可能です。以下、GAE PythonでCloud SQLを使う際の要点をまとめます。

MySQLdbモジュールのインポート

import MySQLdb

設定ファイル(app.yaml)でMySQLdbライブラリを定義しておけば、新たにインストールする必要はありません。

Cloud SQLへ接続

db = MySQLdb.connect(unix_socket='/cloudsql/mukaidemo:usa', db='guestbook', user='root', charset='utf8')

「mukaidemo:usa」はCloud SQLのインスタンスIDです。GAEで使用するCloud SQLインスタンスは、GAEアプリケーションが置かれている地域(米国またはヨーロッパ)と同じになるようにしてください。Mukaidemoアプリケーションは米国なので、Cloud SQLインスタンスの地域は米国を選択して作成しました。guestbookデータベースとentriesテーブルは、事前に作成しておきます。

SQLの実行

SQLの実行は、以下のように行います。

データの挿入(insert)

cursor = db.cursor()
cursor.execute('INSERT INTO entries (guestName, content) VALUES (%s, %s)', (fname, content))
db.commit()
db.close()

データの取得(select)

cursor = db.cursor()
cursor.execute('SELECT guestName, content, entryID FROM entries')
rows = cursor.fetchall()

公式ドキュメントにサンプルコードなど、GAEでの詳しい使い方が記載されていますので、参考にしてください。

レプリケーション設定とバックアップ

大規模システムのデータベースにおいて、レプリケーションは必要不可欠の機能の一つですが、Cloud SQLではレプリケーションの設定を簡単に行うことができます。

図10のCloud SQLインスタンス一覧画面で、マスターとするインスタンスをクリックします。そして、インスタンスの詳細画面の上部にある「リードレプリカを作成」ボタンをクリックします(図11)。

自動バックアップとバイナリログを有効にしていない場合は、「作成できません」という旨のメッセージが表示されます。その場合はインスタンスの編集ページ(図3)で「バックアップを有効にする」と「バイナリログ」にチェックを入れ、バックアップが作成されるまで待ちます。

バックアップを有効にしていると、図11の右下に表示されているように、バックアップの履歴が表示されます。こちらの「復元」ボタンからデータを復元することができます。

「リードレプリカを作成」ボタンをクリックすると、インスタンス作成時と同じ設定画面になり、詳細設定も同じように設定できます(図12)。データセンターの地域とMySQLのバージョンは、マスターと同じである必要があるため、変更できません。その他の設定項目もマスターと同じ値が設定されていますが、必要により変更してください。設定後、作成ボタンを押すとリードレプリカ(スレーブ)が作成されます(図13)。

なお、レプリカインスタンスはスタンドアローンのインスタンスに変更することができます。レプリカインスタンスの編集ページにて「レプリカのプロモート」ボタンを押すだけです。ただし、一度マスターにしてしまったインスタンスをレプリカに戻すことはできませんので、ご注意ください。

外部サーバーにCloud SQLのリードレプリカを置くことも可能ですが、ここでは設定方法の詳細は省きます。

株式会社ゴーガ

東京都稲城市出身、在住。2002年、カナダのバンクーバーへ渡り、英語とウェブ開発を学んだ後、現地で就職。約5年間をカナダで過ごす。帰国後、某大手ポータルサイトのシステム開発業務を経てゴーガに入社。現在は主にGoogle Cloud Platformでの開発を担当。認定試験Google App Engine Qualified Developer取得。仕事の傍ら稲城市消防団に所属し、地元地域の安全維持に貢献。B型のうお座。

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています