0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Supabaseのリージョン変更手順:新規プロジェクト作成による対応

Last updated at Posted at 2024-09-11

追記

この記事を書き終えた後に、公式ドキュメントでプロジェクトの移行手順が案内されているのを認識しました。

Migrating and Upgrading Projects | Supabase Docs

基本的には公式ドキュメントを参照していただくのが望ましいかと思います。
(一応、公式ドキュメントは情報が多く、かつ手順も異なりますので、簡易版ということで本記事はそのまま残しておこうかと思います。)

はじめに

WEBアプリのパフォーマンスを改善するために、Supabaseのリージョンを変更したいと思いました。しかし、Supabaseではプロジェクトのリージョンを直接変更することができないようです1

そこで、新しいプロジェクトを作成してデータや設定を移行することでリージョンを変更しました。この記事では、その手順を備忘録として記載します。

有料プランであればバックアップ機能が提供されていますが、私は無料プランを利用しているため、psqlコマンドを使用してバックアップを取得する方法を採用しました。

手順概要

  1. 本番DBのバックアップ
  2. 新規プロジェクトの作成
  3. 新規プロジェクトの設定
  4. 新規プロジェクトへのデータ流し込み
  5. ローカルから新規プロジェクトへ接続してテスト
  6. 本番環境を新規プロジェクトに接続してテスト
  7. 古いプロジェクトの整理

詳細手順

1. 本番DBのバックアップ

DB接続のテスト

まず、本番DBへの接続をテストします。

$ psql -h aws-0-ap-northeast-1.pooler.supabase.com -p 6543 -d postgres -U postgres.xxxxxxxxxxxxxxxx

接続情報の確認とdatabase passwordのリセットは、Supabaseのダッシュボードから行えます。
Dashboard > Settings > Databaseで確認できます。

接続できたら \q コマンドで抜けます。

DBのバックアップ

次に、pg_dumpコマンドを使用してバックアップを取得します。

$ pg_dump -h aws-0-ap-northeast-1.pooler.supabase.com -p 6543 -d postgres -U postgres.xxxxxxxxxxxxxxxx > temp/supabase_backup.sql

2. 新規プロジェクトの作成

Supabaseのダッシュボードから新規プロジェクトを作成します。今回はus-east-2(Ohio)リージョンを選択しました。

3. 新規プロジェクトの設定

新規プロジェクトの設定を行います。以下の項目について、元のプロジェクトと同じ設定を行います。

  • Authentication
  • SMTP
  • Email Templates
  • URL Configuration

4. 新規プロジェクトへのデータ流し込み

DB接続のテスト

新規プロジェクトのDBへの接続をテストします。

$ psql -h aws-0-us-east-2.pooler.supabase.com -p 6543 -d postgres -U postgres.yyyyyyyyyyyyyyyy

DBのバックアップのリストア

バックアップデータを新規プロジェクトにリストアします。

$ psql -h aws-0-us-east-2.pooler.supabase.com -p 6543 -d postgres -U postgres.yyyyyyyyyyyyyyyy < temp/supabase_backup.sql

5. ローカルから新規Supabaseへ接続テスト

ローカル環境の.envファイルを更新し、新規プロジェクトへの接続をテストします。

SUPABASE_DB_PASSWORD=xxxxxxxxxxxxxxxx
SUPABASE_SERVICE_ROLE_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
NEXT_PUBLIC_SUPABASE_URL=https://xxxxxxxxxxxxxxxxxxxx.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

6. 本番環境を新規Supabaseに接続してテスト

本番環境の設定を更新し、新規プロジェクトへの接続をテストします。環境に応じて設定方法が異なりますが、私の場合はNetlifyの環境変数を更新しました。

7. 古いプロジェクトの停止

最後に、古いプロジェクトを停止します。Supabaseダッシュボードの Settings > General > Pause project から行えます。

注意点とメモ

  • デフォルトで生成されるテーブルが重複して、"already exists"のエラーが多数出ました。ただし、デフォルトで生成されているauthテーブル等も移行したかったので、このエラーは許容して実行しました。

  • このアプリは、利用者が常時はいなかったため、この方法でなんとかなりました。実際に稼働していてデータが動き続けているシステムの場合は、メンテナンス時間を設けるか、一時的に新旧の同期を取るなど、別の手法が必要になると思われます。

  • DatabaseのFunctions、Triggers、Extensions、およびRLSのPoliciesは、この方法で問題なく移行できました。ただし、Roleは移行できていない可能性があります(デフォルトのまま使用していたため、特に不都合はありませんでした)。

おわりに

Supabaseのリージョン変更は直接行えませんが、新規プロジェクトを作成してデータを移行することで対応可能です。この記事が、同様の課題に直面している方の参考になれば幸いです。

参考資料

  1. Change Project Region · supabase · Discussion #16341

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?