Serverless Wordpress Blog #2
// 前ブログからの移行です。
Serverless WordPress on GCP のはじめに WordPress の DB を Cloud SQL で構築します。基本的に難しい設定は必要なく、2 時間くらいでセットアップできる内容です。原則公式ドキュメントのやり方で進めます。
Design Considerations
WordPress 用の MySQL 5.7 を準備して、WordPress が利用するテーブルを作成するだけで特別な要件はありません。達成したいことはシンプルです。
- OS の運用など面倒なので可能な限り Managed なサービスを利用する
作業後の状態を図にすると以下のようなイメージになります。

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_NAME | Cloud 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_NAME | Cloud SQL のインスタンス名 |
| PASSWORD | root のパスワード |
gcloud sql users set-password root --host=% \
--instance=INSTANCE_NAME \
--password=PASSWORDWordPress DB 作成
WordPress が使うデータベースを作成します。Google Cloud Console から SQL の画面を開いて MySQL に接続し、WordPress 用のテーブルを作成します。
(1) MySQL Client 接続
Google Cloud Console -> SQL -> Instance ID の画面から Cloud Shell へのリンクをクリックします。


(2) WordPress 用のユーザー、テーブル作成
それぞれ任意の値に変更します。wordpress.org にデータベース名等に関する参考情報があります。
| WORDPRESSUSERNAME | WordPress 用のユーザー |
| HOSTNAME | % |
| PASSWORD | WordPress 用ユーザーのパスワード |
| DATABASENAME | WordPress 用データベースの名前 |
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_MODE | global か regional (default) |
| MTU | 1460 (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_NAME | VPC ネットワーク名 |
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_NAME | VPC ネットワーク名 |
| 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_ID | Cloud SQL インスタンス名 |
| VPC_NETWORK_NAME | VPC ネットワーク名 |
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 で構成します。