🐈

PlanetScale入門

2023/01/20に公開

PlanetScaleとは

公式サイトにはこう書かれています
PlanetScale is the world’s most advanced serverless MySQL platform

Google翻訳:
PlanetScale は、世界で最も先進的なサーバーレス MySQL プラットフォームです

いきなりですが 使ってみての感想

私は PlanetScale を使ってみてこのような体験をすることができました

  • 開発ブランチから本番ブランチへのスキーマ変更が簡単(デプロイが簡単)
  • デプロイの差分が GitHub と同じような見え方で直感的でわかりやすい
  • Amazon RDS と比較してWebコンソールの使いやすい
  • 手動バックアップやスケジュールバックアップの設定が簡単
  • DBへの接続方法が言語やツールごとに説明されている点や、Webコンソールからも接続でき親切さを感じた

特徴

  • サーバーレスである
  • 水平スケーリングできる
  • Vites が基盤であり MySQL 互換である
  • スキーマをブランチ管理できる
  • スキーマの差分がひと目で分かる など...

公式で Amazon RDS との比較 の記事もありました

料金プラン

料金プランは Hobby Scaler Team の3つあります
今回利用した Hobby は下記のようになっています

ストレージ: 5GB
読み込み/月: 10億回
書き込み/月: 1,000万回
本番ブランチ: 1つ
開発ブランチ: 1つ
同時接続数: 1,000接続
Query insights: 24時間
自動バックアップ: 毎日

ScalerTeam などの有料プランにすると各制限の上限が増えるほか シングルサインオン監査ログ の機能が利用できるようです

アカウントの作成

https://auth.planetscale.com/sign-up から SignUp できます
GitHub でも作成できるようですが、今回は Email で作成しました

PlanetScaleの特徴

メールアドレス認証を完了してログインすると PlanetScale の特徴が紹介されます。

Serverless databases

Google翻訳:
MySQL の信頼性とオープン ソースの Vitess のスケールを備えたフル マネージド データベースをわずか 10 秒でデプロイします。 組み込みの接続プールにより、データベースの接続制限に達することはありません。

PlanetScale’s proprietary Data Branching™ feature

Google翻訳:
データベースをコードのように扱います。 本番データベースを即座に分岐して、スキーマの変更をテストするためのステージング環境を作成します。

Non-blocking schema changes

Google翻訳:
PlanetScale のノンブロッキング スキーマ変更機能により、スキーマ変更を本番環境に安全にデプロイできます。 CI/CD プロセスの一部としてスキーマ管理を簡単に自動化できます。

Deploy requests

Google翻訳:
デプロイ リクエストを使用すると、スキーマの変更を提案し、チームからフィードバックを得ることができます。 行ごとのスキーマ差分により、変更を簡単に確認できます。
デプロイ リクエストと GitHub プル リクエストを組み合わせて、コードとスキーマの変更を並行して確認します。

Deploying a schema change

Google翻訳:
スキーマの変更が承認されると、デプロイ キューに追加されます。 PlanetScale は展開のタイムラインを提供し、キューに入れられたスキーマの変更が競合しないようにします。

Insights and monitoring

Google翻訳:
データベースの読み取りと書き込みを追跡するグラフを使用して、本番トラフィックを把握します。 クエリ インサイト機能を使用して、スロー クエリを特定して最適化します。
データベースを作成し、PlanetScale ワークフローを開始します。

DBの作成

Create your first database をクリック

DB名 と リージョン を設定して Create database をクリック
今回は sample_database という名前で Tokyoリージョン に作成してみました

DBに接続

接続情報の確認

まずは接続情報を確認します

DB 作成が完了すると DB の Overview タブ に遷移します
Connect をクリックして接続情報を確認します

パスワードは初回のみしか表示されません

パスワードを忘れてしまった場合は New password から新しく発行することができます
接続方法は丁寧にいろいろな方法が紹介されています

今回は TablePlus というGUIツール(Windowsの場合はMySQL Workbenchなど)を利用して接続してみたいと思います

接続方法で General を選択して下記の接続情報を確認できます
ここでは password は表示されません、先程の初回表示か New password で確認できます

  • database
  • username
  • host
  • password

TablePlusで接続

TablePlus を開いて Cerate a new connection... をクリック

MySQL を選択して Create をクリック

