Без лишних слов… Яппа
$ pip install yappa $ pip freeze > requirements.txt
$ yapa setup
$ yappa depoy
Все.
Ваше Python-приложение доступно в облаке Яндекса, имеет собственный URL и готово к любому наплыву посетителей.
И вы платите только за время процессора, потраченное на обработку запросов.
Несколько слов о бессерверных технологиях
При запуске бессерверных приложений вы платите за используемые ресурсы, а масштабированием занимается облачный провайдер.Вы не запускаете виртуальные машины, не настраиваете оркестраторы и не платите за всё это во время простоя.
Бессерверный подход позволяет команде разработчиков сосредоточиться на программировании логики приложения, а деньги за облако идут только на обслуживание запросов пользователей.
Бессерверная функция — это просто функция, которая принимает определенные аргументы и возвращает ответ в определенном формате.
def handler(event, context):
return {
'statusCode': 200,
'body': json.dumps({
'event': event,
}),
}
После создания версии функции в облаке интерпретатор Python с импортированными зависимостями крутится и ждет поступления к нему запроса.
Несмотря на то, что веб-приложение и функция в чем-то похожи, просто запустить веб-приложение без сервера нельзя: для веб-приложения нужно запустить веб-сервер, который будет прослушивать порт в ожидании запроса, а функция просто функция.
Не очень понятно, как отлаживать, тестировать, запускать локально и т.д. Если у вас есть свой кусок кода, который был обычным API, а теперь вы хотите запускать его как бессерверные функции, вам нужно уйти от обычного фреймворка, отказаться от многих вкусностей, промежуточного программного обеспечения, и на выходе будет код, который сможет только запускаться в облаке с необычными артефактами и структурой.
Разработчику, который только что присоединился к проекту, придется потратить дополнительное время на изучение этих функций.
Я хотел, чтобы бессерверная система работала без необходимости изменения кода.
Максимум — дополнительный файл конфигурации вместе с docker-compose.yaml.
Немного о Яппе
На гитхабе есть инструменты для aws, но для яндекса я нашел только Yappa. Проект был написан два года назад и успешно заброшен.С тех пор в Yandex Cloud добавлена поддержка API-шлюза, что позволило развернуть приложение с более чем одним маршрутом.
Было решено сделать первые шаги в open source: взять на себя разработку проекта, добавить поддержку API-шлюза, немного изменить логику обработки запросов и взять аутентификацию внутри своего cli, отказавшись от использования яндекс-кли.
Сейчас Яппа поддерживает любое приложение WSGI/ASGI (привет, Flask, Django, FastAPI).
При развертывании Яппа :
- упаковывает проект: собирает код вашего приложения, обработчики и зависимости из require.txt в архив, загружает на s3
- создает версию функции, указывающую на нужный обработчик
- обновляет API-шлюз
Обработчик — это точка входа, бессерверная функция.
При запуске в облаке он считывает путь к вашему приложению из yappa.yaml, загружает приложение и ждет. Затем при поступлении события формирует из него http-запрос и передает его уже загруженному приложению wsgi/asgi. Используя комбинацию шлюз+функция+c3, вы можете запустить не только классический json API, вы также можете реализовать классическое приложение Django и SPA, перенаправляя запросы статических данных в c3. добавим чуть позже репозиторий примеры таких развертываний.
Для первого запуска в облаке нужно выполнить две команды
- $yappa setup — выясняем каталог и облако, в котором будем запускать приложения.
Создаем сервисную учетную запись, от имени которой будут производиться все следующие манипуляции (ключ сохраняется локально в файле .
yc)
- $yappa Deploy — спрашивает вас о проекте (имя, имя корзины, тип приложения и путь к нему).
Сохраняет настройки в yappa.yaml. Создает функцию и версию функции.
Сохраняет файл настроек API-шлюза в yappa_gw.yaml, создает шлюз.
- $yappa Deploy — создается новая версия функции, на всякий случай обновляется API шлюза.
Ограничения
Подключение к базам данных
В сети Yandex Cloud поддерживаются только подключения к YDB. В общем, на нем можно написать приложение, на голом SQL. или вытащить базу наружу.Пару недель назад добавили поддержку Postgres в режиме предварительного просмотра, скоро Yappa подтянется, следите за обновлениями.
Асинхронные задачи
Нет поддержки задач.Есть пара идей, как это реализовать, возможно, добавим, как только попадем в руки, следите за обновлениями.
Планы на будущее
На данный момент Yappa как инструмент вполне готов.После того, как мы разберемся с управляемой поддержкой Postgres, в планы входят небольшие улучшения Cli и добавление примеров развертывания.
Но есть пара мыслей по поводу довольно объемных задач, для которых нужно накопить вдохновение.
В отличие от aws и gcp, бессерверная база данных Яндекса является реляционной.
Это значит, что вы можете сделать полноценное приложение, без ограничений документных баз данных, в бессерверном режиме, с оплатой только за операции.
К сожалению, функциональность YDB имеет ряд ограничений; синтаксис запроса в некоторых местах отличается.
Но теоретически.
если вы реализуете поддержку YDB для Django ORM. можно будет запускать приложения Django без почасовой оплаты.
Не знаю, сойду ли я ввязываться в эту историю, но если найдется парочка единомышленников, уверен, будет проще :) С пожеланиями и предложениями - добро пожаловать телеграмма чат .
Теги: #python #Serverless #fastapi #CLI #flask #django #serverless
-
Гипатия
19 Oct, 24 -
Плавный Переход К Распределенному Интернету?
19 Oct, 24 -
Битрикс24 — Crm Или Больше?
19 Oct, 24 -
Zend Framework 2.0 С Разветвлением
19 Oct, 24