Поиск по сайту:

Использование заданий CRON в CloudFlare Workers через Wrangler


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

Начало работы с Wrangler

Прежде чем мы сможем развернуть новый скрипт в Cloudflare, нам нужно установить и настроить инструмент командной строки Wrangler для развертывания нашего нового рабочего скрипта.

Установка инструмента командной строки Wrangler

Для создания развертывания на сайте Cloudflare создала инструмент командной строки Wrangler. Wrangler требует установки либо через NPM (менеджер пакетов NodeJS), либо через Cargo (менеджер пакетов языка Rust).

Установка NPM

npm i @cloudflare/wrangler -g

Груз

cargo install wrangler

обработчик установки груза --features sys-openssl

Вход в Wrangler и создание сайта

Во-первых, мы собираемся войти в Cloudflare с помощью Wrangler. Для этого мы используем новую функцию wrangler login. Это предложит открыть веб-страницу, и если вы уже прошли аутентификацию в Cloudflare, аутентификация произойдет очень быстро. В противном случае войдите в систему, и Wrangler автоматически настроит токен API.

wrangler login

Как видно из расположения конфигурации, есть файл .toml, который теперь содержит ваш токен API, чтобы упростить все последующие операции. Этот файл находится в домашнем каталоге пользователя и хранится в подкаталоге .wrangler\config\default.toml.

Создание рабочего скрипта Cloudflare для запроса WordPress CRON

В этой статье мы собираемся создать простой Cloudflare Worker, который будет просто запрашивать файл wp-cron.php по расписанию. Принцип работы WordPress заключается в том, что при запросе страницы он попытается запустить любые внутренние задания CRON, которые определены. Это означает, что задания выполняются только время от времени на сайте с небольшим объемом и могут нанести ущерб сайту с большим объемом. Это не всегда возможно на некоторых хостингах, поэтому вы можете определить ту же настройку, но извне активировать систему WordPress CRON.

Нам нужно отключить настройку WordPress CRON по умолчанию, используя следующую конфигурацию в wp-config.php. Это вступает в силу в момент сохранения файла.

define('DISABLE_WP_CRON', true);

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

Cloudflare Workers, запланированные с помощью триггеров CRON, будут работать на недостаточно загруженных машинах, чтобы максимально эффективно использовать ресурсы.

Создание конфигурации триггера CRON

CRON-триггеры Cloudflare Worker используют знакомый синтаксис Unix CRON. Это делает его сразу знакомым и с большим количеством обучающих ресурсов. Вы даже можете определить несколько триггеров CRON для одного рабочего скрипта, до текущего ограничения в три. Синтаксис конфигурации выглядит как приведенный ниже код, который показывает запуск триггера каждую 5-ю минуту.

[triggers]crons = ["*/5 * * * *"]

Теперь, когда у нас есть конфигурация триггера, как нам собрать все вместе, чтобы развернуть наш скрипт в среде Cloudflare?

Развертывание сценария WordPress CRON и планирование задания CRON

Чтобы создать все необходимые файлы и настроить простой рабочий javascript, мы можем использовать встроенную команду генерации, которая есть в wrangler. Это создаст каталог с именем wordpress-cron, который содержит все необходимое для развертывания рабочего процесса на основе javascript.

# Generate simple javascript Cloudflare Worker scaffold
wrangler generate wordpress-cron

Затем измените созданный файл index.js. В сценарии мы просто вызовем файл wp-cron.php с параметром doing_wp_cron. Когда это вызывается, любые задания CRON, которые необходимо запустить, будут запущены.

addEventListener("fetch", event => {
  return event.respondWith(
    fetch("<https://mysite.com/wp-cron.php?doing_wp_cron>")
  )
})

Наконец, вам потребуется обновить файл wrangler.toml, включив в него необходимую информацию. Обновите файл конфигурации, включив в него свои account_id и zone_id. Чтобы получить эти значения, найдите главную панель управления вашего сайта и прокрутите вниз, чтобы найти раздел API. Там будет находиться как идентификатор учетной записи, так и идентификатор зоны.

name = "wordpress-cron"
type = "javascript"
account_id = "account_id"
workers_dev = false
route = "*mysite.com/wordpress-cron*"
zone_id = "zone_id"
[triggers]
crons = ["*/5 * * * *"]

Этот маршрут будет соответствовать любому протоколу, http или https, а также любым дополнительным параметрам или путям за пределами раздела wordpress-cron. Не стесняйтесь делать это все, что вы хотите. На самом деле это позволяет запускать сценарий вручную, но в большинстве случаев с этим справится триггер CRON.

Наконец, нам нужно развернуть этого рабочего, что вы можете сделать с помощью команды публикации, как показано ниже.

wrangler publish

После развертывания и первого запуска скрипта вы можете просмотреть статистику и информацию на странице панели инструментов Cloudflare Workers.

Заключение

Этот простой пример использования CRON-триггеров с Cloudflare Workers — лишь малая часть возможностей. Начните изучать Cloudflare Workers и то, как эта бессерверная технология может вписаться в ваш рабочий процесс уже сегодня!