Добро пожаловать в День 5 12 Дней DigitalOcean! Вчера вы настроили Службу Напоминания о Дне Рождения, чтобы она работала на DigitalOcean Functions, что означает, что она теперь безсерверная и готова к облаку. 🎉 Сегодня вы сделаете шаг вперед, автоматизировав её, чтобы она работала по собственному расписанию — без необходимости ручного ввода.
К концу этого руководства ваша служба (или любая другая функция, над которой вы работаете) будет запускаться автоматически в установленное время каждый день. Это означает, что вам больше не нужно помнить о том, чтобы запускать её самостоятельно — она просто работает.
Почему Автоматизация?
Развертывание вашей функции в облаке было большим достижением вчера, но необходимость запускать её вручную сводит на нет смысл автоматизации. Сегодня мы сосредоточимся на расписании службы для автоматического запуска — как по часам — чтобы вы могли установить её и забыть о ней. DigitalOcean Functions имеет встроенное расписание с использованием Триггеров для этой самой цели, и у вас есть два способа настроить это.
🚀 Что вы узнаете
К концу сегодняшнего дня вы узнаете, как:
- Настроить ежедневный триггер для автоматического запуска вашей функции.
- Узнать два способа сделать это — через панель управления DigitalOcean или с помощью
doctl
CLI иproject.yml
. - Проверить настройку, чтобы убедиться, что она работает.
🛠 Что вам понадобится
Перед началом убедитесь, что у вас есть следующее:
- Функция, уже развернутая на DigitalOcean (например, Сервис напоминаний о днях рождения из Дня 4: Создание сервиса напоминаний о днях рождения), которую нужно автоматизировать с помощью триггеров.
- Если вы используете CLI
doctl
, вам понадобится файлproject.yml
для вашей функции. Вы можете ознакомиться с Днем 4 для получения инструкций по установке и настройке CLIdoctl
, а также созданию файлаproject.yml
.
🧑🍳 Рецепт на День 5: Автоматизация функций с помощью триггеров
Шаг 1: Настройте триггер для вашей функции
DigitalOcean предоставляет вам два варианта для настройки триггеров:
- Вариант 1: Используйте Панель управления для быстрой и простой настройки.
- Вариант 2: Используйте CLI
doctl
для более надежного и программного управления.
Внимание: Помните, что триггеры, созданные в Панели управления, теряются, если вы повторно развернете функцию с помощью CLI. Если вы будете часто повторно развертывать, используйте Вариант 2, чтобы добавить триггеры непосредственно в файл project.yml
.
Вариант 1: Использование Панели управления для создания триггера
Самый простой способ настроить триггер — через Панель управления DigitalOcean. Это быстро, не требует настройки и идеально подходит для простых однократных конфигураций.
- Перейдите на главную страницу функций в панели управления DigitalOcean.
- Найдите вашу функцию (например,
reminders/birthdays
) и нажмите на вкладку Триггеры.
- Нажмите Создать триггер, добавьте Название для вашего триггера. Это может быть любое описательное название, например
daily-birthday-trigger
. Имя должно содержать только буквенно-цифровые символы, дефисы и точки. - Добавьте cron-выражение, чтобы установить расписание. Например,
0 9 * * *
означает, что функция будет запускаться каждый день в 9:00 утра.
Примечание: Не уверены, как работает cron? Проверьте crontab.guru для полезного справочника.
- Сохраните триггер.
После создания триггера будет полезно протестировать его, чтобы убедиться, что все работает как ожидалось. Перейдите к разделу Тестирование автоматизации ниже, чтобы узнать как.
Предупреждение: Хотя панель управления проста и эффективна, любые триггеры, которые вы создаете здесь, будут перезаписаны или удалены, если вы повторно развернете функцию с помощью CLI. Для частых обновлений или программных развертываний переходите к Варианту 2.
Вариант 2: Использование doctl
CLI с project.yml
Вы также можете создавать триггеры, добавляя их непосредственно в файл project.yml. Этот метод более надежен для частых повторных развертываний, потому что он гарантирует, что ваши триггеры всегда будут включены в конфигурацию функции. В отличие от варианта с панелью управления, описанного ранее, этот подход предотвращает перезапись или потерю триггеров во время повторных развертываний.
Вот как вы можете это настроить:
-
Откройте свой
project.yml
файл из Дня 4: Развертывание уведомлений о днях рождения с помощью функций DigitalOcean. Он может выглядеть примерно так: -
Добавьте раздел
triggers
в конфигурацию вашей функции, чтобы определить расписание: -
Итоговый обновленный
project.yml
файл:Это говорит DigitalOcean, чтобы запускать функцию
birthdays
каждый день в 9:00 утра.-
triggers
секция: Определяет имя, тип и расписание для триггера. Вы можете назвать свой триггер чем угодно описательным, напримерdaily-birthday-trigger
. -
cron
: Указывает время, когда функция будет выполняться ежедневно в UTC. Например, cron-выражение0 9 * * *
планирует выполнение функции каждый день в 9:00 утра.
-
-
Сохраните файл и разверните его, выполнив следующую команду из каталога, содержащего папку
my-birthday-reminder-service
:Важно: Убедитесь, что вы выполняете команду из родительского каталога, а не внутри папки
my-birthday-reminder-service
. Выполнение команды из неправильного места может привести к ошибке, такой как: -
После успешного развертывания вы увидите сообщение с подтверждением, похожее на это:
-
Перейдите на панель управления, чтобы убедиться, что триггер был создан в разделе Функции.
Совет: Чтобы протестировать свой триггер, временно установите cron-выражение на несколько минут вперед (например, 28 9 * * *
, если сейчас 9:25 утра). После подтверждения его работы верните его к запланированному расписанию и повторно разверните.
Шаг 2: Протестируйте автоматизацию
Давайте протестируем ваши триггеры, чтобы убедиться, что они работают. Вместо того чтобы ждать их срабатывания по обычному расписанию, вы можете временно установить их на запуск через несколько минут. Вот как это сделать:
-
Установите cron-выражение для вашего триггера на несколько минут от текущего времени (в UTC). Например, если сейчас 9:25 утра по UTC, установите cron-выражение на
28 9 * * *
, чтобы функция запускалась в 9:28 утра по UTC.Примечание: Не знаете, как преобразовать свое местное время в UTC? Инструменты, такие как Конвертер часовых поясов, могут помочь.
-
Сохраните обновленный триггер (если используете Панель управления) или повторно разверните ваш обновленный
project.yml
файл (если используете CLI): -
Подождите, пока триггер выполнится, затем проверьте логи активации, чтобы подтвердить, что функция выполнилась успешно:
Примечание: Журналы активации фиксируют детали о том, когда была выполнена ваша функция, включая информацию о том, была ли она выполнена успешно или возникли ошибки. Это полезный способ проверить, что ваш триггер сработал в запланированное время.
Эта команда вернет детали последней активации вашей функции. Например, вы можете увидеть что-то вроде этого:
Это подтверждает, что триггер сработал и функция была активирована успешно! 🎉
Примечание: После того, как вы убедитесь, что все работает, обновите выражение cron на ваш запланированный график (например, 0 9 * * *
для 9:00 по UTC ежедневно) и сохраните или повторно разверните.
Краткая заметка о журналах
Хотя команда журналы активаций
является отличным способом проверки недавних выполнений, иногда вам понадобятся более подробные журналы для отладки или расследования проблем с вашей функцией. DigitalOcean также предоставляет возможности для перенаправления этих журналов на внешние сервисы логирования, что со временем упрощает мониторинг и устранение неполадок вашего приложения.
На 6-й день вы научитесь просматривать логи напрямую, эффективно их интерпретировать и настраивать пересылку логов во внешние сервисы, такие как Logtail или Papertrail. Эти инструменты помогут вам легко следить за производительностью вашей функции.
🎁 Завершение
Вот что вы сегодня достигли:
- Вы автоматизировали свой сервис напоминания о дне рождения (или любую другую функцию), чтобы он выполнялся ежедневно.
- Вы узнали два способа настройки триггеров — через панель управления и с помощью CLI
doctl
. - Вы протестировали свою настройку, чтобы убедиться, что она работает как ожидается.
Вот предыдущие уроки из этой серии:
- День 1: Настройка базы данных PostgreSQL для напоминаний о днях рождения
- День 2: Подключение к вашей базе данных PostgreSQL с помощью Python
- День 3: Проверка дней рождения и отправка SMS-уведомлений
- День 4: Развертывание уведомлений о днях рождения в функции
Далее: Теперь, когда ваш сервис работает независимо, следующим шагом является его эффективное мониторинг. В следующем уроке вы узнаете, как просматривать журналы вашей функции и пересылать их во внешние сервисы для упрощения отслеживания и устранения неполадок. Увидимся тогда!
Source:
https://www.digitalocean.com/community/tutorials/automating-birthday-reminders-with-triggers