概要
Render.comでデプロイしたRailsアプリにおいて、
RenderのPostgre無料枠(1ヶ月)が期限切れとなったため、
Neon(PostgreSQL)へ移行しました。
本記事では、
- 無料枠期限切れ時の挙動
- データがない状態での移行手順
- Render側で必要な設定変更
についてまとめます。
注記
⚠️ Renderでデプロイ済みのアプリにおいて、DBサーバーのみを移行したい人向け
⚠️ 今回は開発中でDB接続済みですが機能未実装でDB未使用だったため、ダンプ作業等は行っていません。必要に応じて調べてください
環境
- Ruby on Rails
- Render.com(Web Service)
- Render Postgre(Free → Expired)
- Neon(PostgreSQL)
発生した事象
RenderのDB無料枠は作成から約1ヶ月で期限切れになります。
放置していたら、1ヶ月を超過しました。
期限切れ後、連携したGitHubのリモートリポジトリを編集するとデプロイエラー。
RenderのWebサービス側の「Events」ページに、「Deploy failed」を確認。
ログを確認すると、やはりDB接続エラー。
RenderのDBサービス側を確認すると、「expired(期限切れ)」、状態は「suspended(一時停止中)」 となっており、以下の案内が表示されていました(以下翻訳)。
・「データベースの有効期限が切れています。再開するには有料インスタンスにアップグレードしてください」
・「14日以内に有料インスタンスへアップグレードしない場合、データベースとすべてのデータが削除されます」
※Webサービス自体は起動するが、DB接続エラーによりデプロイが失敗する点に注意
移行を決めた理由
- RenderのDB無料枠は短い(1ヶ月)
- 期限切れ後は有料化しないと復旧できない
- 今後も個人開発を続ける予定だった(そして有料化はくるしい)
ということで、今回は Neon(PostgreSQL) に移行することにしました。
※NeonはサーバーレスなPostgresデータベースを提供するDBaaS(Database as a Service)です。東京リージョンはなし。無料枠あり(補足に記載)
移行方針
今回の対応方針は以下です。
- Neonの無料枠を利用する
- DBにデータは存在しないため、ダンプは不要
- Rails側のコード変更は行わない
- バックエンドサーバーは引き続きRenderを使う
NeonでのDB作成
1.公式サイトにアクセス。
2.「Start for free」をクリック。
3.「Create your free account(アカウント作成)」。※私はGitHub連携
4.Neonの管理画面から新規プロジェクトを作成します。
「New Poject」→ Create project画面で下記設定
- Project name:my-app-db のように適宜
- Postgres version:※今回デフォルトまま
- Cloud service provider:※今回デフォルトまま
- Region:Singapore
※今回はRender(Web Service)にあわせてRegionをシンガポールに
5.Render接続に必要な情報をコピーします。
「Connect」→ psql欄のconnection stringの''内をコピー or 「Copy snippet」でコピペして、''内をコピー
Render側の設定変更
1.Renderの管理画面から、Web Serviceの Environment Variables を開く。
2.「Edit」を選択し、以下の設定を行う。
- DATABASE_URL:コピーしたNeonのconnection stringの''内で上書き
※今回Rails側の変更特になし
(GEMFILEで'pg'、config/database.ymlを一応確認、デプロイ時に対応済み)
動作確認
環境変数を保存すると、自動で再デプロイが走ります。
以下を確認しました。
- RenderのログにDB接続エラーが出ていないこと
- アプリケーションが正常に起動すること
- Webページが問題なく表示されること
以上をもって、Neonへの移行完了としました。
補足:CU, CU-hour, CU-hours / project
-
CU(Compute Unit)
=CPUとメモリ量をまとめた データベースの性能サイズを表す単位
例:1 CU = 1 vCPU + 4GB RAM -
CU-hour(CU時間)
=CU × 利用時間(時間)で計算されるリソース使用量の単位
例:2CUのDBを3時間稼働 → 6CU-hours消費 -
CU-hours / project
=1プロジェクトあたりのCU-hours月間利用量
例:100CU-hours/project無料 → 1プロジェクトあたり月100CU-hoursまで無料で利用できる
※CUは「データベースのパワー」、CU-hourは「そのパワーをどれくらいの時間使ったか」を表す指標です。
補足:Neonの無料プラン(2025年12月時点)
100 projects
100 CU-hours per project
0.5 GB per project
Sizes to 2 CU(8 GB RAM)
100プロジェクト、プロジェクトあたり100CU時間、ブランチあたり0.5GBのストレージ、5GBのエグレス(送信)が含まれます。
参考記事・サイト
https://qiita.com/kurochannn/items/778b78e78e0ad994e054
https://qiita.com/Nomukuuun/items/e2de99ed50b40cc27db9
https://qiita.com/tomada/items/8be6e0df7ad74ef59207