下記を設定して Connect をクリック

  • Name
  • Host
  • User
  • Password
  • Database

テーブル作成

試しに下記のようなテーブルを作成してみます

CREATE TABLE `users` (
	`id` int NOT NULL AUTO_INCREMENT,
	`name` varchar(255),
	`email` varchar(255),
	PRIMARY KEY (`id`)
) ENGINE InnoDB,
  CHARSET utf8mb4,
  COLLATE utf8mb4_0900_ai_ci;

PlanetScale のWebコンソールからもテーブルの数やスキーマを確認することができます

Overview タブで確認できます

Branches > ブランチを選択 > Console タブの CLI で確認できます

Branches > ブランチを選択 > Schema タブで確認できます

ブランチ

ブランチの作成

PlanetScale の特徴であるブランチの作成をしてみたいと思います

Overview タブから New branch をクリック

ブランチ名ベースブランチリージョンを設定して Create branch をクリック

ブランチが作成されると、作成したブランチの Overview 画面が表示されます

ブランチは矢印の場所で表示切り替えできます

Connection から作成したブランチの接続情報を確認して TablePlus で接続してみるとブランチを作成した時点の Base branch のスキーマが反映されていることが確認できました

Branches タブでは mainブランチ から先ほど作成した productionブランチ が作成されていることがわかります

本番ブランチの設定

先ほど作成せた production ブランチを本番用のブランチに設定したいと思います

Branches > ブランチを選択 > Promote a branch to production をクリック

本番ブランチに設定することで下記のようなメリットがあります

Google翻訳:

  • スキーマの直接変更から保護
  • 高可用性
  • 自動スケジュール バックアップ

デプロイ

開発用ブランチ(main) で行ったスキーマなどの変更を 本番ブランチ(production) にデプロイしてみたいと思います

開発ブランチにカラムを追加してみる

まずは開発ブランチの DB でスキーマを変更したいと思います
ここではmainブランチを開発ブランチとしています

TablePlus などで開発ブランチのDBに接続して age カラムを追加します
Schema タブでも age カラムが追加されていることが確認できました

デプロイリクエスト作成

開発ブランチ(main)本番ブランチ(production) へデプロイするためのデプロイリクエストを作成してみます

Overview > Deploy to本番ブランチ(production) を選択 > Create deploy request をクリック

デプロイリクエストの作成が完了するとサマリーを確認できる画面に遷移されます

ここでは変更のSQLなどを確認することができます
ageカラム を追加していることが確認できます

デプロイ実行

Deploy request タブ > 先程のデプロイリクエスト を選択 > Deploy changes をクリックしてデプロイが開始されます

デプロイが成功するとステータスが Deployed になります

実際に 本番ブランチ(production) のスキーマを確認してみると ageカラム が追加されていることが確認できます

スキーマの差分を確認

スキーマの差分を確認することもできます

Deploy request タブ > 先程のデプロイリクエスト を選択 > Schema chenges タブをクリック

ageカラム を追加したことがひと目で確認できます
GitHub と同じように見れるのでとてもわかりやすいです

モニタリング

Insights タブでは Query latency や Queries を24時間分確認できます
料金プランをアップグレードすることでより多くの履歴を表示することができます

バックアップ

バックアップには 即時バックアップが取れる 手動バックアップ と、スケジュールでバックアップを取得する スケジュールバックアップ があります

手動バックアップ

Backups タブ > 対象のブランチ(Production branches) タブを選択 > Create new backup をクリック

対象のブランチバックアップ名保存期間 を設定できます

バックアップが作成されるとバックアップ一覧で確認することができます

バックアップの詳細ページでは リストア削除 ができます

スケジュールバックアップ

ブランチを作成した時点でデフォルトで毎日のバックアップが設定されていますが、試しに毎週のスケジュールを作成してみたいと思います

Backups タブ > 対象のブランチ(Production branches) タブを選択 > Add new schedule をクリック

hours day weeks months が選択できます

weeks を選択すると曜日を選択する項目が表示されるので適当な曜日を設定して時刻を設定します
ここでは保存期間を1週間にしてみました

各項目を設定したら Save schedul をクリック

スケジュールが作成されてことが確認できます

参考

https://planetscale.com/
https://planetscale.com/vitess
https://planetscale.com/blog/planetscale-vs-aws-rds
https://planetscale.com/docs

Discussion