Обновлено с учетом изменений, внесенных в 2019 г.

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

Но когда вы только начинали, как я, я не знала, что нужно Google, чтобы понять, как это сделать. Если вы мало знаете обо мне, я изначально был студентом-психологом и изначально сам учился программировать в MATLAB. Я пишу эту статью, чтобы объяснить основные строительные блоки для написания задания cron (блока кода, который может выполняться с заданным интервалом времени) для таких людей, как я.

Итак, являетесь ли вы опытным программистом или полным новичком, как я, вот все, что вам нужно знать, чтобы написать свою первую работу cron.

Вот список инструментов, с которыми вам нужно будет ознакомиться, чтобы следовать:

  • Node.js
  • Основы командной строки с BASH

1. Предпосылки

Первое, что нам нужно сделать, это убедиться, что на нашем компьютере установлен Node.js. Вы можете проверить, установлен ли он у вас, открыв программу терминала и выполнив команду:

node -v

Если вы получаете сообщение об ошибке Ошибка, команда не найдена, значит, она не установлена. Просто зайдите сюда, чтобы скачать его очень быстро.

Если он дал вам версию, значит, у вас все готово с Node.js.

Во-вторых, нам нужно убедиться, что у нас установлена ​​последняя версия npm. Npm (или диспетчер пакетов узлов) - это то, как мы собираемся установить интерфейс командной строки Firebase. Npm поставляется с Node.js, но то, что вы скачали Node.js, не означает, что у вас установлена ​​последняя версия npm. На всякий случай выполните следующую команду:

npm install npm@latest -g

Наконец, нам нужно установить Firebase CLI (или интерфейс командной строки). Это позволит нам инициализировать и развернуть нашу облачную функцию прямо с нашего терминала.

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

Но если вы нетерпеливы (как я), просто запустите эту команду в своем терминале:

npm install -g firebase-tools

2. Что-то нужно для запуска вашего кода

Если вы задумывались о том, как работает что-то вроде задания cron, вы, вероятно, поняли, что какое-то устройство должно быть активным, чтобы действительно выполнить ваш код.

У вас есть три распространенных варианта:

Облачные функции

Облачные функции чрезвычайно просты в настройке, они невероятно легкие и упрощают работу cron. Поскольку им очень легко пользоваться, мы будем использовать его на протяжении всего урока.

Существует множество отличных технологий для настройки облачных функций, и вы не ошибетесь. Однако я рекомендую AWS Lightsail или Google Firebase. В этом руководстве мы будем использовать Firebase, потому что их интерфейс командной строки чрезвычайно прост для развертывания облачной функции.

Экземпляр типа AWS / DigitalOcean:

Другой вариант - создать собственный экземпляр машины. Короче говоря, это в основном означает, что вы активируете компьютер (точно такой же, как тот, которым вы сейчас пользуетесь) где-то еще в мире, который будет работать вечно. А поскольку он всегда включен, активен и обслуживается кем-то другим, он будет доступен для выполнения вашего кода через определенный промежуток времени.

Для этого я настоятельно рекомендую AWS EC2 Instance, DigitalOcean или Kubernetes Cluster.

Программируйте собственное оборудование

По сути, это то же самое, что и установка экземпляра машины, за исключением того, что вы отвечаете за то, чтобы машина работала и обслуживалась. Я не рекомендую делать это, если вы не являетесь экспертом - если только вы не хотите просто повеселиться с Raspberry Pi или чем-то еще.

3. Инициализация проекта Firebase.

Теперь давайте начнем писать код.

  1. Откройте свой терминал.

Я собираюсь войти в свой каталог проектов, но вы можете перейти туда, где хотите сохранить свой код.

Теперь мне нужно создать каталог моего проекта, в котором я буду хранить этот проект. Итак, давайте создадим новую папку с:

mkdir HelloWorldFirebase

И перейдите в него с помощью:

cd HelloWorldFirebase

Что приведет нас сюда:

Хорошо, теперь я там, где хочу быть, поэтому я собираюсь инициализировать новое приложение Firebase, введя следующую команду:

firebase init

Примечание. Если вы получаете сообщение об ошибке «Команда firebase не найдена», значит, вы неправильно установили интерфейс командной строки Firebase. Вернитесь и попробуйте установить его снова.

