新規投稿のお知らせを受信されたい方は、サブスクリプションをご登録ください:

Relational Database Connectorsのご紹介

2021-11-15

4分で読了
この投稿はEnglishFrançaisDeutsch简体中文でも表示されます。

Cloudflareでは、世界最高のコンピュートプラットフォームを構築しています。私たちは、お客様のアプリケーションを簡単に、シームレスに、そして明白に構築できるようにしたいと考えています。しかし、最高のコンピュートプラットフォームを作るだけでは十分ではありません。アプリケーションの核心は、それらがやり取りするデータです。

Cloudflareでは現在、複数のデータストレージソリューションを用意しています。Workers KVR2Durable Objectsの3種です。これらはすべてCloudflareのWorkerの設計目標である、「デフォルトでグローバル、無限のスケーラビリティ、開発者にとっての使いやすさ」に沿って作られています。Cloudflareは、この設計目標にぴったり合ったデータプラットフォームを構築したFauna、MongoDB、Prismaといったサードパーティのストレージソリューションと提携し、既にHTTP接続をサポートしているデータベース用のチュートリアルを書いています。

しかし残念なことに、これまで1つの分野が欠如していました。リレーショナルデータベースのサポートです。Cloudflare自身もリレーショナルデータベースで動作していますが、それは私たちだけではありません。4月に、どのNodeライブラリをサポートしてほしいかを尋ねたところ、トップ5のうち4つがデータベースに関するものでした。今回のフルスタック・ウィークでは、「どうすれば設計目標に沿った形でリレーショナル・データベースをサポートできるか」を自問しました。

Cloudflareは本日、そのための第一歩として、PostgresやMySQLを含む関係データベースをWorkersからサポートすることを発表します。

データベースへの接続は簡単な作業ではありません。データベースドライバに接続文字列を渡すだけの簡単な作業であれば、すでに実現していたでしょう。ここにたどり着くまでにいくつかのハードルを乗り越えて現在に至っていますが、まだ克服すべき課題がいくつかあります。

今回の発表の目的は、Workers内でデータベースにアクセスする際に生じるユニークな問題を、開発者である皆さんと一緒に解決することです。私たちと一緒に働きたい方は、このフォームに記入するかDiscord上でご参加ください。 — 取り組みはまだ始まったばかりです。これは始まりに過ぎません。コードを手にして遊びたい方は、こちらのサンプルを使って自分のデータベースに接続してみてください。また、私たちのデモもご覧ください。

Database Connectorsは難しいのか?

サーバーレスのデータベース接続は、いくつかの理由でサポートするのが困難です。

データベースは、アプリケーションサーバーとデータベースの間の長期的な接続を前提としているため、TCP接続を必要とすることがよくあります。Workersのランタイムは現在TCP接続をサポートしていないため、HTTPベースのデータベースやプロキシをサポートすることしかできませんでした。

人間関係のように、接続を確立するだけでは十分ではありません。開発者は、データベース用のクライアントライブラリを使用して、クエリの送信やレスポンスの管理を容易にしています。Workersのランタイムは完全にNode.jsと互換性があるわけではないので、独自のデータベースライブラリを作成するか、サポートされていないビルトインライブラリを使用しないライブラリを見つける必要があります。

最後に、データベースは繊細です。アプリケーションサーバとデータベースの間の共有接続を管理するには、外部ライブラリが必要になることがあります。

これらの課題を克服するために

現在とっているアプローチは、今後クリエイティブな方法でこれらの課題を一つ一つ解決していくための基盤となるものです。

まず、cloudflaredを利用して、クラウドフレアとお客様の既存インフラ内のプライベートネットワークとの間に安全なトンネルを構築します。私たちの課題は、既存のライブラリが期待するソケットインターフェースのようなインターフェースを提供することと、読み取りと書き込みを私たちのウェブソケットにリダイレクトするように実装を再配線することです。この方法は、高速かつ安全でセキュアですが、最終的な接続先を制御できないという制限があります。これは近いうちに解決する予定ですが、それまでは、レイテンシーとパフォーマンスのデータを収集し、どこを改善すべきかを検討するために、この方法が不可欠です。。

次に、WebSocket を使用してデータベースに直接接続するために、一般的なランタイムのソケット API を適応させる shim-layer を作成しました。これにより、データベースライブラリをフォークしたり、大幅に変更したりすることなく、コードをそのままバンドルすることができます。今回の発表の一環として、既存のCloudflareテクノロジーと、成長中のDenoコミュニティのドライバを使用して、WorkerからPostgresデータベースに接続してクエリを実行する方法のチュートリアルを公開しました。アップストリームのメンテイナーと協力してサポートを拡大していくのを楽しみにしています。

Leveraging Cloudflare Tunnels, we’re able to connect to a relational database

