Yandex Cloud Functions (Functions as a Service, FaaS) позволяют нам захостить наш код (Python, PHP, Net, NodeJS, R) на серверах (облачный хостинг, Platform as a Service, PaaS) Яндекса не разбираясь во всех сложностях DevOps.

  • Не нужно покупать сервер, настраивать, обслуживать.
  • Не нужно покупать домен и SSL сертификаты для того чтобы получить доступ к коду по HTTP(s).
  • Не нужно нужно разворачивать фреймворки вроде Django или Laravel.
  • Не нужно платить за сервер, когда он не используется.
В случае с Cloud Functions вы платите только за вызовы функции и время её работы. Конкретно в Yandex Cloud использование функций может быть вообще бесплатным при вполне приличном объеме использования.

А порой очень важно что вам не нужно ничего делать даже если нагрузка на проект построенный на Yandex Cloud Functions вдруг резко (возможно кратковременно вырастет) — все само по себе масштабируется (главное понимать что за это придется платить)

Для чего использовать Yandex Cloud Functions фрилансеру или инди разработчику

Для меня важны 3 фактора облачной инфраструктуры:

  • очень быстрое развертывание нужного РАБОЧЕГО окружения, независимого от других проектов
  • относительная (с оговорками) дешевизна
  • практически полное отсутствие необходимости поддержки серверной части (но лимиты на бюджет — обязательно)

Если вы подписаны на меня на YouTube, то уже знаете что я частенько пописываю всякие штуки для работы с API Мосбиржи, API Тинькофф Инвестиции, API YT. И это часто простой код кот должен что-то где то взять, обработать и отправить куда-то. Роботы, советники, анализаторы и т.п. Здесь нет авторизаций, кук, загрузки пользовательских данных и прочего. И вот для таких задач для меня идеально подходит Cloud Functions.

Возможно для вас будут важны другие характеристики Yandex Cloud Functions (а их хватает), но в этой статье я рассказываю лишь о своем личном опыте!

Недостатки Cloud Functions

Можно считать недостатком (хотя это скорее просто сам принцип работы) шаблона «функция как услуга» является что после того как функция отработала данные с которыми работала эта функция полностью уничтожаются и сохранить их в рамках Cloud Function нельзя. Т.е. для организации хранения данных нужно использовать иные сервисы (базы данных, виртуальные диски и т.п.). В рамках одного хостера, в данном случае Yandex Cloud, это делается просто, однако за эти ресурсы нужно платить отдельно. И это уже не всегда оправданно для индивидуального разработчика.

Ограниченный набор сред выполнения. Вы не можете собрать свой образ и скажем использовать PHP 8 или PHP 5.6 — вам доступна только одна версия PHP 7.4 и ничего больше. php.ini вам не доступен. Для Python сейчас актуальна версия 3.10, но в Cloud Function вы можете поставить 3.7-3.9.

Разнообразные лимиты, которые раскиданы по всей документации и не всегда очевидны. /tmp < 512Мб, переменные окружения <4кб, память на функцию <2Гб, таймаут <600 сек, запрос/ответ < 3.5Мб, установка зависимости <5 мин.

Не самый удобный способ работы с кодом — загрузка через веб медленна и не удобна, через yc (консоль) быстрее, но есть нюансы. Т.е. подключиться к чему то в облаке по SSH — нельзя.

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

Альтернативы

Есть мнение что вот эту всю концепцию Functions as a Service (FaaS) придумали в Амазон. И они конечно предлагают эту услугу, только это называется у них AWS Lambda. Есть такие штуки и у всех конкурентов Google Cloud Functions, Microsoft Azure Functions, Oracle Fn.

Как создать Cloud Function (через web или консоль yc)

У вас должен быть создан аккаунт в Yandex Cloud и включен биллинг. Я рассказывал об этом в видео.

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

Я настоятельно рекомендую поставить консоль yc. Тогда код можно будет писать в своей IDE и загружать (и запускать функцию) одной командой в консоли. Для IDE от JetBrains у YC есть плагин.

Подробно в видео:

Полезные ссылки

Исходники примеров