Если все работает, вы получите следующий результат:

Firebase упрощает для нас процесс инициализации. Вы можете использовать стрелки на клавиатуре, чтобы выбрать один из вариантов их инициализации.

Все, что мы хотим сделать с помощью нашей облачной функции, - это получить код, который будет запускаться каждую минуту или около того. Итак, я собираюсь выбрать вариант «Функции: настройка и развертывание облачных функций», нажав пробел, а затем подтвердить свой выбор, нажав Enter.

Затем он попросит вас либо выбрать существующий проект, либо создать новый. Я не собираюсь отображать свой экран на этом этапе, чтобы защитить конфиденциальность моих существующих проектов, но все, что вам нужно сделать, это прокрутить вниз и выбрать [создать новый проект].

Затем он попросит вас выбрать язык: Javascript или Typescript.

Я выбрал JavaScript, но если вам нравится Typescript, вы тоже.

Вас спросят, хотите ли вы включить ESLint. Просто нажмите Y и Enter.

Это просто вопрос, хотите ли вы установить зависимости npm сейчас, что вы в любом случае собираетесь сделать, так что мы можем сделать это сейчас. Нажмите Y и Enter.

Если все пойдет по плану, мы должны увидеть что-то вроде этого:

Если вы зашли так далеко, поздравляю! Вы только что инициализировали свою первую облачную функцию с помощью Firebase.

4. Настройте Google Cloud Console.

Во-первых, вам нужно войти в консоль Firebase. Перейдите сюда и войдите в систему или зарегистрируйтесь в Google. Как только вы войдете, перейдите сюда, чтобы создать свой первый проект.

Опять же, чтобы защитить конфиденциальность моих проектов, я не буду показывать свой экран на этом этапе, а просто нажимаю большую кнопку с надписью «Добавить проект».

Выберите имя для своего проекта (у них есть некоторые ограничения для определенных персонажей) и нажмите «Продолжить».

Это приведет вас к шагу 2.

Прокрутите немного вниз и выключите Google Analytics. Нам это не понадобится.

И нажмите «Создать проект».

Дайте ему секунду для инициализации вашего приложения, снова нажмите «Продолжить», и вы попадете в консоль Firebase.

Прежде чем мы закончим, нам еще нужно сделать две (вроде как раздражающие) вещи.

Обновите свой тарифный план и добавьте кредитную карту.

Я знаю, что это отстой, но Google делает это, поэтому вы не можете просто начать использовать 8 триллионов ТБ вычислительной мощности. Если вы превысите определенный лимит, вам сообщат. Но поверьте мне, вы можете уйти с довольно приличной суммой, ничего не заплатив. Особенно когда в разработке.

Сначала вам нужно создать платежную учетную запись в Google. Перейдите сюда, войдите в систему и нажмите Создать учетную запись.

Выберите имя (неважно, как вы его называете).

Затем выполните обычную настройку биллинговой учетной записи.

Когда вы закончите, нажмите «Отправить», и вы перейдете на эту консоль.

Замечательно, теперь у вас есть платежный аккаунт Google, с которым вы можете связать свой проект.

Вернитесь в консоль Firebase здесь и выберите созданный проект, который должен выглядеть следующим образом:

Слева находится ваша навигация. Теперь у нас есть план Spark, и мы хотим обновить наш проект до плана Blaze, чтобы мы могли включить биллинг.

Посмотрите в нижней части навигации, где написано «Обновить», и щелкните по нему.

Нажмите «Выбрать план» под «Blaze».

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

Кроме того, «Случайная платежная учетная запись» - это имя, которое я выбрал для своей платежной учетной записи. Это не просто аккаунт какого-то случайного человека.

Нажмите «Купить» (не беспокойтесь, они ничего не взимают с вас), и вы получите электронное письмо с уведомлением о вашем обновлении.

OK. Мы с этим покончили.

Установите местоположение вашего ресурса GCP

На самом деле я не знаю, почему Google требует это только для заданий cron, но нам нужно указать местоположение нашего ресурса GCP. Однако это довольно просто.

На панели навигации консоли Firebase найдите маленький значок шестеренки вверху. Нажмите на это и нажмите «Настройки проекта», что приведет вас сюда:

Справа от того места, где написано «Расположение ресурса Google Cloud Platform (GCP)», нажмите маленький карандаш рядом с тем местом, где написано «Еще не выбрано», чтобы открыть это:

