Alibaba CloudのPolarDBの徹底分析(5)_PolarDBを実際に使ってみます

今回はalibaba cloudのマネジメントコンソールから実際にPolarDBのインスタンスクラスターを作成し、機能面を検証してみます。
そもそもPolarDBをあまり知っていない方は先に以下の記事をご確認してからこの記事を読んで頂くことをお勧めします。

https://qiita.com/dennis_wang/items/eff3a3993e4b590cfaca

https://qiita.com/dennis_wang/items/2b92122841817a2657dd

https://qiita.com/dennis_wang/items/7ce9b4954a7a70a4a89b


# データベースclusterの作成
- PolarDBのwebコンソール画面で、Tokyoリージョンを選択した上で「Create Cluster」ボタンをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/51e2bbbc-4b21-a551-2786-8df6e258d709.png)

## 必要な情報を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/aa34fb63-5d25-6b3f-0002-66a39f3b156d.png)
- Product Type(課金方式)：

    |比較項目|Subscription|Pay-As-You-Go(従量課金)|
    |--------|:-----:|:----:|
    |支払いタイミング|前払い|後払い| 
    |決済サイクル|週／月／年|１時間|
    |柔軟性|低|高|
    |平均単価|低|高|
    |利用シーン|長時間利用|短時間利用|
    |料金滞納リスク|なし|あり|
    |即リリース(削除)|不可|可能|
:::note info
Storage Planについて：
PolarDB のストレージ容量は、保存されたデータ量に基づいて自動的にスケールインまたはスケールアウトされます。 
つまりPolarDBインスタンスを作る時にストレージ容量を手動で指定しておく必要がなくて、実際に使用されているストレージに対してのみ課金されます。
大量のデータを保存する場合(1,000GB を超える場合など)は、PolarDB ストレージプランを購入することでストレージコストを削減できます。
:::

https://www.alibabacloud.com/help/en/polardb-for-mysql/latest/purchase-a-storage-plan

- Creation method：
clusterは複数のノード(一つのprimary node、複数のread-onlyノード)から構成されるものです。
Pimary ClusterやSecondary Clusterや既存のRDSから移行などいくつか作成方法がありますが、今回はゼロからclusterを作るため、「Create Primary Cluster」を選択します。
- Primary Availability Zone：
    - どちらのAZをmainのAZにするかという選択肢、ECS(アプリケーション・サーバー)は一台しかない場合は、ECSサーバーと同一AZをprimary AZに指定すべきです。それ以外の場合は、どちらのAZを選択しても違いがないだろう。
- Edition:
    - 開発環境やテスト環境で利用できる`Single Node`版もありますが、可用性の観点を考えると、本番環境ではなるべく`Cluster`を使ったほうが無難でしょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/121840e5-6610-c59e-bfd5-b81f2a795fa7.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/d5fa2ce0-9292-4a9c-27ea-3ea23570c4e5.png)

- Nodes:
    - cluster作成する時には2つのNode(pimary 1台 + read-only 1台)が作られます。2台以上のread-onlyノードを使いたい場合は、cluster出来上がってから手動で再度read-onlyノードを追加できます。
- Number:
    - 一回は複数のclusterも作れますが、今回は1のままにします。

それ以外のところは基本的にデフォルトのままにしておきます。
- 設定した内容を再度確認し、規約のチェックボックスを選択し、activateします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/6d3b7bb9-160c-492a-cb59-5653f27f8d04.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/4dc1a5e6-c42d-039f-8000-f367a1ccef0c.png)

- PolarDBのコンソール画面で状況を確認(StatusはRunningになり、つまり使えるまでは5分程度かかった。)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/a9fe8083-e331-ff12-4c3e-625d41123d47.png)

