Cloudflare Workers на Python получили прямой доступ к PostgreSQL и MySQL

Cloudflare Workers на Python получили прямой доступ к PostgreSQL и MySQL через Hyperdrive. Разбираем экономию, ограничения и безопасный тест миграции.

Wednesday, September 16, 2026Omid Saffari
Cloudflare Workers на Python получили прямой доступ к PostgreSQL и MySQL

16 сентября 2026 года Cloudflare открыла для Cloudflare Workers на Python прямой доступ к PostgreSQL и MySQL через Hyperdrive. Если раньше для подключения Worker к существующей базе данных приходилось держать отдельный HTTP-сервис, теперь такой сервис можно убрать — а вместе с ним пересмотреть архитектуру и ежемесячные расходы.

Базу данных переносить не нужно

Главное в этом релизе — возможность оставить данные там, где они уже находятся.

Hyperdrive — это управляемый слой соединений между Cloudflare Worker и существующей базой PostgreSQL или MySQL. Он не заменяет базу данных и не копирует записи в Cloudflare. Python-код открывает TCP-соединение через обычный драйвер, получая параметры подключения из привязки Hyperdrive. Сам Hyperdrive поддерживает долгоживущий пул соединений с базой данных.

Благодаря этому привычный обходной путь больше не обязателен. Раньше Python Worker без прямого доступа к базе мог обращаться к небольшому API или серверу, единственной задачей которого было выполнение SQL-запросов. Схема выглядела так:

Раньше: Python Worker → сервис-посредник → PostgreSQL или MySQL

Теперь: Python Worker → Hyperdrive → PostgreSQL или MySQL

Cloudflare устанавливает соединение рядом с Worker, а пул держит ближе к исходной базе. В руководстве по Hyperdrive указано, что при обычном подключении до первого запроса требуется семь сетевых обменов: один для TCP, три для TLS и три для аутентификации в базе данных. Повторное использование пула избавляет от полной настройки соединения при каждом коротком запуске Worker.

Схема подключения Python Worker к существующей базе данных через Hyperdrive без прежнего сервиса-посредника
База данных остается на месте. Hyperdrive может заменить сервис, который только передавал трафик к ней.

У этого сценария есть четкие условия. Для Python Workers нужна дата совместимости 2026-09-08 или более поздняя, а сама функция пока остается в бета-версии. Для PostgreSQL Cloudflare протестировала asyncpg, pg8000 и psycopg, для MySQL — aiomysql и pymysql. Рекомендованные драйверы — asyncpg и aiomysql.

По словам Cloudflare, могут работать и другие TCP-драйверы. Но это не означает, что совместимы все пакеты, ORM и существующие приложения. Поддерживаемая база данных — лишь первый этап проверки, а не гарантия всей миграции.

Как изменились расходы на подключение к базе

Самая очевидная экономия возникает, если Python-приложение уже работает на Workers, а отдельный сервис оплачивается только ради доступа Worker к базе данных.

Расчет прост:

Текущие ежемесячные расходы = база данных + Worker + хостинг сервиса-посредника

Возможные ежемесячные расходы = база данных + Worker

Плата за базу данных никуда не исчезает. За встроенный пул соединений и кеширование запросов Hyperdrive на тарифе Workers Paid отдельной платы нет; исходящий трафик Hyperdrive также не тарифицируется. Если аккаунт уже укладывается во включенные лимиты Workers, дополнительная стоимость этого способа подключения со стороны Cloudflare равна $0. Реальная экономия — счет за хостинг сервиса-посредника, который действительно удастся отключить.

Обслуживание нужно учитывать в том же расчете. Вместе с сервисом-посредником могут исчезнуть отдельный деплой, проверка работоспособности, набор секретов, поток логов и еще одна точка отказа. Не переводите эту работу в деньги, пока не ясно, кто занимается обслуживанием и как часто сервис создает проблемы.

Для нового платного аккаунта Workers Paid стоит от $5 за аккаунт в месяц. В тариф включены 10 миллионов запросов и 30 миллионов миллисекунд CPU в месяц. Сверх лимита взимается $0.30 за каждый дополнительный миллион запросов и $0.02 за каждый дополнительный миллион миллисекунд CPU. Число запросов Hyperdrive к базе данных в этом тарифе не ограничено.

Тарифа Free достаточно для небольшой проверки. Он включает 100,000 запросов к Worker в день и 100,000 запросов Hyperdrive к базе данных в день, при этом на один вызов отводится 10 миллисекунд CPU. Лимиты считаются отдельно: один запрос, выполняющий несколько SQL-команд, может израсходовать несколько запросов к базе.

