Cloudflare Workers Pythonで既存DBへ直結、ブリッジを外せるか

Cloudflare Workers Python環境で、Hyperdrive経由のPostgreSQL/MySQL直接接続が可能になりました。データベース専用ブリッジを外せる条件、Workers Paidの料金、対応ドライバー、キャッシュとSQLの制約、安全な接続テストの手順を解説します。

Wednesday, September 16, 2026Omid Saffari
Cloudflare Workers Pythonで既存DBへ直結、ブリッジを外せるか

2026年9月16日、CloudflareはCloudflare Workers Python環境からHyperdrive経由でPostgreSQLとMySQLへ直接接続できる経路を開きました。既存データベースにつなぐためだけに別のHTTPサービスを用意していたWorkerなら、そのサービスを外せる可能性があります。アーキテクチャだけでなく、毎月の請求額も変わるアップデートです。

Cloudflare Workers Pythonでもデータベースは移さなくていい

今回のリリースで重要なのは、移行せずに済むものです。

Hyperdriveは、Cloudflare Workerと既存のPostgreSQLまたはMySQLデータベースをつなぐマネージド接続レイヤーです。新しいデータベースではなく、レコードをCloudflareへコピーする仕組みでもありません。Pythonコードは、Hyperdriveバインディングから渡される接続情報を使い、通常のデータベースドライバーでTCP接続を開きます。背後では、Hyperdriveがデータベースへの長期接続プールを管理します。

これにより、従来よく使われていた回避策が変わります。データベースへ直接接続できないPython Workerでは、SQLを実行するためだけの小さなAPIやサーバーを呼び出す構成が必要でした。接続経路は次のとおりです。

従来: Python Worker → データベースブリッジ → PostgreSQLまたはMySQL

現在: Python Worker → Hyperdrive → PostgreSQLまたはMySQL

CloudflareはWorkerの近くで接続を確立し、接続プールはオリジンデータベースの近くに維持します。Hyperdriveガイドによると、一般的な構成では最初のクエリまでに7往復が発生します。内訳はTCPが1回、TLSが3回、データベース認証が3回です。プール内の接続を再利用すれば、短時間で終了するWorkerが呼び出されるたびに、この一連の接続処理を繰り返す必要がありません。

Python WorkerがHyperdrive経由で既存データベースへ接続し、データベース専用ブリッジを外した構成図
データベースはそのままです。データベース通信だけを担っていたブリッジは、Hyperdriveに置き換えられます。

利用条件は明確です。Python Workersでは互換性の日付を2026-09-08以降にする必要があり、この機能はまだベータ版です。CloudflareはPostgreSQL用としてasyncpgpg8000psycopgを、MySQL用としてaiomysqlpymysqlをテスト済みです。推奨ドライバーはasyncpgaiomysqlです。

Cloudflareは、ほかのTCPドライバーも動作する可能性があるとしています。ただし、すべてのパッケージ、ORM、既存アプリケーションの動作を保証しているわけではありません。データベース互換性は移行の最初の関門にすぎず、それだけで移行が完了するわけではありません。

Cloudflare Hyperdriveで変わる月額コストの計算式

すでにPythonアプリをWorkersで動かし、Workerからデータベースへ接続するためだけにブリッジ費用を払っている場合、最もわかりやすいコスト削減が見込めます。

計算は単純です。

現在の月額コスト = データベース + Worker + ブリッジのホスティング

移行後に見込まれる月額コスト = データベース + Worker

データベース料金は残ります。Hyperdriveに組み込まれた接続プールとクエリキャッシュはWorkers Paidで別料金がかからず、Hyperdriveにはエグレス料金もありません。アカウントがすでにWorkersの付属利用枠に収まっているなら、この接続経路によって増えるCloudflare料金は$0です。実際に削減できる現金支出は、廃止できたブリッジのホスティング料金です。

保守負担も同じ計算に含める必要があります。ブリッジを外せば、デプロイ先、ヘルスチェック、シークレット一式、ログストリーム、障害境界をそれぞれ1つずつ減らせる可能性があります。ただし、誰が保守し、どの程度の頻度で問題を起こしているかを把握するまでは、その作業に金額を割り当てるべきではありません。