## clusterの詳細画面を確認
UIは非常にわかりやすくて、clusterの構成は一目瞭然で分かります。
最初この画面を見た時には結構感動した。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/c11559b1-1907-230a-c17d-eea8972bc829.png)
- ２つのnode(一つのprimary node + 一つのread-only node)が作られた。
- デフォルトで２つのエンドポイント(primary endpoint一つ、cluseter endpoint一つ)
両者の違いについては以下をご参考ください。

https://qiita.com/dennis_wang/items/eff3a3993e4b590cfaca#%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6

- storageはzone Aとzone Bの２つのzoneに分散されている。
- 以下の赤い部分をクリックすると、リストで表示するUIに変更することもできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/c19f8395-a94a-5da7-1737-02910c722cae.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/15dca27b-2da2-79dd-137b-4da6b0b10a23.png)
- storageは２つのAZに分散されますが、instance(node)は現在は一つのAZ内で構築される。
    - 可用性よりは性能を重視にしてcluster内の全nodeは一つのAZで構築するということだそうです。
    - 以下のページによると、将来はinstanceも複数のAZに構築できるようになるかもしれない。

https://www.alibabacloud.com/help/en/polardb-for-mysql/latest/multi-zone-deployment

- VPC-facing EndpointとPublic-facing Endpointについて
    - VPC-facing Endpoint： VPC内部のコンポーネント、例えばESCからアクセスできるエンドポイント
    - Public-facing Endpoint：
        - インターネットから直接アクセスできるエンドポイント
        - 本番環境は直接インターネットからアクセスしてしまうとセキュリティ面で問題があるが、テスト環境であれば、そこまで問題ないだろう。
        - 初期はこのEndpointが自動的に作られていない。`Apply`リンクをクリックして数分経てば、endpointが作られます。
        ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/1cd5dadd-864b-9558-f235-4d1daca49d4c.png)
        ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/43d4eb5a-6fc1-9736-62a9-26bfe3f08eb2.png)
        ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/48570937-3b68-645c-61a3-605c5dad2a18.png)

- AWSのRDSやAuroraを外部接続可能にするにはsubnet自体をpublicにする必要もありますし、インスタンス自体も再起動？してしまい、数分使えないことを比べると、PolarDBで気軽にPublic-facing Endpoint作れるの非常に嬉しいです。

https://qiita.com/ksugahara08/items/c5e76e400d1fbf736416

## databaseのuserアカウントを作ってみる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/dbf97c4a-4266-3a5a-389c-3f0472471b7f.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/a3d6ac20-e780-b668-aeb6-09150c592fda.png)
- Account Type:
    - Privileaged Account(管理者user)： clusterごとにひとつしか作れない。他の一般userのアカウントも作れる管理者user
    - Standard Account(一般user)：複数作られて、指定した権限しかありません。

## ローカルPCからデータベースに接続
今回はローカルPCからインターネット経由でデータベースに接続してみます。
- 先に`Whitelists`に自分のglobal IPを許可しておきます。
    - 初期は`127.0.0.1`のIPしか許可されていない。そのIPはpolardb instace自体のIPです。つまり外からはそもそもアクセスできないということです。
    - `127.0.0.1`の後ろに自分のglobal IPを追記します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/37943622-0103-28e7-9393-89d940ea10a4.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/05e96a0f-c985-bc58-118f-a148c487993c.png)

- 以下のように接続できました。
```
$ mysql -h **.japan.rds.aliyuncs.com -u ** -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 536884410
Server version: 8.0.13 Source distribution

Copyright (c) 2000, 2022, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| __recycle_bin__    |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
```

# clusterの削除
不要になったら、「Release」ボタンをクリックして、clusterを削除しましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/520b76b9-86bd-de46-bcb0-9515e655311e.png)
backupはどうするかという選択です。今回はテストの目的なので、すべてのbackupを削除します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/bdb52457-3241-5fb8-6acf-d46bc9bb513a.png)


# まとめ
今回は数クリックで2 nodeの簡単なclusterを作って、接続まで確認できました。
これからはbackup＆restoreについて解説してみます。