Кому этот сценарий подойдет уже завтра

Независимому разработчику с сервисом на FastAPI

Представим разработчика, у которого FastAPI Worker обращается к управляемой базе PostgreSQL через небольшой контейнер: тот принимает HTTP-запросы и выполняет SQL. Если в контейнере нет бизнес-логики, тест с asyncpg покажет, способен ли Hyperdrive его заменить.

Смысл не в переходе на новую базу данных. Текущая схема базы, резервные копии и провайдер остаются прежними, а удалить можно сервис, служивший только адаптером подключения. Сначала стоит перенести один маршрут, сравнить результат и задержку, а отключать посредник — только после совпадения поведения в продакшене.

Небольшому агентству с клиентскими базами MySQL

Небольшое агентство может поддерживать несколько узких Python API, каждый из которых подключен к MySQL клиента. Новый вариант позволяет тестировать aiomysql или pymysql непосредственно в Worker, а не развертывать прокси базы данных рядом с каждым подходящим приложением.

Преимущество здесь — единообразие эксплуатации. Агентство сможет использовать общий процесс развертывания Worker и отдельную конфигурацию Hyperdrive для каждой базы. Но сервис-посредник нужно сохранить, если он отвечает за авторизацию арендаторов, преобразование схемы, аудит или другую работу помимо передачи запросов.

Платформенной команде, переносящей один маршрут с большим числом чтений

Платформенной команде не обязательно переносить весь бэкенд. Можно вынести на Workers один публичный Python-маршрут с преобладанием чтения, оставить базу данных в своем регионе и поручить Hyperdrive управление пулом соединений с ней.

Именно здесь нужно заранее определить правила кеширования. По умолчанию Hyperdrive кеширует подходящие операции чтения на 60 секунд, а во время повторной проверки может еще 15 секунд отдавать устаревший результат. Для публичного каталога или контента это может быть приемлемо. Аутентификация, права доступа, состояние оплаты и чтение сразу после записи должны использовать отдельную конфигурацию Hyperdrive с отключенным кешем.

Определиться с фреймворком по-прежнему поможет опубликованное ранее сравнение Django и FastAPI. Новый релиз меняет лишь одну часть решения: сохранение PostgreSQL или MySQL теперь официально поддерживается для Python Worker, но это не гарантирует совместимость остальных компонентов приложения на Django или FastAPI.

Минимальный безопасный тест Cloudflare Workers на Python

Используйте тестовую базу 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 в 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",
]

Затем добавьте в src/main.py тест подключения из документации Cloudflare:

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, wheel-пакеты PyEmscripten и пакеты из состава Pyodide. Cloudflare по-прежнему отмечает, что поддержка пакетов WebAssembly находится на ранней стадии, поэтому отсутствующая зависимость может остановить миграцию. В текущей документации по драйверам и ORM поддерживается только синхронная SQLAlchemy. Асинхронная SQLAlchemy не работает, поскольку в среде Workers нет поддержки greenlet.

Ограничения есть и на уровне протокола базы данных. Hyperdrive поддерживает PostgreSQL с 9.0 по 17.x и MySQL с 5.7 по 8.x, а также MariaDB. SQL Server и MongoDB не поддерживаются. В PostgreSQL недоступны рекомендательные блокировки, а также LISTEN и NOTIFY. В MySQL нельзя использовать запросы из нескольких операторов и подготовленные операторы на уровне протокола. Максимальная длительность запроса на тарифах Free и Paid — 60 секунд.

Пул соединений также меняет ожидания от сессии. Hyperdrive использует пул на уровне транзакций: после завершения транзакции соединение с исходной базой возвращается в пул. Код, рассчитывающий сохранить состояние сессии между транзакциями, нужно проверить. Долгие транзакции могут исчерпать пул и свести на нет выигрыш в параллельной обработке.

Что сделать в понедельник

