MySQLデータベースをAmazon RDSからPlanetScaleに移行してコストを削減

MySQLデータベースをAmazon RDSからPlanetScaleに移行してコストを削減

PlanetScale
Amazon RDS
Ruby on Rails
AWS
RDB
MySQL

概要

Ruby on Railsアプリケーションのデータベースを、RDSからPlanetScaleに移行することでコストを削減しました。

目的

Amazon EC2とAmazon RDSを利用してWebサービスを運営していましたが、本番環境とステージング環境を常時起動する構成だったため、費用がそれなりにかかっていました。

サーバーレスRDBであるPlanetScaleを使うことで、データベースの本番環境のコストを削減しつつ、検証環境のコストを無料にすることを目指しました。

また、移行前のMySQLのバージョンは5.7であり、8.0へのアップデートも同時に行う計画としました。

実施作業

  1. 移行後の費用を試算
    • 移行することで現状のインフラ費用がどの程度まで減らせるのかを試算しました。
  2. PlanetScaleの詳細調査
    • 照合順序が固定( utf8mb4_0900_ai_ci )だったり、外部キー制約が使えなかったり等の制限について詳細を調査しました。
    • ダウンタイムなしで本番環境のデータベースのスキーマに変更を加えるSafe migrations機能について調査しました。
  3. MySQLのアップデートに伴うEC2の設定変更手順の構築
    • Amazon EC2上のRuby on RailsからMySQL 8.0系に接続するために必要なパッケージのアップデート手順をまとめました。
  4. PlanetScale契約支援
    • PlanetScaleの契約面の手続きの支援を行いました。
  5. PlanetScale初期設定
    • PlanetScale上でのデータベースの作成、ブランチの作成、接続のための認証情報の発行、利用ORMの設定、Safe migrationsの設定等を行いました。
  6. データ移行
    • 1時間程度のダウンタイムを設けて、RDSからデータをエクスポートしてPlanetScaleにインポートしました。
  7. 旧系統の削除
    • 予期しない不具合に備えて一定期間旧系統を維持した上で、旧系統のリソースを完全削除しました。

システムの構成

変更前のアーキテクチャー

Untitled.png

変更後のアーキテクチャー

Untitled.png

コスト削減結果

当時の為替レートでの計算で、約61.9%の費用削減に成功しました。

旧アーキテクチャーではRDSのリザーブドインスタンスを利用してコスト削減した上でこの価格でした。

月額削減率
旧アーキテクチャー¥19,388-
新アーキテクチャー¥7,38861.9%

所感

PlanetScaleは高パフォーマンスなサーバーレスRDBで、コネクションプーリング機能も内包されているのでサーバーレス(Lambda, Next.js等)と組み合わせて使うパターンも選びやすいです。管理画面上でクエリを分析できたり、インデックスをつけるべきカラムを教えてくれたりという機能もあり、RDSのメトリクスよりも便利に運用できる印象です。

照合順序が選べない点や、データベースをプライベートなネットワークに配置できない点が懸念となりますが、要件的に問題ない場合は積極的に活用したいです。