Перейти к содержимому
WebShield Docs

Функции (Workers)

Проект Cloudflare Workers на WebShield без переделок — wrangler.jsonc, Durable Objects, D1, KV и cron. Выкатка, миграции D1, импорт KV, возврат данных к моменту, свой домен с защитой WAF.

Функция — это проект Cloudflare Workers, который работает у нас в том виде, в каком написан: тот же wrangler.jsonc, тот же код, те же привязки. Запросы к функции проходят ту же защиту, что и запросы к приложению, — WAF, лимиты, баны и бот-защиту, если вы её включили.

Функция живёт в проекте раздела Услуги → Приложения: при добавлении выберите Функция (Workers). Сейчас это бета-версия.

  • обработчики fetch и scheduled (cron из triggers.crons);
  • Durable Objects вместе с SQLite-хранилищем и будильниками (alarm);
  • D1 и KV;
  • очереди;
  • переменные: vars из конфига плюс переменные из кабинета.

Не поддерживаются Containers и Sandbox.

Нужен каталог проекта, в котором лежит wrangler.jsonc или wrangler.json; wrangler.toml не подойдёт — переведите его в JSON. Если есть package.json, ставим зависимости тем менеджером, чей lock-файл найдём (npm, pnpm или yarn), и запускаем скрипт build, если он объявлен. Затем выкатываем по конфигу Wrangler.

Terminal window
webshield apps deploy --project shop --app api

Работает и архив с компьютера во вкладке Выкатки, и https-ссылка на .tar.gz (подробнее о способах — в Приложениях). Новая версия начинает отвечать в течение десяти секунд после того, как выкатка встала в статус Работает.

Переменные. Вкладка Переменные — то, что Worker получает в env поверх vars из конфига; хранятся зашифрованными, так что сюда же кладите секреты. Ссылки на базы проекта тоже работают: DATABASE_URL = ${{db.url}}. Переменные входят в выкатку, поэтому после правки нажмите Выкатить заново: функция пересоберётся из того же архива с новыми значениями. Из терминала — webshield apps env set … --redeploy.

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

Имена привязываются вкладкой Имена — так же, как у приложения. Внутри Worker’а request.url содержит именно ваше имя, а не наш адрес.

Вкладка Журнал показывает вывод функции за последние 7 дней: console.log и необработанные исключения обработчиков вместе со стеком. Посетитель при таком исключении получает ответ 500 без подробностей — текст ошибки и стек видны только вам.

Базы D1 и пространства KV объявляются в wrangler.jsonc, как обычно. Снаружи до них достаёт CLI. Команды запускаются из каталога проекта: им нужны wrangler.jsonc, каталог migrations и файлы ключей.

Terminal window
webshield apps d1 migrate --app api app-db # применить новые миграции из migrations/
webshield apps d1 migrations --app api app-db # какие уже применены
webshield apps d1 execute --app api app-db --command "SELECT count(*) FROM users"
webshield apps d1 execute --app api app-db --file seed.sql
webshield apps kv import --app api CACHE seed/keys.json # формат bulk у Wrangler
webshield apps kv delete-keys --app api CACHE old-keys.json

app-db — это database_name из wrangler.jsonc, CACHE — id пространства KV. Файл ключей должен лежать внутри каталога и попадать в архив (не исключаться .gitignore). Функция должна быть уже выкачена. Запрос SQL — до 100 КБ: большие наборы данных оформляйте миграциями.

История операций и их вывод — во вкладке Данные.

Данные функции — Durable Objects, D1, KV, очереди и будильники — можно вернуть к любому моменту за последние 7 дней. Код при этом остаётся текущим.

Вкладка Данные → Вернуть данные к моменту, или из терминала:

Terminal window
webshield apps window --app api # с какого и по какой момент
webshield apps restore --app api --time 2026-10-21T15:00:00+03:00

Пока идёт восстановление, функция остановлена и отвечает 503. История сохраняется: если вернулись не туда, верните данные к моменту перед восстановлением.

На данные одной функции отведено 2 ГБ. В объём входят и прежние версии данных за 7 дней: на них держится возврат к моменту. Сколько занято, видно во вкладке Данные; на 80% придёт письмо.

Когда место кончается, функция перестаёт отвечать на запросы, даже не трогающие данные, и сама из этого не выйдет. Не доводите до этого — удаляйте ненужное заранее, место освобождается, когда версии удалённого выходят из окна. Если объёма не хватает, напишите в поддержку.

С Всегда запущено экземпляров = 0 функция засыпает без запросов. Будильники Durable Objects и cron мы отслеживаем сами и будим функцию к сроку, поэтому расписание выполняется и у спящей функции. Первый ответ после сна приходит с задержкой; если она мешает, поставьте 1.

Как у приложений: CPU и память — пока функция работает, данные — по цене объектного хранилища, включая прежние версии за 7 дней. Спящая функция платит только за данные.