Back to Index

Serverless Wordpress Blog #2


// 前ブログからの移行です。

Serverless WordPress on GCP のはじめに WordPress の DB を Cloud SQL で構築します。基本的に難しい設定は必要なく、2 時間くらいでセットアップできる内容です。原則公式ドキュメントのやり方で進めます。


Design Considerations

WordPress 用の MySQL 5.7 を準備して、WordPress が利用するテーブルを作成するだけで特別な要件はありません。達成したいことはシンプルです。

  • OS の運用など面倒なので可能な限り Managed なサービスを利用する

作業後の状態を図にすると以下のようなイメージになります。

Cloud SQL network diagram
Cloud SQL network diagram

How to set up Cloud SQL for WordPress DB

公式ドキュメントを参照して進めます。記録に残すためとおかしなことをしていないかのチェックのために原則 gcloud コマンドを使って作業します。GCP console から Cloud Shell が便利ですが、手元のマシンから (vscode のターミナルとか) からでも問題ありません。

MySQL インスタンスの作成

デフォルトのマシンタイプだとちょっと強いしお金もかけたくないので ‘–tier’フラッグをつかってマシンタイプを指定します。最終的には Private IP 接続にしますが、最初から Private IP のみにすると、Cloud Shell からも接続できなくて面倒なのでテーブルを作ったあとに Private IP からのみにします。こちらの手順では Cloud Shell から gcloud コマンドを流しています。一応本番環境なのでマルチゾーンで構成します

(1) インスタンス作成

Cloud SQL のインスタンスを gcloud で作成します。INSTANCE_NAME は任意の値に変更します。

INSTANCE_NAMECloud SQL のインスタンス名
gcloud sql instances create INSTANCE_NAME \
  --availability-type=REGIONAL \
  --database-version=MYSQL_5_7 \
  --region=asia-northeast1 \
  --tier=db-g1-small \
  --enable-bin-log

(2) root パスワード設定

MySQL インスタンスの root のパスワードを設定します。それぞれ任意の値に変更します。

INSTANCE_NAMECloud SQL のインスタンス名
PASSWORDroot のパスワード
gcloud sql users set-password root --host=% \
  --instance=INSTANCE_NAME \
  --password=PASSWORD

WordPress DB 作成

WordPress が使うデータベースを作成します。Google Cloud Console から SQL の画面を開いて MySQL に接続し、WordPress 用のテーブルを作成します。

(1) MySQL Client 接続

Google Cloud Console -> SQL -> Instance ID の画面から Cloud Shell へのリンクをクリックします。

Cloud SQL インスタンスへの接続
Cloud SQL インスタンスへの接続
Cloud Shell からの接続
Cloud Shell からの接続

(2) WordPress 用のユーザー、テーブル作成

それぞれ任意の値に変更します。wordpress.org にデータベース名等に関する参考情報があります。

WORDPRESSUSERNAMEWordPress 用のユーザー
HOSTNAME%
PASSWORDWordPress 用ユーザーのパスワード
DATABASENAMEWordPress 用データベースの名前
mysql> CREATE USER “WORDPRESSUSERNAME”@”HOSTNAME” 
IDENTIFIED BY “PASSWORD”;
Query OK, 0 row affected (0.06 sec)

mysql> CREATE DATABASE DATABASENAME;
Query OK, 1 row affected (0.00 sec)

mysql> GRANT ALL PRIVILEGES ON DATABASENAME.* TO 
"WORDPRESSUSERNAME"@"HOSTNAME" IDENTIFIED BY "PASSWORD";
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec) 

mysql> EXIT
Bye

プライベート IP への接続設定

Private IP 経由で Cloud SQL に接続するために、Private services access を設定します。必要に応じて VPC network を作成します。

(1) VPC Network の作成

それぞれ任意の値に変更します。

VPC_NETWORK_NAME作成するネットワーク名
DYNAMIC_ROUTING_MODEglobal か regional (default)
MTU1460 (default) か 1500
gcloud compute networks create VPC_NETWORK_NAME \
    --subnet-mode=auto \
    --bgp-routing-mode=DYNAMIC_ROUTING_MODE \
    --mtu=MTU

(2) IP アドレス範囲の割り振り

VPC_NETWORK_NAME を先ほど作成したネットワーク名に変更します。IP アドレス範囲を自分で指定したい場合は addresses フラグと prefix-length フラグを使います。

VPC_NETWORK_NAMEVPC ネットワーク名
gcloud compute addresses create google-managed-services-VPC_NETWORK_NAME \
    --global \
    --purpose=VPC_PEERING \
    --prefix-length=20 \
    --network=VPC_NETWORK_NAME

(3) プライベート接続の作成

作成したネットワークと Service producer VPC Network とのプライベート接続を作成します。VPC_NETWORK_NAME と PROJECT_ID はそれぞれ任意の値に変更します。

VPC_NETWORK_NAMEVPC ネットワーク名
PROJECT_IDプロジェクト名
gcloud services vpc-peerings connect \
    --service=servicenetworking.googleapis.com \
    --ranges=google-managed-services-VPC_NETWORK_NAME \
    --network=VPC_NETWORK_NAME \
    --project=PROJECT_ID

(4) Private IP の設定

gcloud コマンドで Public IP を外して Private IP を設定します。それぞれ任意の値に変更します。

PROJECT_IDプロジェクト名
INSTANCE_IDCloud SQL インスタンス名
VPC_NETWORK_NAMEVPC ネットワーク名
gcloud --project=PROJECT_ID beta sql instances patch INSTANCE_ID \
       --network=VPC_NETWORK_NAME \
       --no-assign-ip

おわりに

Serverless WordPress on GCP の Cloud SQL を Private IP 接続で構成しました。こちらの手順で使用したコマンドについては公式ドキュメントに他のスイッチや設定例とともに記載がありますので環境に合わせてフラグの追加など行ってください。

Cloud SQL はマシンタイプの変更やストレージ容量の拡張はあとから行えますのでとりあえず最小限の構成で作って運用しながらいい感じのサイジングにしようと思います。

特に問題になるようなことはないと思いますが、ストレージ容量は増やすと減らせないのと、Private IP は設定したら取り外せないのでご注意ください。

次回は WordPress を Cloud Run で構成します。

参考情報