Cloud SQL Auth Proxy Dockerイメージがローカル検証に便利

検証目的で、docker-composeを用いてローカルに「WordPress + Google Cloud SQL (Cloud SQL Auth Proxy利用)」の構築を行いました。
個人的にですが、結構簡単にできたのでその方法の共有記事です。

## 流れ
1. Cloud SQLインスタンス作成
1. 作成したインスタンスにWordPress用のデータベース作成
1. Cloud SQL Auth Proxy用のサービスアカウント作成
1. docker-compose
1. 接続確認

## Cloud SQL
[Cloud SQL](https://cloud.google.com/sql/docs/introduction?hl=ja)は、Google Cloudが提供しているリレーショナルデータベースサービスです。
データベースの作成や管理（バックアップなど）が簡単に行なえます。

CPUやメモリ、ディスクなどのスペックについて色々と設定が決められるのですが、今回は構築が可能ということを確認したかっただけなのでほぼ最小の構成としました。
![cloudsql.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2697194/cc07bbd9-22f5-3dbb-aed4-948843ced378.png)

### データベース作成
コンソールでインスタンスを作成した場合、インスタンスの作成後にWordPress用のデータベースを作成する必要があります。
作成したインスタンスを選択→左のサイドバーから「データベース」を選択→「データベースの作成」を押下
の順で作成画面に行けます。

ここで、データベース名、文字セット及び照合順序を指定します。
![db.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2697194/f0f71e66-1a94-4175-df4a-1d71c2e33453.png)

### Cloud SQL Auth Proxy
インスタンスにパブリックIPを付与している場合、アクセスするには「承認済みネットワーク」（アクセスを許可するCIDR範囲を指定）を設定する必要があります。
しかし、[Cloud SQL Auth Proxy](https://cloud.google.com/sql/docs/postgres/sql-proxy?hl=ja)を用いることで、「承認済みネットワーク」の設定なしにローカルからアクセスすることが可能になります。

[ローカルへインストールする方法](https://cloud.google.com/sql/docs/postgres/connect-instance-auth-proxy?hl=ja#install-proxy)と、[Dockerイメージを引っ張ってくる方法](https://cloud.google.com/sql/docs/sqlserver/connect-docker?hl=ja)があります。
どちらにしろ事前にサービスアカウントを作成しておく必要があるので気をつけてください。
ロールは「Cloud SQLクライアント」のみで大丈夫です。

## docker-compose
Cloud SQLの準備が終わったら、以下の設定のもとコンテナを立ち上げます。
[こちら](https://docs.docker.jp/compose/wordpress.html)を参考に、データベースの部分をCloud SQL Auth Proxyに書き換えた感じです。
```
version: '3'

services:
  sql_proxy:
    image: gcr.io/cloudsql-docker/gce-proxy:latest
    volumes: 
      - ${作成したサービスアカウントキーを保管しているディレクトリ}:/config
    ports:
      - "3306:3306"
    restart: always
    command: /cloud_sql_proxy -instances=${作成したCloud SQLインスタンスの接続名}=tcp:0.0.0.0:3306 -credential_file=/config/${作成したサービスアカウントキーのファイル名}
  wordpress:
    depends_on:
      - sql_proxy
    image: wordpress:latest
    ports:
      - "8000:80"
    restart: always
    environment:
      WORDPRESS_DB_HOST: sql_proxy:3306
      WORDPRESS_DB_USER: root
      WORDPRESS_DB_PASSWORD: hogehoge
```
今回はMySQLを使っているので、ポート番号は3306となります。

## 接続確認
ファイルの準備もできたら、あとは`docker-compose up`でコンテナを起動するのみです。
```
$ docker-compose up -d
Creating wordpress_sql_proxy_1 ... done
Creating wordpress_wordpress_1 ... done
$ docker-compose ps
        Name                       Command               State                    Ports
---------------------------------------------------------------------------------------------------------
wordpress_sql_proxy_1   /cloud_sql_proxy -instance ...   Up      0.0.0.0:3306->3306/tcp,:::3306->3306/tcp
wordpress_wordpress_1   docker-entrypoint.sh apach ...   Up      0.0.0.0:8000->80/tcp,:::8000->80/tcp
```

無事WordPressへアクセス、初期設定することもできました。
![wp_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2697194/2214d004-fc0f-c907-685b-380d727ebc86.png)
![wp_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2697194/dea3f568-0217-ac3c-ab4e-832f4bc61409.png)

## 参考
- [Cloud SQL とは](https://cloud.google.com/sql/docs/introduction?hl=ja)
- [Cloud SQL Auth Proxy について](https://cloud.google.com/sql/docs/postgres/sql-proxy?hl=ja)
- [Cloud SQL Auth プロキシを使用して Cloud SQL for PostgreSQL に接続する](https://cloud.google.com/sql/docs/postgres/connect-instance-auth-proxy?hl=ja)
- [Cloud SQL Auth Proxy Docker イメージを使用した SQL サーバー クライアントの接続](https://cloud.google.com/sql/docs/sqlserver/connect-docker?hl=ja)
- [クィックスタート: Compose と WordPress](https://docs.docker.jp/compose/wordpress.html)