GCP CloudSQL をお触りしてみた

本記事は [PostgreSQL Advent Calender 2019](https://qiita.com/advent-calendar/2019/postgresql)の3日目です。
# 本記事のテーマ
`Amazon Web Service RDS for PostgreSQL` に比べて圧倒的に記事が少ないことと、`Google Cloud Platform` を触れる機会に恵まれていることもあり、`Google Cloud Platform Cloud SQL for PostgreSQL` を **お触り**しましたので書きます。
**※2019/12/03現在の記事です。**
# 前置き
> Old Type の ITエンジニアなので、本題以外の記述がやたらめったら多いです。適宜読み飛ばしてください
 
- <details><summary>投稿の経緯（思い立ったが吉日）</summary>  
　2016年12月 アジアで初めてのpostgreSQLカンファレンス [**pgconf.Asia 2016**](https://www.pgconf.asia/JA/2016/) が開催されました。  
　私はその当時、お客さまと一緒にOSS活用を推進し、PostgreSQL を使用したシステム構築に携わっておりました。DBエンジニアの自負心がはみ出し、調子にのって、[ライトニングトーク](https://www.pgconf.asia/JA/2016/lightning-talk/)に申し込み、投票の結果、皆様のおかげで登壇することができました。  
　登壇を期にいろんな方とつながりを持ち、また、セミナーや勉強会などでお話をお伺いする機会も増えました。    
　ＯＳＳのコミュニティやその思想には大変感謝しており、日本のPostgreSQL界隈の**イケメン神さま**や**CUDA神さま**や**猫拉麺神さま**など、多くの神さまとお話させていただける機会に恵まれたと思っております。 
　この度、（ＬＴでしたけど）登壇した１２月３日と言う記念日に、**advent Calendar** を、勢いあまってポチりました。</details>  

- 投稿の経緯（真面目な経緯） 
**Amazon Web Service RDS**に関する情報は、いっときの**赤い**~~MS~~**DBMS** を凌駕するくらい豊富にありますが、**GCP/CloudSQL**に関する情報は少ないです。 
現職は **Google Cloud Platform(GCP)** をガッツリ使ったサービス開発をしております。 
GCPに触れる機会に恵まれていることからも、些細なことでも書くことで誰かのお役に立てることになれば。と思い立った次第です。 
ちなみに、現職のサービスはNoSQLで実装されており、RDBMSを全くと言っていいほど使ってません。  
**DBMSに賭けた人生、忘れ去ってなるものか！** と、自分を奮い立たせるためにもポチりました。 
稚拙ではございますが、少しでも活動の端に居続けさせていただければと思います。

# 本題
1. Cloud SQL for PostgreSQL について（2019/12/03現在）
2. インスタンス登録してみた
3. 追加で`pgAdmin4`で接続してみた
4. まとめ 

-----
## 1. Cloud SQL for PostgreSQL について
>サービス概要ではなく、PostgreSQL に関する部分について記載します。 

### 無料枠
- AWS/RDS  
  - Aurora, MySQL, MariaDB, Oracle, MS-SQLServer が選択できます
  - 無料枠は db.t2.micro+SSD20GB+DBSnap20GB で 750時間／月を12か月利用できます  
- GCP/CloudSQL  
  - DBMS は、MySQL, PostgreSQL が選択できます。アルファですけど、MS-SQLServerもお試し出来ます
  - $300 までか12か月間が無料
  - core数は8coreが上限で、それ以外は課金上限まで制限はないです
  - 冗長化やレプリケーションなどもお試しできます
  - `Always Free` プログラムがありますが、CloudSQLは対象外みたいです

### 選択できるPostgreSQLのバージョン
- AWS/RDS  
  原則、コミュニティでサポートされているバージョン・リビジョンは全て選択可能です
- GCP/CloudSQL  
  ~~9.6のみです:sob:。11.1はベータ扱いです~~（2019\12\11訂正）  
  11.1 と 9.6 が選択できます。  
  選択肢は少ないですが、迷いはなくなります！ 

### その他
- [入門ガイド](https://cloud.google.com/sql/docs/postgres/)が分かりやすい  
  最初にやらなくちゃいけないことなど、作業の順序を意識しやすい構成になっています

-----
## 2. インスタンス登録してみた
### 最初にしておくこと
- Googleアカウントの登録  
  GmailやAndroid端末をお使いの場合のGooglePlayのアカウントで大丈夫です
- 本人確認用のクレジットカード
- Google Cloud Platform へアカウント登録  
  [トップページ](https://cloud.google.com/)から`無料トライアル`ボタンをポチって登録してください 

>プロダクションで利用するときは、プロジェクトの設定やユーザＩＤや権限管理を登録したり、仮想プライベートネットワークを設計実装したりといろいろあります。
>お試し程度で利用する場合、なんとなくいい感じに設定してくれます。

### Google Cloud Platform CloudSQL インスタンスの登録
> パブリッククラウドサービスのインスタンス作成なんて、書くほどのことじゃないですけど

- いきなり[クラウドコンソール](https://console.cloud.google.com/)から作成してもいいのですが、[入門ガイド](https://cloud.google.com/sql/docs/postgres/)から進むと、操作の前後で何が起きるのか。など凄く分かりやすいです
![AdvCal-Fig3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321061/13febf63-8dc9-bb94-5fc6-a9bc27848fb0.png)

- インスタンス登録は、３つの操作方法で登録することができます
  - CONSOLE --> WebのGUI操作
  - GCLOUD  --> ローカルに`Cloud SDK`を導入し、CLIで操作
  - CURL --> curlコマンドなどを利用した、WebAPIで操作

>今回は`CONSOLE`で作成しました

- インスタンスＩＤ，postgresユーザのパスワード、リージョンとゾーン、データベースバージョンなど設定して登録
- 約１分でインスタンスが起動します
![AdvCal-Fig4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321061/50bfb53b-0989-848d-fc86-0d4e9047e576.png)

- インスタンスにラベルを付けておくと、請求書にも内訳として記載されたり、後々いろいろ活用できます
![AdvCal-Fig5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321061/37816aa0-58ed-d6ab-118f-6d81e24c19bf.png)

- 起動出来たら、クラウドコンソールでインスタンスの詳細を確認します
  - AWSコンソールもそうですが、見慣れるまでどこに何があるのか？把握しづらいものですね

![AdvCal-Fig6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321061/b38fe7ed-1a98-e1d1-e0af-c2ad78c89d6e.png)

### その他
- パブリッククラウドでサービスを起動すると、Old Typeな元インフラエンジニアとしては、職を失った気持になります
- OSカーネルパラメータまで触ってゴリゴリチューニングしなくても済むのはビジネスとして良いですが、`基本のき`を知っているとパブリッククラウドであっても色々役に立つことがあります
- OS上のファイルシステムバッファーとDBMSのバッファーをキャッシュヒット率を見ながら、絶妙なメモリ配分をするとかは、ロストテクノロジーになっていくと思うと寂しさあります

-----
## 3.追加で`pgAdmin4`で接続してみた
クラウドコンソールは良く出来ていて一般的にPostgreSQLを運用するには十分だと思います 
ただ、テーブルの統計情報だったり、DDLの確認だったり、使い慣れたコンソールが必要なこともあります 
そして、 Old Typeな元インフラ~~園児~~エンジニアには、自分のPCで管理したくなる衝動に駆られるものです 
WindowsPCでなくても利用できるようになったpgAdmin4をubuntuに導入し、接続してみました 
>ubuntuへの導入手順はググればたくさん出ますが、また別途記事にできたらと思います

### パブリッククラウド側の設定
Google AppEngine(GAE)や Google Compute Engine(GCE)などのサービスで利用するのは簡単です（今回は省略）
GCP/CloudSQL for PostgreSQLでは、外部アプリケーションとの接続にいくつかの方法があります。

- パブリックＩＰ（グローバルＩＰ）を直接アクセス（平文通信とＳＳＬ通信が選択出来る）
- Cloud Shell を利用したpsql実行
- Cloud SQL Proxy を利用した接続  
  個別にファイアーウォールを設定しなくてもパブリッククラウド間接続やオンプレミスアプリケーションとの接続を簡単かつ安全に行えるサービスです
- JDBCソケットライブラリによる接続  

>今回はパブリックＩＰを直接アクセスする方法で行いました  

- ネットワーク（ファイアーウォール）の設定。5432ポートを誰に見せるのかのルールを追加します
  - とりあえず、0.0.0.0/0 で、来るもの拒まずで設定しました
- クラウドコンソールのインスタンスの詳細にある接続設定でパブリックＩＰを選択し、自分のプロバイダから払いだされたグローバルＩＰアドレスをえいやー！と24bitマスクで設定しました。PPPoEが再起動すると使えなくなりますけどね

### pgAdmin4の起動
- pgAdmin4では、serverの追加で、クラウドコンソールのインスタンスの詳細に表示されるパブリックＩＰアドレスを直設定します
- 設定したserverを選択すると、postgres ユーザのパスワードが聞かれます
- それ以降はオンプレミス環境と同じ設定操作で**いとも簡単**に接続できました:relaxed:
- CloudSQL固有のオブジェクトも見ることができたり、色々ムフフ:yum:な感じです
- オンプレミス環境にpgAdmin4 を起動しておけば、ハイブリッドなクラウド環境も統合的に管理できそうです
- Import/Export もそのままできそうなので、リフトアップも従来のサーバ移行と同じ感覚で出来そうです
![AdvCal-Fig7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321061/ff878f11-ace7-e1b8-77ba-660feb9663f2.png)

-----
## 4.まとめ
- [入門ガイド](https://cloud.google.com/sql/docs/postgres/)のまとめ方がとても分かりやすく、作業手順としても十分活用でき、新たな人への指導書・引継書として十分活用できる
- Google Cloud Platform では、postgreSQLのバージョンの選択肢は少ないがゆえに、迷いは少なくて済む
- クラウドサービスであっても、pgAdmin4がすんなりつながるところから、postgreSQL には変わりない（当たり前）
- 環境構築はパブリッククラウドなのでとても簡単。~~Old Type のインフラエンジニアは不要になってくるが、~~簡単がゆえに接続設定やインスタンスの配置、ユーザＩＤや権限管理（ＩＡＭ）を丁寧に設計しないと、すぐ乗っ取られそう
- 今回は書いてないですが、[contrib](https://cloud.google.com/sql/docs/postgres/extensions)には一般的なツールはそろっており、派手な拡張はできそうにないですが、一般的なpostgreSQLとしては十分活用できる
    -  [ここで](https://cloud.google.com/sql/docs/postgres/extensions)`Me too`すると、拡張モジュールを追加してもらえるかもしれません（追加されると信じてます）
- 今回は書いてないですが、ほとんどのDBパラメータは設定可能で、ある程度のチューニングはできそう

-----
<details><summary>5.裏まとめ</summary>
- ネタだけ考えて、やってみたら余りにも簡単すぎて何も書くことが無くなってしまった
- もう少し、postgreSQLの機能的なところを書きたかったですが、時間切れでした
- 今回の投稿に際し、少し高めな目標を自分で設定し、自分を追い込んで作業すると効率は最大限になりますね
- お金を貰うプロとしてエンジニア歴30年を超えました。年寄の部類ですが、日々精進、日々研鑽で活躍されている皆々さまについていけるところまで必死についていこうと思います
- 余りにも実のない投稿になってしまったことを反省しお詫び申し上げます</details>