Инструменты для Serverless: расширяем возможности работы с бессерверными платформами

3fb3e4b11e737d5dc9910cbf459a9944.jpeg

При работе с Serverless есть задачи, для которых базовой функциональности облачных платформ не хватает: использование бессерверных функций со сторонними API, локальная отладка приложения, объединение возможностей нескольких фреймворков. В ответ на эти вызовы появились специальные инструменты — бессерверные фреймворки. Они упрощают запуск проекта, повышают уровень защищённости приложения, а также позволяют быстро внести изменения в стек или архитектуру.

Инструментов для работы с бессерверными технологиями — великое множество, и в некоторых подборках рассматривается аж пятьдесят различных наименований. Но я сосредоточусь именно на фреймворках и расскажу о тех, что показались мне наиболее интересными и актуальными.

Зачем нужны фреймворки для бессерверных функций

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

  • Быстрая настройка серверной части и запуск проекта. Многие фреймворки (например, Apex Up) позволяют разворачивать приложения одной командой, а сам процесс занимает считанные секунды.

  • Короткие и простые команды для разворачивания приложения, обновления и управления. К примеру, чтобы развернуть проект, в большинстве случаев потребуются всего три команды: install, init и deploy.

  • Помощь в процессе масштабирования. Масштабирование является сильной стороной бессерверных технологий, и фреймворки помогают использовать это преимущество: улучшают производительность, осуществляют процесс автомасштабирования (да, у бессерверных платформ есть такая функциональность, но она может быть по тем или иным причинам неудобна или недостаточно функциональна) или процесс ручного масштабирования, когда может быть нужно менять код или конфигурацию.

  • Решение проблемы холодного запуска. Холодный старт — известная для бессерверных приложений проблема, которая решается несколькими различными методами, однако некоторые фреймворки освобождают пользователя от необходимости решать её самостоятельно.

  • Лёгкое управление содержимым и модерирование контента. Бессерверные системы привязаны к поставщику услуг, особенно если применять предлагаемые провайдером базы данных, шины обмена сообщениями, API-шлюзы и так далее. Фреймворки же становятся промежуточным звеном: обеспечивают взаимозаменяемость провайдеров и дают возможность использовать желаемый язык и подключать необходимые интеграции.

  • Интеграция с другими платформами и приложениями. Часто провайдеры облачных услуг ограничивают используемые языки программирования, а фреймворки позволяют использовать привычные инструменты там, где это не реализовано провайдером. 

Как подобрать инструмент под свой проект

Подходящих для работы с Serverless инструментов много, и классифицировать их можно по-разному: например, по функциональности. Так, одни фреймворки являются вспомогательными инструментами для каких-то определённых функций, а другие позволяют интегрировать собственный проект с другими платформами.

Бессерверные инструменты используются для разработки приложений, управления инфраструктурой, оркестрации контейнеров и вспомогательных задач вроде тестирования. Эти инструменты развиваются в двух направлениях: одни стараются охватить большое количество функций, а другие сосредоточены на одной определённой функциональности.

Многофункциональные инструменты

Serverless Framework

Один из самых известных и популярных фреймворков для создания бессерверных приложений. Благодаря совместимости с несколькими вариантами бэкенда он часто используется совместно с другими фреймворками. 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.

Midway

Бессерверный фреймворк от китайских разработчиков для создания облачных функций Node.js: рассчитан в первую очередь на облака от Alibaba и Tencent, но совместим и с AWS. Он подходит для создания классических серверных и бессерверных приложений, небольших программ и микросервисов. Midway позволяет создавать приложения, которые работают как в контейнере, так и в виртуальных машинах, в экосистеме AWS и облаках от Alibaba и Tencent.

Apex Up

Инструмент для развёртки масштабируемых бессерверных приложений, API и статических веб-сайтов. Apex Up фокусируется на развёртывании «ванильных» HTTP-серверов.

Особенности:

  • интеграция с AWS;

  • инфраструктура как код;

  • поддержка Crystal, Node.js 10.x, Golang, Java и Python.

Webiny Serverless Application Framework

