4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWS RDSからsupabaseへの移行方法(Laravelの設定方法も含む)

Posted at

目的

AWS RDSからsupabaseへの移行方法を解説します。
Laravelを EC2上で動かしているので、アプリケーション側の設定方法も一緒に解説します。

背景

個人開発で使っていたAWS RDSが、無料枠が終了し月額USD 47.76かかっていました、、、
データベース料金の節約のため、移行を検討しました。

調べてみると、データベースをそもそも使わない考え方やレンタルサーバー上でDBエンジンをインストールしDBを構築する方法など、色んな節約方法が存在していることを知りました。
会社では、RDSを使用した案件しか参加したことがなく、データベース=マネージドなクラウドサービス(RDSなど)と、DB構築を脳死で決めてました、、、

その中、PaaSという脳死エンジニアでも今までの運用のまま使用できる存在を知り、最終的にsupabaseを選びました。
数あるPaaSのデータベースサービスの中で、supabaseを選択した理由は以下の通りです。

  • Postgresデータベースである
  • 無料枠がある(7日間放置すると停止するらしいが、バッチ処理で対応できる)
  • 東京リージョンがある(海外リージョンだとレスポンスタイムが10倍くらいになることがある)
  • PaaSのデータベース界隈では割と老舗らしい

個人的な興味としては、neonのブランチ機能が面白そうだと思ったのですが、一番近いリージョンがシンガポールということで今回は諦めました。(今後、東京リージョンが追加される噂もある)

移行手順

下記の作業を行います。

  • supabaseのアカウント、プロジェクトの作成
  • 稼働環境のバックアップ準備
  • RDS→supabaseにデータを移行
  • LaravelのDB接続設定を変更
  • 動作確認

では、順番に作業開始します。

supabaseのアカウント、プロジェクトの作成

supabase へのサインインを行います。
サインインは GitHub アカウントを介して行えます。以下からサインインを行なってください。
GitHub アカウントをもっていない方は作成してからサインインを行なってください。
https://supabase.com/dashboard/sign-in

サインインできたら、新規プロジェクトの作成を行います。

FireShot Capture 023 - Supabase - supabase.com.png

  1. supabaseのダッシュボードのTop画面からNew Projectボタンをクリックし、そこから出てくるポップアップ内の〇〇's Orgボタンをクリック
  2. Project name(プロジェクト名)Database Password(データベースのパスワード)Region(リージョン)をそれぞれ入力
    • Project name(プロジェクト名): 動作にあまりかかわらないので単純にわかりやすい名前を入力
    • Database Password(データベースのパスワード): データベースにアクセスするときのパスワード。複雑な文字列が望ましい
    • Region(リージョン): サーバーの地理的に近いところが良いと思います。Northeast Asia(Tokyo)にしました
  3. Security optionsをクリックしてアコーディオンを開き、Only Connection Stringを選択
    • Data APIを使用しないため、 Only Connection Stringを選択しました
    • Data APIは、簡単に言えばsupabaseが提供するDBを操作するためのRest APIであり、今回は一般的なDB接続を行うため不要と判断しました

稼働環境のバックアップ準備

EC2のAMIとRDSのスナップショットを取得して、万が一に移行失敗した際のバックアップ体制を用意しておくと安全です。

RDS→supabaseにデータを移行

事前準備: pg_dumpのバージョンアップ

RDSのバージョンに合わせる必要があるため、ずれている場合は、pg_dumpのアップデートする。

下記記事を参考に実行しました。ここでは、細かい説明は省略します。

ステップ 1: データベースのバックアップ

  1. EC2にSSHかセッションマネージャを使用して接続します(RDSに接続できるのであればEC2でなくても大丈夫です)

  2. pg_dumpコマンドを使用して、Amazon RDS の PostgreSQL データベースのバックアップを作成します

    pg_dump <データベース名> -h <RDSエンドポイント> -U <ユーザー名> -W -F c -b -v -f <バックアップファイル名>.dump
    

ステップ 2: Supabase の設定

  1. Supabase のプロジェクトダッシュボードにログインし、先ほど作成したデータベースの設定画面(Settings > Database)を開きます
  2. Connection parameters欄のModeをSession Modeを選択します
  3. Connection parameters欄からデータベースの接続情報(ホスト、ポート、データベース名、ユーザー名、パスワード)をメモしておきます

スクリーンショット 0006-08-14 10.17.15.png

ステップ 3: データベースの復元

  1. pg_restoreコマンドを使用して、Supabase のデータベースにバックアップファイルを復元します

    pg_restore -h <Supabaseホスト> -U <ユーザー名> -d <データベース名> -v <バックアップファイル名>.dump
    

ステップ 4: 確認とテスト

  1. データが正しく移行されたことを確認します。Supabase のダッシュボードからデータベースにリストアしたデータが存在するか確認します

LaravelのDB接続設定を変更

  1. Supabase のプロジェクトダッシュボードにログインし、先ほど作成したデータベースの設定画面(Settings > Database)を開きます
  2. Connection string欄のタブをURIを選択します
  3. Connection string欄のModeをSession Modeを選択します
  4. Connection string欄からデータベースの接続情報の文字列をメモしておきます
  5. EC2にアクセスして、Laravelのenvファイルの接続設定を変更します(DATABASE_URLに先ほどメモした文字列をセットしてください。)
    DB_CONNECTION=pgsql
    DATABASE_URL=postgres://postgres.xxxx:password@xxxx.pooler.supabase.com:5432/postgres
    
  6. 下記コマンド実行でenvファイルを適用します
    $ php artisan config:cache
    $ sudo systemctl restart nginx
    

動作確認

Laravelのアプリケーション経由で、一通りの動作ができるか確認してください。
同時にsupabaseのダッシュボード画面からデータを参照できるので確認できると安全です。

参考資料

RDSからの移行作業についての公式ドキュメント: Migrate from Amazon RDS to Supabase
Laravelの設定作業についての公式ドキュメント: Use Supabase with Laravel

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?