読者です 読者をやめる 読者になる 読者になる

TechBox

スタートアップで働くRails&機械学習エンジニアのブログ。時々GT-Rと旅行。

Google Cloud PlatformでMySQLを動作させる

Google Cloud Platformで、MySQLを使用していきます。
最終的には、GAEにRuby on Railsをデプロイしてプロダクション環境で動作させますが、
その前段階として、まずはDBの構築から行います。

f:id:daisuke-jp:20170509091937p:plain

MySQLの立ち上げ自体はかなり簡単な作業なのですが、
抜けがないように、丁寧に手順を記載していきたいと思います。

Google Cloud Platformについて

f:id:daisuke-jp:20170509092217p:plain
これは相当数の説明がありますので、わざわざ書くまでもないですね。
公式ページを見るのが早いと思います。
AWSやAzure、さくらのクラウド辺りと競合してくるサービスです。

Google Cloud Platformのイニシャルで、GCPと呼ばれるのが一般的かと思います。

GCPのデータベースについて

GCPには2017年5月現在で、3つのデータベースが存在します。
ざっくりまとめると、以下の感じです。

  • Cloud Datastore
    f:id:daisuke-jp:20170509092309p:plain:w100
    KVS型DB。プログラムから使用する場合、Google提供のライブラリーを導入し、
    GCPのドキュメント見ながら、DB操作のコーディングが必要。
    Railsの場合(多言語でも聞いた事はないが)、当然ORMは存在しない。

  • Cloud SQL
    f:id:daisuke-jp:20170509092336p:plain:w100
    RDB。一般的に使用されているRDBのホスティングサービスで、
    MySQLとPostgreSQLに対応している。
    MySQL用のORMで使えるし、ローカルから各種ツールを使ってデータ操作も可能。
    今回はこれを使用します。

  • Cloud Spanner
    f:id:daisuke-jp:20170509092348p:plain:w100
    KVSのスケーラビリティと、RDBの整合性をトレードオフする事なく実現させた、
    夢のようなDB。今現在はGo、Java、Node.js、Python用のクライアントライブラリーがある。
    その他の言語にも順次対応予定との事。

MySQLの構築なので、今回はCloud SQLを実行します。

Cloud SQLの有効化

まずはプロジェクトを作成し、選択した状態にして下さい。
今回はアプリケーションをデプロイするプロジェクトにて、Cloud SQLを同居させます。
※IAMを調整すれば、プロジェクトを跨いでアプリケーションとDBを接続する事も可能です。

  1. 左のメニューから、ストレージのSQLを選択します。
    f:id:daisuke-jp:20170509090158p:plain:h350
  2. インスタンス作成をクリックします。
    f:id:daisuke-jp:20170509090648p:plain:w300
  3. DBエンジンの選択にて、MySQLを選択します。
    f:id:daisuke-jp:20170509090711p:plain:w200
  4. MySQLの世代選択で第2世代を選択します。
    世代の違いとしては、第2世代の方がパフォーマンスが良く、たいていの場合安価になります。⇒公式ページ
  5. インスタンスの詳細を入力していきます。
項目 内容
インスタンスID インスタンス名です。アプリからDB接続の指定などの文字列に含まれます
データベースのバーション 5.6か5.7で選択出来ます。
場所 インスタンスを立てるリージョンです。DBに接続するアプリをデプロイするApp EngineやCompute Engineと同じ場所が無難でしょう
マシンタイプ スペックです。トラフィックなどを考えて、適切な物を選びます。共有コアマシンは安いですが、SLAの対象外ですし、実運用では避けた方が良いです。
ストレージの種類 ディスクIOがどの位あるかで決まってきます。あまり高速アクセスの必要ないアプリであれば、HDDでも十分動作します。
自動バックアップを有効にする バックアップする時間帯です。
バイナリログを有効にします 高可用性を使用する場合、バックアップと併せてONにしてください。
高可用性 フェイルオーバーレプリカの有無です。
メンテナンスの時間枠 パッチ当てと再起動が行われる曜日選択です。
メンテナンスのタイミング パッチをリリースからどのタイミングで当てるかの選択です。検証環境の場合、早めを選択してパッチテストを行うなどの使い方が出来ます。
rootのパスワード そのままです。
Cloud SQLフラグ MySQLのパラメーターの設定が出来ます。良くあるlower_case_table_namesなどの設定もここで可能です。
承認済みネットワーク 自分のPCのWorkbenchなど、GCP外から直接接続する際のグローバルIPアドレスのホワイトリストです。自宅、自社のグローバルIPアドレスを追加します。
  1. 作成をクリック それなりに時間がかかりますので、作成完了まで待ちます。

  2. インスタンスを確認する
    作成完了したインスタンスをクリックします。
    Cloud Shellからコマンドで一通り実行できますが、色々機能を使ってみるよう、
    今回はWEBページとローカルから行います。
    ※使っているネットワークのグローバルIPがわからない場合はローカル接続できないので、
     Cloud Shellを使用して下さい。
     MySQLに慣れている方は、Cloud Shellでコマンドでユーザー追加したりする方が早いです。

  3. アクセス制御タブをクリックし、ネットワーク追加をクリックします。
    f:id:daisuke-jp:20170509091231p:plain:w300
    アクセス制御承認にローカル接続する環境のグローバルIPアドレスを追加します。
    ※使用しているPCのIPアドレスではありません。念のため…

  4. アクセス制御タブ内のユーザーユーザー アカウントを作成をクリックします。
    f:id:daisuke-jp:20170509091308p:plain:w250
    メンテナンスやアプリでMySQLを使用するユーザーを追加します。
    rootとrootのパスワードはインスタンス作成時に作成されております。
    このままrootを使っても構いません。
    CREATE USERと同じ作業です。

  5. データベースタブ内の新しいデータベースをクリックします。
    f:id:daisuke-jp:20170509091330p:plain:w250
    データベースを作成します。
    CREATE DATABASEと同じ作業です。
    これでDBの準備は整いました。
    今回、MySQLを使ったRailsアプリをデプロイする事を目標にしていますので、
    ローカルからテーブル作成等ができるように設定していきます。

ローカルからMySQLの接続をする

  1. 左上のメニューから、API Managerライブラリをクリックします。
    SQLのAPIを有効化します。GCP内のみで完結する場合は必要ないのですが、
    ローカルから接続する場合は必須になります。

  2. Google Cloud APIメニューの中の、Cloud SQL APIをクリックし、遷移した画面で有効化します。
    これでローカルからCloud SQLに接続する準備が整いました。 f:id:daisuke-jp:20170509091702p:plain

  3. ローカルからの接続情報の確認
    Cloud SQLに移動し、概要タブをクリックします。
    グラフの下にプロパティというセクションが有り、その中のIPv4 アドレスをメモします。
    これがローカルから接続する際のサーバーIPになります。
    f:id:daisuke-jp:20170509091505p:plain:w250

  4. ローカルから接続する
    今回はMySQL Workbenchを使用して接続します。
    f:id:daisuke-jp:20170509091535p:plain:w300
    接続先追加にて、Hostnameに前手順で確認したIPv4 アドレスを設定します。
    Usernameはrootでも良いですし、前に追加したユーザーでも構いません。
    後はパスワードを入力すれば、接続完了です。

ここまで設定ができていれば、ローカルのアプリケーションのDB設定にCloud SQLを追加する事で、 開発環境でCloud SQLを使用する事も可能です。    

これでGCPでのMySQL導入は完了しました。
次はこれを使ったRuby on Railsのアプリケーションの導入したいと思います。

www.techbox.jp

www.techbox.jp