はじめに
Supabaseから何やらデータベース接続についてメールが来ていました。
とりあえず英語はあまり得意ではないので、chatGPTくんに翻訳してまうと、
どうやら、IPv4およびpgBouncerを介した直接のデータベースアクセスを廃止して、新しい接続方式になるらしい。
とにかくタイムリミットが2024年1月15日(26日まで伸びましたが)だったので、X(旧twtter)でタイラー(@dshukertjrjp)さんに質問しながら急いで対応した備忘録を残します。
Supavisorの詳しい説明などは調べきれていないので、ここでは省きます。
この記事の対象
VercelでホスティングしているNext.jsからPrismaを使ってSupabaseに接続している方。
対応が必要な人
- PrismaなどのSupabaseのPostgresに直接繋いで使うサービスを使っている方。
- supabase-jsなどのクライアントライブラリーを使っている方は何もしなくて良いとのこと。
結局何をやればいいの?
「DATABASE_URL」を「Supabase」の「Database Settings」で二つ存在している「Connection String」で「Connection Pooling Connect to your database via connection pooling」の枠内にある方を使えばいいらしい・・・が、
公式のPrisma設定ドキュメントを見たら上記以外にもやることがありました。
書き換える箇所
- ローカル開発環境は「.env」、Vercelは「Project Settings」の「Environment Variables」
- schema.prismaファイル
まず、「DATABASE_URL」を、「Supabase」の「Database Settings」の「Connect to your database via connection pooling」の中にある「Connection String」に書き換えます。
末尾に「?pgbouncer=true&connection_limit=1」を付け加えるのを忘れないでください。
次に、新たに「DIRECT_URL」を、先ほどの「Connection String」のポート番号を「6543」から「5432」に書き換えたもので追加してください。
こちらは末尾に「?pgbouncer=true&connection_limit=1」を付け加えないでください。
DATABASE_URL=postgres://[db-user].[project-ref]:[db-password]@aws-0-[aws-region].pooler.supabase.com:6543/[db-name]?pgbouncer=true&connection_limit=1
DIRECT_URL=postgres://[db-user].[project-ref]:[db-password]@aws-0-[aws-region].pooler.supabase.com:5432/[db-name]
最後に「schema.prisma」の「datasource db」の項目を以下のように書き換えます。
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
directUrl = env("DIRECT_URL")
}
上記をデプロイすれば、これで対応は完了です。
AWSのIPv4アドレス無料提供終了について
こちらもタイラーさんのツイートに質問させていただきました。
結論としては今回のSupavisorの対応を行なっておけば、VercelからIPv4にアクセスする場合でも1ヶ月あたり$4の支払いは発生しないとのことです。
最後に
メンションもついていない何をすればいいかわからないと言うツイートを拾っていただき、丁寧にやり取りをしていただいたタイラーさんありがとうございました。