Не начинайте неделю с миграции всего приложения. Сначала выясните, действительно ли нужен хотя бы один сервис-посредник, который занимается только базой данных.

  1. Выберите один безопасный тестовый маршрут

    Создайте тестовую базу данных или реплику, не связанную с продакшеном, и пользователя с ограниченными правами. Выберите маршрут, который читает безвредную запись и не зависит от состояния сессии, блокировок или получения свежих данных сразу после записи.

  2. Проведите базовую проверку подключения

    Разверните небольшой Worker из примера выше и убедитесь, что SELECT 1 выполняется через Hyperdrive. Запишите частоту ошибок Worker, время CPU, полное время выполнения и количество соединений с базой данных.

  3. Проверьте реальный драйвер и запрос

    Перейдите с тестовой команды на реальный драйвер маршрута и один типичный запрос. Сопоставьте возвращаемые данные, работу транзакций, настройки кеша и использование пула с текущим сервисом-посредником.

  4. Посчитайте выгоду от отключения

    Зафиксируйте ежемесячную стоимость хостинга посредника и часы, которые уходят на его развертывание, обновление, мониторинг и восстановление. Вычтите дополнительные расходы на Workers и постоянные трудозатраты на Hyperdrive. Удаляйте сервис, только если и расчет, и тест совместимости дают положительный ответ.

Действуйте на этой неделе, если посредник нужен только для доступа к базе, приложение использует PostgreSQL или MySQL, а маршрут покрывает один из протестированных драйверов. Подождите, если проект зависит от асинхронной SQLAlchemy, недоступного пакета, неподдерживаемого поведения SQL или строгой согласованности чтения сразу после записи, которую вы еще не отделили. Изменение вас не касается, если приложение остается на текущем сервере или сервис-посредник содержит бизнес-логику, которую Hyperdrive не заменяет.

Чтобы и следующее изменение платформы превратить в решение на понедельник, подпишитесь на рассылку.

Последнее обновление
16 сент. 2026 г.
Категория
Explained

Сделать этот сайт предпочтительным в Google

Добавить omidsaffari.com как предпочтительный источник в Google Поиске

Отметьте omidsaffari.com как предпочтительный источник — и Google будет поднимать его для вас в Top Stories, AI Overviews и AI Mode.

Похожие статьи
Grok Voice Transcribe 2.0: распознавание речи без роста цены

Grok Voice Transcribe 2.0: распознавание речи без роста цены

Распознавание речи в Grok Voice Transcribe 2.0 не подорожало. Что изменилось с моделью по умолчанию и как проверить расшифровки перед миграцией.20 сент. 2026 г.Explained
Отладка Cloudflare Browser Rendering: сначала Inspect, потом перезапуск

Отладка Cloudflare Browser Rendering: сначала Inspect, потом перезапуск

Панель Inspect в Cloudflare Browser Run показывает логи, сетевые запросы и итоговый DOM. Разбираем, как найти причину сбоя до повторного запуска задачи.19 сент. 2026 г.Explained
Приватная библиотека компонентов в v0: как её подключить

Приватная библиотека компонентов в v0: как её подключить

Приватная библиотека компонентов теперь доступна v0 через NPM_TOKEN или NPM_RC. Как подключить пакет, защитить секрет и сократить переделку прототипа.19 сент. 2026 г.Explained
Claude Code Auto Mode: когда исчезает отдельная плата

Claude Code Auto Mode: когда исчезает отдельная плата

В Claude Code 2.1.278 серверные проверки Auto mode больше не оплачиваются отдельно. Кому доступно изменение, где ломается маршрут и что показывает /status.19 сент. 2026 г.Explained
Vercel Turbo для одного деплоя: сколько стоит ускорение

Vercel Turbo для одного деплоя: сколько стоит ускорение

Vercel Turbo можно включить для одного деплоя без смены настроек проекта. Разбираем три способа запуска, стоимость, ограничения и сценарии применения.18 сент. 2026 г.Explained
ChatGPT для Word: документы без копирования между приложениями

ChatGPT для Word: документы без копирования между приложениями

ChatGPT для Word позволяет писать, сокращать и перестраивать документы прямо в редакторе. Разбираем доступ, лимиты, риски и рабочий процесс.18 сент. 2026 г.Explained
Google Antigravity: как перенести локальные задачи до 5 октября

Google Antigravity: как перенести локальные задачи до 5 октября

В Google Antigravity майский агент отключат 5 октября. Разбираем, каким задачам хватит смены ID, а где придётся обновить адаптер локальных инструментов.18 сент. 2026 г.Explained
Трассировка Cloudflare Workers: какой Worker замедлил запрос

Трассировка Cloudflare Workers: какой Worker замедлил запрос

Трассировка Cloudflare Workers связывает RPC-вызовы между Workers и Durable Objects, помогает найти медленный метод и заранее оценить расходы на наблюдаемость.17 сент. 2026 г.Explained
Рассылка

Одно письмо, каждое воскресенье.Работающие системы, а не горячие мнения.

Еженедельно. Без спама. Отписка в любой момент.