Heroku の外部からの Heroku Postgres データベースへの接続
この記事の英語版に更新があります。ご覧の翻訳には含まれていない変更点があるかもしれません。
最終更新日 2022年12月20日(火)
Heroku Postgres データベースは、Heroku アプリと共に使用するために設計されています。すべての Heroku Postgres データベースには、対応する Heroku アプリケーションがあります。アプリケーションの名前は data.heroku.com のデータベースページで確認できます。データベースは Heroku アプリにアタッチされており、アプリケーション自体ではコードをホストしていない場合でも、データベース URL を含むアプリ環境設定を介してアクセスできます。この設定は Heroku によって管理され、データベースのネットワークの場所と資格情報は基本的にここから取得します。
ただし、Private tier と Shield tier のデータベースを除き、Heroku Postgres データベースはどこからでもアクセスでき、標準の Postgres クライアントを使用しているどのアプリケーションからも使用できます。Private データベースの場合、Mutual TLS を使用して外部アクセスを有効化できます。
Heroku アプリケーション以外の場所で Heroku Postgres データベースを効果的に使用するには、以下の点に注意してください。
資格情報を別の環境やアプリのコードにコピーして貼り付けないようにする
データベース URL は Heroku によって管理され、以下のような場合には変更されます。
- ユーザーが
heroku pg:credentials:rotate
を使用してデータベースの資格情報の変更を開始した。 - 壊滅的なハードウェア障害が発生し、Heroku Postgres のスタッフが新しいハードウェア上にデータベースを復旧する必要がある。
- セキュリティの問題または脅威に対処するため、Heroku Postgres のスタッフがデータベースの資格情報を変更する必要がある。
- HA 対応プランでの自動フェイルオーバーイベント。
データベース URL の環境設定は常に、アプリケーションの起動時に、対応する Heroku アプリから取得してください。たとえば、12 要素アプリケーション設定の原則に従い、Heroku CLI を使用して次のようにプロセスを起動できます。
DATABASE_URL=$(heroku config:get DATABASE_URL -a your-app) your_process
こうすれば、プロセスまたはアプリケーションで常に、正しいデータベース資格情報を確実に取得できます。
データベースをアドオンとして別の Heroku アプリにアタッチする
他の Heroku アプリからデータベースに接続している場合、複数のアプリケーションにデータベースアドオンを直接アタッチできます。これにより、データベースの URL の変更が確実に、自動で他のアプリに伝播します。
SSL を有効にする
アプリケーションから Heroku Postgres データベースに接続するには、アプリケーションで SSL をサポートし、有効にする必要があります。ほとんどのクライアントではデフォルトで SSL を使用して接続しますが、接続する前に sslmode=require
クエリパラメータをデータベース URL に追加することが必要な場合があります。
DATABASE_URL
環境設定の値を直接編集するのではなく、必ずコードからデータベースの URL に sslmode=require
パラメータを追加してください。(フェイルオーバーなどの) さまざまな自動イベントによって環境設定の値が変更され、編集内容が上書きされる可能性があるためです。
Heroku Postgres Backups を使用する
データベースの自動バックアップを取得するために、関連付けられた Heroku アプリで Heroku Postgres Backups を使用できます。Heroku アプリで DATABASE_URL
が指すデータベースのバックアップが Heroku Postgres Backups によって作成されるため、必ず次のようにしてデータベースをプロモートしてください。
heroku pg:promote HEROKU_POSTGRESQL_VIOLET --app your-app