新規の有料アカウントでは、Workers Paidは1アカウントあたり月額$5からです。毎月1,000万リクエストと3,000万CPUミリ秒が含まれます。超過分は追加100万リクエストごとに$0.30、追加100万CPUミリ秒ごとに$0.02です。このプランでは、Hyperdriveのデータベースクエリ数は無制限とされています。

Freeプランでも小規模な検証は可能です。Workerリクエストは1日100,000件、Hyperdriveのデータベースクエリも1日100,000件まで含まれ、1回の呼び出しで使えるCPU時間は10ミリ秒です。リクエスト数とデータベースクエリ数は別々に数えられます。1回のリクエストで複数のSQL文を実行すれば、データベースクエリを複数回消費することがあります。

明日から試せるケース

FastAPIサービスを運営する個人創業者

ある創業者が、マネージドPostgreSQLデータベースの手前でFastAPI Workerを動かし、HTTPリクエストを受けてSQLを実行するだけの小さなコンテナも運用しているとします。そのコンテナにビジネスロジックがなければ、asyncpgを使ったテストでHyperdriveに置き換えられるか確認できます。

メリットは、新しいデータベースへ移ることではありません。現在のスキーマ、バックアップ、プロバイダーを維持したまま、接続アダプターとしてのみ存在していたサービスを削除できる点です。まず1つのルートを移行し、結果とレイテンシーを比較します。本番環境で同じ挙動を確認してからブリッジを外すべきです。

顧客のMySQLデータベースを扱う小規模エージェンシー

小規模なエージェンシーでは、それぞれ顧客のMySQLデータベースへ接続する小さなPython APIを複数保守していることがあります。新しい経路なら、条件に合うアプリごとにデータベースプロキシをデプロイする代わりに、Worker内でaiomysqlまたはpymysqlをテストできます。

ここでの利点は、運用を統一できることです。エージェンシーは1つのWorkerデプロイ経路と、データベースごとに1つのHyperdrive設定を使えます。一方、テナント認可、スキーマ変換、監査など、クエリを中継する以上の処理をブリッジが担っている場合は、そのまま残します。

読み取り中心のエンドポイントを1つ移すプラットフォームチーム

プラットフォームチームがバックエンド全体を移行する必要はありません。一般公開されている読み取り中心のPythonエンドポイントを1つだけWorkersへ移し、リージョン内のデータベースは維持したまま、Hyperdriveにオリジン接続をプールさせることができます。

このケースでは、キャッシュ方針も明示的に決める必要があります。Hyperdriveは対象となる読み取り結果をデフォルトで60秒間キャッシュし、再検証中はさらに15秒間、古い結果を返す可能性があります。公開カタログやコンテンツの読み取りなら許容できるかもしれません。認証、権限、請求状態、書き込み直後の読み取りには、キャッシュを無効にした別のHyperdrive設定を使うべきです。

以前のDjangoとFastAPIの比較は、フレームワーク選びにも引き続き役立ちます。今回のリリースで変わったのは、その判断材料の一部です。PostgreSQLまたはMySQLを維持する構成がPython Workerの正式な接続経路になりましたが、DjangoやFastAPIアプリケーションの残りすべてが動作すると保証されたわけではありません。

最小構成で安全に接続をテストする

本番環境ではないMySQLデータベースと、権限を絞ったテストユーザーを使います。目的はSELECT 1で接続経路を確認することであり、顧客データを使って完全な移行を予行演習することではありません。

最初のテストでキャッシュされていないデータベースへの往復時間を測れるよう、キャッシュを無効にしたHyperdrive設定を作成します。

Bash
npx wrangler hyperdrive create python-db-test --connection-string="mysql://user:password@HOSTNAME_OR_IP_ADDRESS:PORT/database_name" --caching-disabled

Wranglerが返す設定IDをwrangler.tomlへコピーします。次の日付は、最低要件の2026-09-08より後です。

TOML
name = "python-hyperdrive"
main = "src/main.py"
compatibility_date = "2026-09-16"
compatibility_flags = ["python_workers"]

[[hyperdrive]]
binding = "HYPERDRIVE"
id = "<HYPERDRIVE_CONFIG_ID>"

ドライバーをpyproject.tomlへ追加します。

TOML
[project]
dependencies = [
    "aiomysql",
]

続いて、Cloudflareが案内している接続テストをsrc/main.pyで実行します。

Python
import aiomysql
from workers import Response, WorkerEntrypoint


