При работе с Serverless есть задачи, для которых базовой функциональности облачных платформ не хватает: использование бессерверных функций со сторонними API, локальная отладка приложения, объединение возможностей нескольких фреймворков. В ответ на эти вызовы появились специальные инструменты — бессерверные фреймворки. Они упрощают запуск проекта, повышают уровень защищённости приложения, а также позволяют быстро внести изменения в стек или архитектуру.
Инструментов для работы с бессерверными технологиями — великое множество, и в некоторых подборках рассматривается аж пятьдесят различных наименований. Но я сосредоточусь именно на фреймворках и расскажу о тех, что показались мне наиболее интересными и актуальными.
Зачем нужны фреймворки для бессерверных функций
Основная задача таких фреймворков — сделать разработку быстрой и простой, поэтому они предоставляют следующие функции и возможности:
Быстрая настройка серверной части и запуск проекта. Многие фреймворки (например, Apex Up) позволяют разворачивать приложения одной командой, а сам процесс занимает считанные секунды.
Короткие и простые команды для разворачивания приложения, обновления и управления. К примеру, чтобы развернуть проект, в большинстве случаев потребуются всего три команды: install, init и deploy.
Помощь в процессе масштабирования. Масштабирование является сильной стороной бессерверных технологий, и фреймворки помогают использовать это преимущество: улучшают производительность, осуществляют процесс автомасштабирования (да, у бессерверных платформ есть такая функциональность, но она может быть по тем или иным причинам неудобна или недостаточно функциональна) или процесс ручного масштабирования, когда может быть нужно менять код или конфигурацию.
Решение проблемы холодного запуска. Холодный старт — известная для бессерверных приложений проблема, которая решается несколькими различными методами, однако некоторые фреймворки освобождают пользователя от необходимости решать её самостоятельно.
Лёгкое управление содержимым и модерирование контента. Бессерверные системы привязаны к поставщику услуг, особенно если применять предлагаемые провайдером базы данных, шины обмена сообщениями, API-шлюзы и так далее. Фреймворки же становятся промежуточным звеном: обеспечивают взаимозаменяемость провайдеров и дают возможность использовать желаемый язык и подключать необходимые интеграции.
Интеграция с другими платформами и приложениями. Часто провайдеры облачных услуг ограничивают используемые языки программирования, а фреймворки позволяют использовать привычные инструменты там, где это не реализовано провайдером.
Как подобрать инструмент под свой проект
Подходящих для работы с Serverless инструментов много, и классифицировать их можно по-разному: например, по функциональности. Так, одни фреймворки являются вспомогательными инструментами для каких-то определённых функций, а другие позволяют интегрировать собственный проект с другими платформами.
Бессерверные инструменты используются для разработки приложений, управления инфраструктурой, оркестрации контейнеров и вспомогательных задач вроде тестирования. Эти инструменты развиваются в двух направлениях: одни стараются охватить большое количество функций, а другие сосредоточены на одной определённой функциональности.
Многофункциональные инструменты
Один из самых известных и популярных фреймворков для создания бессерверных приложений. Благодаря совместимости с несколькими вариантами бэкенда он часто используется совместно с другими фреймворками. Serverless Framework поддерживает как AWS, так и Google Cloud, Microsoft Azure Functions и Yandex.Cloud, так что можно выбрать платформу на свой вкус. Например, с его помощью можно постить шутки в Твиттер по таймеру или написать лендинг.
Чем же он так хорош?
Открытый исходный код и 40 тысяч звёзд на GitHub.
Написан для JavaScript, но позволяет писать функции (можно и на Python, C#, F#, Go, Node.js, Ruby).
Расширяет собственные возможности с помощью плагинов.
Обновляет лямбда-функции AWS и их триггеры с помощью простого абстрактного синтаксиса на языке YAML.
Поддерживает несколько бэкендов, включая Kubernetes.
Обладает гибкой системой переменных.
Поддерживает сразу несколько облачных платформ, в том числе Yandex.Cloud.
Бессерверный фреймворк от китайских разработчиков для создания облачных функций Node.js: рассчитан в первую очередь на облака от Alibaba и Tencent, но совместим и с AWS. Он подходит для создания классических серверных и бессерверных приложений, небольших программ и микросервисов. Midway позволяет создавать приложения, которые работают как в контейнере, так и в виртуальных машинах, в экосистеме AWS и облаках от Alibaba и Tencent.
Инструмент для развёртки масштабируемых бессерверных приложений, API и статических веб-сайтов. Apex Up фокусируется на развёртывании «ванильных» HTTP-серверов.
Особенности:
интеграция с AWS;
инфраструктура как код;
поддержка Crystal, Node.js 10.x, Golang, Java и Python.
Webiny Serverless Application Framework
Webiny — это open source фреймворк для бессерверных приложений на JavaScript со встроенной CMS. Он пока совместим только с AWS, но авторы планируют сделать его кроссплатформенным.
Многофункциональный фреймворк для написания приложений на Python, позволяющий свободно работать с AWS Lambda и API Gateway.
Особенности:
открытый исходный код;
формирование политики управления идентификацией и доступом по умолчанию (IAM).
Специализированные инструменты
Вторая часть бессерверных фреймворков имеет узкую направленность и разработана специально для интеграции с какой-либо платформой (например, Yandex.Cloud или AWS) либо для решения какой-либо задачи (например, локальной эмуляции работы облачного сервиса).
Инструменты для работы с AWS
У AWS много собственных инструментов, которые облегчают определённые задачи, и их число растёт день ото дня. Большинство инструментов от других разработчиков в той или иной степени совместимы с AWS: в том числе serverless-сервисы Yandex.Cloud.
Фреймворк для написания бессерверных приложений на Python.
Инструмент работает на основе пошаговых функций AWS и помогает оптимизировать функции Lambda с точки зрения затрат и/или производительности на основе данных.
AWS Serverless Application Model (SAM)
Фреймворк с открытым исходным кодом для создания бессерверных приложений.
Инструменты для работы с Yandex.Cloud
Инструмент для простого развёртывания веб-приложений на Python, вдохновлённый фреймворком Zappa. Некогда был заброшен, но в настоящий момент поддерживается энтузиастами.
Особенности:
открытый исходный код;
поддержка API Gateway;
подключение к Yandex Database;
аутентификация через собственный CLI вместо Yandex CLI;
поддержка WSGI/ASGI приложений (Flask, Django, FastAPI).
Инструменты для работы с Ruby
Пакет инструментов, необходимых для создания приложений с использованием AWS Lambda, SNS, SQS, DynamoDB и других сервисов. Идеально подходит для написания функций, объединяющих сервисы и ресурсы AWS.
Мне нравится Ruby, потому и Ruby on Jets пришёлся по вкусу.
Особенности:
активная служба поддержки;
обширная техническая документация с большим количеством примеров.
Управление инфраструктурой
В основе архитектуры фреймворка лежит принцип «инфраструктура как код». Это позволяет настраивать инфраструктуру аналогично процессу программирования ПО. Включает инструменты для локальной разработки и тестирования, создания, развёртывания и управления бессерверной инфраструктурой AWS.
Инструмент для упрощения управления облачной инфраструктуры, запуска и разработки проекта. Работает как с виртуальными машинами и базами данных, так и с контейнерами, кластерами Kubernetes и бессерверными функциями.
Особенности:
открытый исходный код;
низкий порог вхождения;
Pulumi CrossGuard на страже вашей безопасности;
поддержка TypeScript, JavaScript, Python, Go и .NET;
поддержка нескольких облачных провайдеров и Kubernetes.
Оркестрация контейнеров
Фреймворк, позволяющий разворачивать небольшие фрагменты кода, не беспокоясь о базовой инфраструктуре. Ресурсы Kubernetes используют для автоматического масштабирования, маршрутизации API, мониторинга, устранения неполадок и многого другого. Интересующимся возможностями использования функций и вариантами бессерверных решений на bare metal Kubernetes советую заглянуть в отличную статью «FaaS и serverless-решения на примере PoC kubeless-функции».
Не фреймворк, но технология виртуализации с открытым исходным кодом. Предназначена для создания и управления безопасными мультитенантными контейнерными и функциональными службами.
Эмуляция
Полнофункциональный эмулятор облачного сервиса для локальной разработки и тестирования бессерверных приложений. Подключение к облачному провайдеру не требуется: LocalStack работает автономно и к тому же поддерживает огромное число сервисов AWS (AWS Lambda, S3, DynamoDB, Kinesis, SQS, SNS и так далее). Для ценителей есть PRO-версия.
Если вам интересна экосистема Serverless-сервисов и все, что с этим связано, заходите в наше сообщество в Telegram, где можно обсудить serverless в целом.