最後に、私たちが最も期待しているのは、このアプローチによってコネクションプーリングと接続確立のオーバーヘッドを管理できるようになることです。現在の技術デモでは、お客様自身のインフラでCloudflare Tunnelをセットアップする必要がありますが、Cloudflareがお客様のためにトンネルをホストするモデルを試験的に導入したいお客様を募集しています。

今後の予定

私たちはまだ始まったばかりです。本日の発表では、リレーショナルデータベースに保存されているデータを扱いながら、新しいアプリケーションの構築や既存のアプリケーションのWorkerへの移行を検討しているお客様を探しています。

Cloudflareがお客様のWebサイトにセキュリティ、パフォーマンス、信頼性を提供することから始まったように、Cloudflareがデータベースの接続を管理し、クラウドプロバイダー間のデータのレプリケーションを処理し、グローバルにデータへの低レイテンシーアクセスを提供する未来に期待しています。

まず、TCPのサポートをランタイムにネイティブに追加すること を考えています。TCPをネイティブにサポートすることで、データベースのサポートが強化されるだけでなく、Workerのランタイムを拡張して、より広範なデータインフラを扱うことができるようになります。

私たちは、ネットワーク層に位置することで、グローバルなデータベースに対して、パフォーマンス、セキュリティ、そして非常に低いエグレスコストを提供することが可能になります。そのためには、現在構築しているHTTPからTCPへのプロキシサービスを再利用し、開発者に代わってデータベースへの接続を管理するコネクションプーリングサービスとして実行します。

最後に、私たちのネットワークは、データをキャッシングし、低遅延でグローバルにアクセスできるようにします。お客様のデータをクラウドフレアのネットワークでグローバルにアクセスできるようにすることで、分散データのための根本的に新しいアーキテクチャを実現することができます。

当社のコネクターをお試しください

試してみたいですか?稼働開始まで3つのステップがあります。

  1. お客様のインフラにcloudflaredを導入します

  2. cloudflaredに接続するデータベースをデプロイします

  3. クエリーを送信するデータベースドライバーを備えたWorkersをデプロイします

Postgresに関するチュートリアルはこちら

完了時は以下のようになります。

何か問題がありましたら、 このフォームDiscord、またはメールにてご相談ください。

import { Client } from './driver/postgres/postgres'

export default {
  async fetch(request: Request, env, ctx: ExecutionContext) {
    try {
      const client = new Client({
        user: 'postgres',
        database: 'postgres',
        hostname: 'https://db.example.com',
        password: '',
        port: 5432,
      })
      await client.connect()
      const result = await client.queryArray('SELECT * FROM users WHERE uuid=1;')
      ctx.waitUntil(client.end())
      return new Response(JSON.stringify(result.rows[0]))
    } catch (e) {
      return new Response((e as Error).message)
    }
  },
}
Cloudflareは企業ネットワーク全体を保護し、お客様がインターネット規模のアプリケーションを効率的に構築し、あらゆるWebサイトやインターネットアプリケーションを高速化し、DDoS攻撃を退けハッカーの侵入を防ぎゼロトラスト導入を推進できるようお手伝いしています。

ご使用のデバイスから1.1.1.1 にアクセスし、インターネットを高速化し安全性を高めるCloudflareの無料アプリをご利用ください。

より良いインターネットの構築支援という当社の使命について、詳しくはこちらをご覧ください。新たなキャリアの方向性を模索中の方は、当社の求人情報をご覧ください。
Full Stack WeekPostgresCloudflare Workers開発者開発者プラットフォーム

Xでフォロー

Kabir Sikand|@kabirsikand
Greg McKeon|@wegmckeon
Ben Yule|@bjyule
Cloudflare|@cloudflare

関連ブログ投稿

2026年4月14日 13:00

Securing non-human identities: automated revocation, OAuth, and scoped permissions

Cloudflare is introducing scannable API tokens, enhanced OAuth visibility, and GA for resource-scoped permissions. These tools help developers implement a true least-privilege architecture while protecting against credential leakage. ...

2026年4月14日 13:00

Scaling MCP adoption: Our reference architecture for simpler, safer and cheaper enterprise deployments of MCP

We share Cloudflare's internal strategy for governing MCP using Access, AI Gateway, and MCP server portals. We also launch Code Mode to slash token costs and recommend new rules for detecting Shadow MCP in Cloudflare Gateway. ...

2026年4月14日 13:00

Managed OAuth for Access: make internal apps agent-ready in one click

Managed OAuth for Cloudflare Access helps AI agents securely navigate internal applications. By adopting RFC 9728, agents can authenticate on behalf of users without using insecure service accounts....

2026年4月14日 13:00

Secure private networking for everyone: users, nodes, agents, Workers — introducing Cloudflare Mesh

Cloudflare Mesh provides secure, private network access for users, nodes, and autonomous AI agents. By integrating with Workers VPC, developers can now grant agents scoped access to private databases and APIs without manual tunnels. ...