Webiny — это open source фреймворк для бессерверных приложений на JavaScript со встроенной CMS. Он пока совместим только с AWS, но авторы планируют сделать его кроссплатформенным.

Zappa

Многофункциональный фреймворк для написания приложений на Python, позволяющий свободно работать с AWS Lambda и API Gateway.

Особенности:

  • открытый исходный код;

  • формирование политики управления идентификацией и доступом по умолчанию (IAM).

Специализированные инструменты

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

Инструменты для работы с AWS

У AWS много собственных инструментов, которые облегчают определённые задачи, и их число растёт день ото дня. Большинство инструментов от других разработчиков в той или иной степени совместимы с AWS: в том числе serverless-сервисы Yandex.Cloud.

AWS Chalice

Фреймворк для написания бессерверных приложений на Python.

AWS Lambda Power Tuning

Инструмент работает на основе пошаговых функций AWS и помогает оптимизировать функции Lambda с точки зрения затрат и/или производительности на основе данных.

AWS Serverless Application Model (SAM)

Фреймворк с открытым исходным кодом для создания бессерверных приложений.

Инструменты для работы с Yandex.Cloud

Yappa

Инструмент для простого развёртывания веб-приложений на Python, вдохновлённый фреймворком Zappa. Некогда был заброшен, но в настоящий момент поддерживается энтузиастами.

Особенности:

  • открытый исходный код;

  • поддержка API Gateway;

  • подключение к Yandex Database;

  • аутентификация через собственный CLI вместо Yandex CLI;

  • поддержка WSGI/ASGI приложений (Flask, Django, FastAPI).

Инструменты для работы с Ruby

Ruby on Jets

Пакет инструментов, необходимых для создания приложений с использованием AWS Lambda, SNS, SQS, DynamoDB и других сервисов. Идеально подходит для написания функций, объединяющих сервисы и ресурсы AWS.

Мне нравится Ruby, потому и Ruby on Jets пришёлся по вкусу.

Особенности:

  • активная служба поддержки;

  • обширная техническая документация с большим количеством примеров.

Управление инфраструктурой

Architect

В основе архитектуры фреймворка лежит принцип «инфраструктура как код». Это позволяет настраивать инфраструктуру аналогично процессу программирования ПО. Включает инструменты для локальной разработки и тестирования, создания, развёртывания и управления бессерверной инфраструктурой AWS.

Pulumi

Инструмент для упрощения управления облачной инфраструктуры, запуска и разработки проекта. Работает как с виртуальными машинами и базами данных, так и с контейнерами, кластерами Kubernetes и бессерверными функциями.

Особенности:

  • открытый исходный код;

  • низкий порог вхождения;

  • Pulumi CrossGuard на страже вашей безопасности;

  • поддержка TypeScript, JavaScript, Python, Go и .NET;

  • поддержка нескольких облачных провайдеров и Kubernetes.

Оркестрация контейнеров

Kubeless

Фреймворк, позволяющий разворачивать небольшие фрагменты кода, не беспокоясь о базовой инфраструктуре. Ресурсы Kubernetes используют для автоматического масштабирования, маршрутизации API, мониторинга, устранения неполадок и многого другого. Интересующимся возможностями использования функций и вариантами бессерверных решений на bare metal Kubernetes советую заглянуть в отличную статью «FaaS и serverless-решения на примере PoC kubeless-функции».

Firecracker

Не фреймворк, но технология виртуализации с открытым исходным кодом. Предназначена для создания и управления безопасными мультитенантными контейнерными и функциональными службами.

Эмуляция

LocalStack

Полнофункциональный эмулятор облачного сервиса для локальной разработки и тестирования бессерверных приложений. Подключение к облачному провайдеру не требуется: LocalStack работает автономно и к тому же поддерживает огромное число сервисов AWS (AWS Lambda, S3, DynamoDB, Kinesis, SQS, SNS и так далее). Для ценителей есть PRO-версия.

image-loader.svg

Если вам интересна экосистема Serverless-сервисов и все, что с этим связано, заходите в наше сообщество в Telegram, где можно обсудить serverless в целом.

© Habrahabr.ru