class Default(WorkerEntrypoint):
    async def fetch(self, request):
        hd = self.env.HYPERDRIVE
        connection = await aiomysql.connect(
            host=hd.host,
            port=int(hd.port),
            user=hd.user,
            password=hd.password,
            db=hd.database,
            ssl=None,
        )
        try:
            cursor = await connection.cursor()
            await cursor.execute("SELECT 1")
            result = await cursor.fetchone()
            return Response.json({"result": result[0]})
        finally:
            connection.close()

案内されているPython Workers用コマンドでデプロイします。

Bash
uv run pywrangler deploy

一見すると問題がありそうなのはssl=Noneの行です。Cloudflareのサンプルでは、これはWorkerからHyperdriveへのドライバー接続に対する指定です。Hyperdriveからオリジンデータベースへの接続には引き続きTLSが必要で、安全でない平文のオリジン接続はサポートされません。

ブリッジは不要になる場合があるが、自動的に時代遅れにはならない

今回変わったのは接続経路です。Python Workersが制約のないCPythonサーバーになったわけではありません。

Pythonパッケージは、pure Pythonパッケージ、PyEmscripten wheel、Pyodideに含まれるパッケージを利用できます。CloudflareはWebAssemblyパッケージのサポートを今も初期段階と位置づけているため、必要な依存関係がなければ移行は止まります。ドライバーとORMのドキュメントが現在サポートしているのは同期版SQLAlchemyのみです。Workers環境はgreenletをサポートしないため、非同期SQLAlchemyは利用できません。

データベースプロトコルにも制約があります。HyperdriveはPostgreSQL 9.0から17.x、MySQL 5.7から8.x、およびMariaDBに対応します。SQL ServerとMongoDBには対応しません。PostgreSQLのアドバイザリーロック、LISTENNOTIFYは利用できません。MySQLの複文クエリとプロトコルレベルのプリペアドステートメントも対象外です。FreeとPaidの両方で、クエリの最長実行時間は60秒です。

接続プールを導入すると、セッションに関する前提も変わります。Hyperdriveはトランザクションプーリングを採用しており、トランザクション終了時にオリジン接続がプールへ戻ります。トランザクションをまたいでセッション状態が残ることを前提にしたコードは、見直しが必要です。長時間のトランザクションはプールを使い切り、並行処理の利点を失わせる可能性もあります。

月曜日に着手すること

月曜日にアプリケーションを移行するのではありません。データベース接続だけを担うブリッジが本当に必要か、まず確かめます。

  1. 使い捨て可能な経路を1つ選ぶ

    権限を絞ったユーザーで、本番環境ではないデータベースまたはレプリカを作成します。無害なレコードを読み取り、セッション状態、ロック、書き込み直後の整合性に依存しないルートを1つ選びます。

  2. 接続のスモークテストを行う

    上記の小さなWorkerをデプロイし、Hyperdrive経由でSELECT 1が成功することを確認します。Workerのエラー率、CPU時間、経過時間、データベース接続数を記録します。

  3. 実際のドライバーとクエリを試す

    スモークテスト用のクエリを、そのルートで使う実際のドライバーと代表的なクエリ1つに置き換えます。返されるデータ、トランザクション動作、キャッシュ設定、プール使用量を現在のブリッジと比較します。

  4. 削除の採算を計算する

    ブリッジの月額ホスティング料金に加え、デプロイ、パッチ適用、監視、復旧に費やす時間を書き出します。追加のWorkers利用料と継続的なHyperdrive運用の負担を差し引きます。この数値と互換性テストの両方が移行を支持した場合に限り、ブリッジを削除します。

ブリッジの役割がデータベース接続だけで、アプリがPostgreSQLまたはMySQLを使い、テスト済みドライバーが対象ルートに対応するなら、今週中に動き始める価値があります。非同期SQLAlchemy、利用できないパッケージ、未対応のSQL動作、または切り分けられていない厳密な書き込み後読み取り整合性に依存するなら待つべきです。アプリを現在のサーバーで運用し続ける場合や、Hyperdriveでは置き換えられないビジネスロジックをブリッジが担っている場合は、今回の変更による影響はありません。

次のプラットフォーム変更も月曜日の判断に落とし込んで受け取りたい方は、ニュースレターに登録してください

最終更新
2026年9月16日
カテゴリー
Explained

Googleでこのサイトを優先する

omidsaffari.comをGoogle検索の優先ソースに追加

