直接接続
概要
Prisma Postgresは、Prisma ORMまたはその他のORM、任意のデータベースライブラリ/ツールを介して接続する場合でも、アプリケーションに最適な選択肢です。Prisma ORMと一緒に使用する場合、Prisma Postgresには、組み込みのコネクションプーリングと統合されたキャッシングレイヤー(Prisma Accelerateにより提供)が付属しています。
別のツールを介して接続する場合は、従来のPostgreSQL形式に従った直接接続文字列を使用できます。
直接TCPを介してPrisma Postgresに接続する方法
直接接続文字列を取得するには、以下の手順を実行する必要があります。
- お使いのアカウントでプロジェクトを開く(または新しいものを作成する)
- アクティブなPrisma Postgresインスタンスを持つ環境に移動します
- プロジェクトのサイドナビでAPI Keysタブをクリックします
- Create API keyボタンをクリックします
- ポップアップで、APIキーのNameを入力し、Createをクリックします
- `postgres://`で始まる接続文字列をコピーします。これが直接接続文字列です
接続文字列
フォーマット
直接TCP経由でPrisma Postgresに接続する場合、接続文字列は次のようになります。
DATABASE_URL="postgres://USER:PASSWORD@db.prisma.io:5432/?sslmode=require"
USER と PASSWORD の値は、Prisma Postgres インスタンスの認証情報を生成する際に提供されます。。以下はサンプル値の例です。
DATABASE_URL="postgres://2f9881cc7eef46f094ac913df34c1fb441502fe66cbe28cc48998d4e6b20336b:sk_QZ3u8fMPFfBzOID4ol-mV@db.prisma.io:5432/?sslmode=require"
SSLモード
直接TCP経由でPrisma Postgresに接続する場合、SSLモードは必須であるため、TCP接続文字列に`sslmode=require`を追加する必要があります。
請求
直接TCPを使用してPrisma Postgresインスタンスに接続する場合、すべてのSQLクエリが課金対象の操作としてカウントされます。詳細は料金ページをご覧ください。
一時的な制限事項
アイドル接続のクローズ
Prisma Postgresは、長期間アイドル状態の接続を閉じます。アプリケーションでその状況が発生した場合、新しい接続を再開できます。(ほとんどのデータベースクライアントは自動的に再接続します。)
接続制限
直接接続は早期アクセス版であるため、以下の接続制限が適用されます。
スターター(無料) | プロ | ビジネス | |
---|---|---|---|
接続制限 | 最大20 | 最大20 | 最大20 |
クエリとトランザクションのタイムアウト
直接接続は早期アクセス版であるため、以下のタイムアウトが適用されます。
スターター(無料) | プロ | ビジネス | |
---|---|---|---|
クエリタイムアウト | 最大10秒 | 最大10秒 | 最大10秒 |
インタラクティブトランザクションタイムアウト | 最大15秒 | 最大15秒 | 最大15秒 |
制限されたユーザー権限
ユーザー権限は、読み取り、書き込み、およびスキーマ変更に制限されています。個別のデータベースを作成したり、ユーザーやロールを管理したり、その他の管理操作を実行したりすることはできません。
TCPトンネル
Prisma Postgresは、ローカルデータベースワークフロー用に設計された認証プロキシである@prisma/ppg-tunnel
パッケージを使用して、TCPトンネル経由で安全にアクセスできます。このパッケージは、ローカルTCPサーバーを介してPrisma Postgresへの安全な接続を確立し、トラフィックルーティングと認証を自動的に処理しながら安全なアクセスを可能にします。
これはPrisma Postgresの早期アクセス機能です。本番環境での使用は推奨されず、アプリケーションレベルのアクセスを意図したものではありません。
早期アクセス期間中は、TCPトンネルの利用は無料です。
前提条件
- お使いのマシンにNode.jsがインストールされていること
- `DATABASE_URL`という環境変数として設定されたPrisma Postgresデータベース接続文字列
環境変数のエクスポート
トンネルは、Prisma Postgresインスタンスの接続URLとして`DATABASE_URL`環境変数が設定されていることを前提としています。`.env`ファイルに`DATABASE_URL`が既に設定されているプロジェクトからトンネルコマンドを実行している場合は、トンネルが自動的にそれを検出するため、この手順をスキップできます。
ターミナルセッションで一時的に`DATABASE_URL`環境変数をエクスポートするには
- macOS
- Linux
- Windows
export DATABASE_URL="prisma+postgres://accelerate.prisma-data.net/?api_key=API_KEY"
export DATABASE_URL="prisma+postgres://accelerate.prisma-data.net/?api_key=API_KEY"
set DATABASE_URL="prisma+postgres://accelerate.prisma-data.net/?api_key=API_KEY"
`API_KEY`プレースホルダーをPrisma PostgresインスタンスのAPIキーの値に置き換えてください。
TCPトンネルの開始
プロキシサーバーを開始するには、以下のコマンドを実行します。
npx @prisma/ppg-tunnel
Prisma Postgres auth proxy listening on 127.0.0.1:52604 🚀
Your connection is authenticated using your Prisma Postgres API key.
...
==============================
hostname: 127.0.0.1
port: 52604
username: <anything>
password: <none>
==============================
これにより、トンネルがランダムに割り当てられたTCPポートで開始されます。プロキシは認証を自動的に処理するため、任意のデータベース認証情報が受け入れられます。トンネルはトラフィックも暗号化するため、クライアントはSSLを要求しないように設定する必要があります。
これで、`psql`やTablePlus、DataGripなどのGUIクライアント、お気に入りのPostgreSQLクライアントを使用してPrisma Postgresエディタに接続できます。そのためには、上記の出力から`host`と`port`を提供するだけで済みます。TCPトンネルはPrisma Postgres接続URL内のAPIキーを介して認証を処理するため、`username`と`password`の値を省略できます。
ホストとポートのカスタマイズ
デフォルトでは、トンネルは`127.0.0.1`でリッスンし、ランダムなポートを割り当てます。Prisma Postgresデータベースへのアクセスを提供するため、信頼されたネットワーク内でのみ公開する必要があります。`--host`および`--port`フラグを使用して、カスタムのホストとポートを指定できます。
npx @prisma/ppg-tunnel --host 127.0.0.1 --port 5432
次のステップ
ローカルトンネルを使用すると、Postico、DataGrip、TablePlus、pgAdminなどのサードパーティデータベースエディタからPrisma Postgresにアクセスできます。詳細はこのセクションで確認してください。
セキュリティに関する考慮事項
TCPトンネルを使用する際は、以下の点に留意してください。
- トンネルはスキーマ管理(つまり、Prisma Migrate以外のDDLクエリ)をサポートしていません。
- トンネルは信頼できないネットワークに公開すべきではありません。
- APIキーは常に安全に保管し、ハードコードを避けてください。
- 必要なユーザーのみがPrisma Postgresデータベースに直接アクセスできるようにしてください。