Cloudflare Workers は、SQL と NoSQL の両方のデータベースに接続してクエリできます。対象は次のとおりです。
- Cloudflare 独自のサーバーレス SQL データベース D1
- Postgres や MySQL などの従来型のホスト型リレーショナルデータベース。Hyperdrive(推奨)を使うと、アクセスを大幅に高速化できます
- Supabase、MongoDB Atlas、PlanetScale、Prisma などのサーバーレスデータベース
D1 は Cloudflare 独自の SQL ベースのサーバーレスデータベースです。Workers からのグローバルアクセス向けに最適化されており、ユーザーごと、テナントごと、エンティティごとなど、小さめ(10GB)のデータベースを複数使ってスケールアウトできます。一部のサーバーレスデータベースと同様、D1 の料金はクエリとストレージのコストに基づきます。
| データベース | ライブラリ / ドライバー | 接続方法 |
|---|---|---|
| D1 | Workers バインディング。Prisma ↗、Drizzle ↗、その他の ORM と連携 | Workers バインディング、REST API |
従来型のデータベースは、TCP ソケット でデータベースに接続する SQL ドライバーを使います。TCP は、PostgreSQL や MySQL など多くのデータベースがクライアント接続に使う事実上の標準プロトコルです。 これらのドライバーは、使い慣れた ORM ライブラリやクエリビルダーとも広く互換です。
これには、Supabase、Neon、PlanetScale(MySQL または PostgreSQL)など、PostgreSQL 互換または MySQL 互換のサーバーレスデータベースも含まれます。 これらには、ネイティブの TCP ソケットと Hyperdrive、または後述の サーバーレス HTTP ベースのドライバー のどちらでも接続できます。
| データベース | 連携 | ライブラリ / ドライバー | 接続方法 |
|---|---|---|---|
| Postgres | 直接接続 | node-postgres ↗、Postgres.js ↗ | データベースドライバー経由の TCP Socket。最適な性能には Hyperdrive を使用(任意、推奨) |
| MySQL | 直接接続 | mysql2 ↗、mysql ↗ | データベースドライバー経由の TCP Socket。最適な性能には Hyperdrive を使用(任意、推奨) |
サーバーレスデータベースは、背後のデータベースへの直接接続を提供する場合と、HTTP ベースのプロキシとドライバー(サーバーレスドライバーとも呼ばれます)を提供する場合があります。
PostgreSQL および MySQL のサーバーレスデータベースでは、使い慣れたネイティブのデータベースドライバーと ORM で背後のデータベースに直接接続できます。接続の高速化とコネクションプーリングには Hyperdrive(推奨)を使います。Hyperdrive を使うと、接続プールは Cloudflare の全リージョンで管理され、Workers からの利用向けに最適化されます。
データベースプロバイダーが管理する HTTP ベースのプロキシへは、サーバーレスドライバーライブラリでも接続できます。従来型の SQL データベース向けのコネクションプーリングを提供し、セキュアな接続を確立するための往復回数を減らす点は、Hyperdrive と似ています。
| データベース | ライブラリ / ドライバー | 接続方法 |
|---|---|---|
| PlanetScale ↗ | Hyperdrive (MySQL)、Hyperdrive (PostgreSQL)、@planetscale/database ↗ | mysql2、mysql、node-postgres、Postgres.js、またはクライアントライブラリ経由の API |
| Supabase ↗ | Hyperdrive、@supabase/supabase-js ↗ | node-postgres、Postgres.js、またはクライアントライブラリ経由の API |
| Prisma ↗ | prisma ↗ | クライアントライブラリ経由の API |
| Neon ↗ | Hyperdrive、@neondatabase/serverless ↗ | node-postgres、Postgres.js、またはクライアントライブラリ経由の API |
| Hasura ↗ | API | fetch() 経由の GraphQL API |
| Upstash Redis ↗ | @upstash/redis ↗ | クライアントライブラリ経由の API |
| TiDB Cloud ↗ | @tidbcloud/serverless ↗ | クライアントライブラリ経由の API |
必要なパッケージをインストールしたら、各パッケージが提供する API でデータベースに接続し、操作します。サービスごとの手順は、詳細リンクを参照してください。
データベースに認証が必要な場合は、Wrangler のシークレットで認証情報を安全に保存します。次の wrangler secret コマンドで、Cloudflare Workers プロジェクトにシークレットを作成します。
wrangler secret put <SECRET_NAME>コードでは、次のスニペットでシークレットの値を取り出します。
const secretValue = env.<SECRET_NAME>;シークレットの値を使って外部サービスに認証します。たとえば、外部サービスが API キーやデータベースのユーザー名とパスワードを求める場合は、該当サービスのライブラリまたは API でこれらを含めます。
mTLS 認証が必要なサービスでは、mTLS 証明書 でクライアント証明書を提示します。
- Hyperdrive で 既存の PostgreSQL データベース に接続する方法を確認します。
- Workers で使える ほかのストレージオプション を確認します。
- Cloudflare D1 で 最初のデータベースを作成 します。