omidsaffari.comを優先ソースに設定すると、GoogleがTop Stories・AI Overviews・AI Modeであなたのために優先表示します。

音声AIエージェントを止めないGemini 3.8 Liveの非同期ツール呼び出し

音声AIエージェントを止めないGemini 3.8 Liveの非同期ツール呼び出し

Gemini 3.8 Liveの非同期関数呼び出しで、音声AIエージェントは照会処理中も会話を継続できます。料金の見方、Extended Thinkingとの使い分け、完了判定、重複実行を防ぐ実装、検証すべき運用指標まで、電話対応への導入ポイントを実務目線で分かりやすく整理します。2026年9月16日Explained
Cloudflare Workers デプロイをクライアント単位で分離する権限設計

Cloudflare Workers デプロイをクライアント単位で分離する権限設計

Cloudflare Workers デプロイをクライアント単位で安全に分離する方法を解説します。4つのロール、アカウント所有APIトークン、Wranglerの設定、バインディングやDurable Objects、Routesに残る権限上の注意点まで、制作会社が実運用へ移す手順を具体的に整理しました。2026年9月15日Explained
Claude Code セキュリティ:依存関係のインストールだけに通信を許可する

Claude Code セキュリティ:依存関係のインストールだけに通信を許可する

Claude Code 2.1.271では、サンドボックスの自動モードでネットワーク許可をコマンド単位に限定できます。依存関係のインストール時だけレジストリを開き、その後のビルドやテストへ通信権限を引き継がせない設定方法、適用範囲、永続許可との違い、見落としやすい制約を実務目線で解説します。2026年9月15日Explained
Vercel AI SDKの料金設計:既存サブスクリプションでエージェント費用を抑える

Vercel AI SDKの料金設計:既存サブスクリプションでエージェント費用を抑える

Vercel AI SDKがClaude CodeやCodexなどの既存サブスクリプションを使う仕組みを解説。認証情報の優先順位、プラン利用枠とAPI・AI Gatewayの請求先、Vercel Sandboxに残る実行コストまで、どの経路が誰に向くかを実例と設定手順で整理します。2026年9月15日Explained
Cloudflare Browser Runの新機能:ブラウザ自動化を承認済みホストに限定

Cloudflare Browser Runの新機能:ブラウザ自動化を承認済みホストに限定

Cloudflare Browser Runの新しいセッションガードレールと読み取り専用Live Viewを解説します。ブラウザ自動化の通信先を承認済みホストに限定し、クライアントに操作権を渡さずレビューしてもらう設計から、実装手順、料金への影響、許可リスト運用の落とし穴まで実務目線で整理します。2026年9月14日Explained
AIコールセンターの費用はどう変わる?GPT-Live-1を実例で試算

AIコールセンターの費用はどう変わる?GPT-Live-1を実例で試算

GPT-Live-1の音声セッションは1分$0.05。ただしAIコールセンターの実コストには、バックエンド推論、ツール、電話回線も含まれます。90秒の予約電話を例に、解決済み通話1件あたりの費用、SIP構成、割り込み対応、バックエンド選定、導入判断の測り方まで具体的に整理します。2026年9月14日Explained
ChatGPT デスクトップアプリのAppshots活用法:Windowsの情報共有を効率化

ChatGPT デスクトップアプリのAppshots活用法:Windowsの情報共有を効率化

ChatGPT デスクトップアプリのAppshotsをWindowsで使い、最前面のウィンドウをチャットへ渡す手順を解説します。画像と利用可能なテキストの範囲、送信先の設定、クライアントメールやエラー調査での使い方、共有前に確認すべきプライバシー上の注意点まで、実務目線で整理します。2026年9月14日Explained
Vercel CDNでFastAPIの静的ファイル配信を効率化する

Vercel CDNでFastAPIの静的ファイル配信を効率化する

Vercel CDNがFastAPIのapp.frontend()とStaticFilesを直接配信し、Function呼び出し、CPU、オリジン転送を減らす仕組みを解説します。料金への影響、ルート順序、ミドルウェア、依存関係の注意点を押さえ、公開ファイルと保護ファイルを分けて安全に検証する手順まで整理しました。2026年9月13日Explained
ニュースレター

毎週日曜、一通の手紙。動くシステムの話。感想戦ではなく。

週刊。スパムなし。いつでも解除できます。