Вы всегда можете просто погуглить местоположения в раскрывающемся списке, чтобы увидеть, какое из них ближе всего к вам, но я живу в Лос-Анджелесе, поэтому я собираюсь использовать us-west4.

Хорошо, мы наконец закончили с консолью.

5. Кодируйте свой проект

Откройте каталог вашего проекта в вашем любимом текстовом редакторе. Я собираюсь использовать VSCode.

Вот базовая структура нашего проекта. Для наших целей единственное, что нас действительно волнует, - это файл index.js внутри каталога functions. Итак, давайте откроем это.

Это дает нам пример облачной функции, написанной здесь в комментариях. Однако этот пример предназначен для функции HTTP, и нам нужно задание cron. Разница между ними в том, как они вызываются:

  • Функция HTTP вызывается путем отправки HTTP-запроса (например, запроса GET или POST) к функции, точно так же, как сервер вызывает маршрут при получении входящего запроса.
  • Задание cron вызывается по расписанию

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

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

  1. exports.myPubSubFunction

Это добавление нашей функции к объекту экспорта и вызов нашей функции «myPubSubFunction».

Объект экспорта может содержать несколько функций, поэтому, если мы хотим добавить больше функций для развертывания в наш проект Firebase, мы можем просто добавить дополнительные функции к объекту экспорта в этом файле index.js.

2. functions.pubsub

Класс functions - это основа того, как мы делаем все наши вещи Firebase в этом файле.

Ранее мы видели пример работы HTTP-функции:

functions.http

Мы хотим создать так называемую функцию Pub / Sub, которая, по сути, является просто способом Firebase сказать задание cron.

3. .schedule('* * * * *')

Вот как мы планируем работу. Пять звездочек обозначают идею Выполняйте эту функцию каждую минуту. Если вы хотите научиться создавать собственный временной интервал, перейдите в Cron Tab Guru, который вам поможет.

4.

.onRun(() => {
console.log(‘Hello World’);
})

Это функция обратного вызова, которая будет вызываться при фактическом вызове нашей функции. Здесь все, что мы делаем, это приказываем консоли Firebase регистрировать старомодное доброе «Hello World».

6. Развертывание с помощью интерфейса командной строки Firebase.

Спасибо Firebase за то, что сделали эту часть такой простой для нас.

Снова откройте программу терминала и перейдите в каталог проекта. Я собираюсь использовать интегрированный терминал VSCode.

1. Войдите в свою учетную запись Firebase из командной строки, используя команду:

firebase login

Это даст вам подсказку. Просто нажмите Y и Enter, и ваш браузер откроется для аутентификации в Google. Выполните все эти действия для входа в систему, а когда закончите, закройте эту страницу и вернитесь в свой терминал. Теперь вы должны войти в свою терминальную программу.

2. Свяжите свой локальный код с созданным вами проектом консоли Firebase.

Чтобы связать свой проект, вам нужно получить идентификатор проекта. Используйте эту команду:

firebase list

Это отобразит все ваши активные проекты из консоли Firebase. Второй столбец, где написано «Идентификатор проекта / экземпляр», - это идентификатор проекта. Найдите созданный вами проект и скопируйте идентификатор из второго столбца.

Затем используйте следующую команду:

firebase use --add <Paste your project ID here>

Итак, мой выглядел так:

firebase use --add fir-helloworld-c494f

3. Разверните свой проект.

Наконец, момент, которого мы все ждали ...

firebase deploy

Это перенесет ваш проект в облако. Если все проверки пройдут нормально, все будет в порядке.

4. Убедитесь, что ваш проект запущен.

Вернитесь в Консоль Firebase, выберите свой проект, и в навигации должна быть кнопка с надписью функции. Нажмите на нее, и вы должны попасть сюда:

Теперь видно, что у нас есть активное задание cron, выполняющееся с интервалом «* * * * *». Нажмите «Журналы», чтобы увидеть console.log («Hello World»).

И мы видим, что наша работа выполняется.

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

Сохраняем наш файл.

Снова разверните нашу функцию, используя:

firebase deploy

Он снова сделает все проверки.

Вернитесь в консоль Firebase, где мы снова просматривали наши журналы.

И его там больше нет.