Yandex Cloud Functions в целом следует общей концепции serverless functions. Для запуска кода облачных (бессерверных) функций используются специально созданные виртуальные машины, на которых установлены рантаймы, то есть среды выполнения кода на том или ином языке программирования, например Python версии 3.9. При этом для удобства пользователя работа с ними скрыта за абстракцией, позволяющей сосредоточиться на решаемой задаче.

Однако сервис Cloud Functions умеет не только это. Он также:

  1. Ведёт журнал выполнения функций. Сюда выводятся параметры и время запуска функции, а также время и результат её выполнения. У пользователя есть возможность выводить в журнал и собственную информацию. Это удобно как при создании и отладке функций, так и при разборе нештатных ситуаций. Например, данные, которые вам нужно было записать в базу данных, в итоге туда не попали. Почему? Не вызвалась функция или была недоступна база данных? В коде функции была ошибка? Журнал поможет найти ответы на эти вопросы.
  2. Интегрируется с другими сервисами Yandex Cloud. Для этого он использует триггер — механизм, который позволяет запускать функцию по событиям в других сервисах. Например, вы можете вызывать функцию при получении пакета данных от ваших IoT-устройств для его обработки.
  3. Предоставляет SDK для разработчиков. Это программные модули, которые можно подключить и вызвать из пользовательских функций. Они упрощают взаимодействие с другими сервисами Yandex Cloud из кода программы. Например, вы можете использовать SDK для сохранения данных в Yandex Object Storage.

При этом у сервиса есть два концептуальных ограничения:

  1. Функции должны быть конечными. Они не могут бесконечно выполнять какую-то задачу. Это ограничение заложено в суть самого сервиса, есть даже специальный таймер, по истечении которого функция будет автоматически завершена.
  2. Функции не могут сами по себе хранить состояния. Cloud Functions — среда выполнения, в которой не сохраняется состояние. Каждая запущенная копия (instance) функции отвечает только за один запрос одновременно (в случае большого количества запросов эта копия может последовательно их обработать). Конкурирующие запросы обрабатываются разными копиями функции, эти копии не могут обмениваться переменными или локальной памятью. Если вам нужно, чтобы функция сохраняла состояние, данные нужно записать в файл в объектном хранилище или в базу данных, например YDB.

Запускаем функцию с помощью CLI

Практика: https://practicum.yandex.ru/trainer/ycloud/lesson/1100c6c5-c4ce-476f-a75b-3c51c2668248/

Как готовить функции к запуску и управлять ими

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

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

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

Контекст используют для взаимодействия программного кода функции с сервисом Yandex Cloud Functions. Например, с помощью контекста узнают время до завершения выполнения Cloud Functions.

Ещё одно важное понятие модели программирования — среда выполнения, т. е. логическая инфраструктура, которая содержит необходимое окружение для запуска пользовательского кода. Она соответствует выбранному языку программирования. Сервис позволяет использовать такие среды выполнения, как Python, Node.js или Java (с полным списком вы можете ознакомиться в документации).

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

Наконец, чтобы сообщить сервису об ошибке при выполнении функции, обрабатывайте ошибки с помощью исключений.

Создание триггера от ObjectStorage

Практика: https://practicum.yandex.ru/trainer/ycloud/lesson/ce6e0d5c-c056-46ff-92e3-c93ca3014a9d/

Создание триггера по таймеру

Практика – проверка доступности сайта: https://practicum.yandex.ru/trainer/ycloud/lesson/8e77c32d-662a-4981-9fb6-87dd197db527/


📂 YandexCloud | Последнее изменение: 15.08.2024 13:24