При работе с 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 в целом.
ссылка на оригинал статьи https://habr.com/ru/articles/590895/
Добавить комментарий