Найти в Дзене

CloudNative и low-code

История о том, как можно быстро построить решение в облаке и что требуется, чтобы из него уйти. В 2020 году мы начали разработку приложения и бекэнда для него, а так же iot-устройства. Для уменьшения стоимости размещения при отсутствии активности, разместили сервисы в облаке AWS. В проекте использовались API Gateway, CloudFront, CloudWatch, Cognito, DynamoDB, IoT Core, Lambda, Pinpoint, Route 53, SES, Step Functions, SQS, S3. Получилось всё бессерверное. Таким образом при полном отсутствии запросов платить требовалось только за DNS запись домена, на котором располагалось API, в сервисе Route 53 (она составляла 0,5$ в месяц), за 28 месяцев использования в Route 53 добавили еще 4 домена, что увеличило оплату до 2,5$. В пике оплата за все сервисы составляла 21$ в месяц. Основное потребление было у DynamoDB (в среднем 14$), S3 вырос с 0$ до 0,04$ ну и API Gateway иногда просил от 0,04$ до 0,3$. Остальные сервисы из 0$ не выходили. Так же ко всему этому бесплатно (при условии использования
Оглавление

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

В 2020 году мы начали разработку приложения и бекэнда для него, а так же iot-устройства.

Для уменьшения стоимости размещения при отсутствии активности, разместили сервисы в облаке AWS. В проекте использовались API Gateway, CloudFront, CloudWatch, Cognito, DynamoDB, IoT Core, Lambda, Pinpoint, Route 53, SES, Step Functions, SQS, S3. Получилось всё бессерверное.

Таким образом при полном отсутствии запросов платить требовалось только за DNS запись домена, на котором располагалось API, в сервисе Route 53 (она составляла 0,5$ в месяц), за 28 месяцев использования в Route 53 добавили еще 4 домена, что увеличило оплату до 2,5$.

В пике оплата за все сервисы составляла 21$ в месяц. Основное потребление было у DynamoDB (в среднем 14$), S3 вырос с 0$ до 0,04$ ну и API Gateway иногда просил от 0,04$ до 0,3$. Остальные сервисы из 0$ не выходили.

Так же ко всему этому бесплатно (при условии использования на ресурсах AWS) выпускался сертификат для доменов и поддоменов (т. е. формата *. домен.).

Разработали приложение для ios, android, кабинет для доступа к информации администраторов и менеджеров, а так же iot-устройство, регистрирующееся в IoT Core и получающее из него команды, сделали и перевели в продакшн за 6 месяцев.

За время работы сервиса, набрали анонимных пользователей (уникальных мобильных телефонов в Cognito) — 8 468 и зарегистрированных — 1 217. Т. е. сервисом пользовалось около 10 000 пользователей.

Летом 2022 задумались о переезде с AWS на Яндекс Облако или аналоги.

В результате сравнения сервисов выяснили, что полностью покрыть наши потребности, по функционалу из перечисленных сервисов, никто не смог.

Перенести существующие и заместить не достающие сервисы в docker получилось за 3 месяца, но тот же Managed Service for Kubernetes у Яндекса только за наличие Managed просит от 6 336₽ до 16 012,80₽, плюс за процессоры Yandex Compute Cloud для узлов от 2 131,80 ₽.

Таким образом, идею удешевления, за счет использования бессерверных технологий, держали в голове. Выписали, что есть общего у того, что перенесли в Docker, что есть у AWS и Яндекс Облака. В результате появилось решение, которое позволяет использовать возможности облака и контейнеров в нужном нам сочетании.

Через еще 3 месяца разработки получилось то, что получило рабочее название HelpSuite.

Code name — HelpSuite

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

Основные подходы заложенные в HelpSuite
Основные подходы заложенные в HelpSuite

Файлы конфигурации интерфейсов разработали сами.

Пример файла конфигурации интерфейса
Пример файла конфигурации интерфейса

Файлы конфигурации API Gateway взяли такие же, как у AWS и Яндекс Облака (по сути это OpenAPI c дополнениями специфичными для конкретного облака).

Пример файла конфигурации API
Пример файла конфигурации API

Файлы конфигураций сервисов сделали сами, но они могут быть преобразованы в формат AWS, Яндекс Облака, Kubernetes, Docker Compose.

Пример файла конфигурации сервиса
Пример файла конфигурации сервиса

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

Структура проекта, обрабатываемого генератором интерфейса
Структура проекта, обрабатываемого генератором интерфейса

API шлюз, написанный для docker, получил ряд сервисов. Общим для всех, стал сервис авторизации, что позволяет переключаться между Cognito и его альтернативами (как Keycloak) независимо от облака, которое используем.

Сервисы, реализованные для api шлюза
Сервисы, реализованные для api шлюза

Так же, помимо собственных сервисов, перенесенных из AWS в docker, появились компоненты, используемые в AWS и Яндекс облаке.

Сервисы и компоненты, используемые в AWS и Яндекс Облаке
Сервисы и компоненты, используемые в AWS и Яндекс Облаке

Общая схема «слоёного пирога» для нашего решения получилась такая (без лишней детализации)

Из таких слоев состоит получившееся решение
Из таких слоев состоит получившееся решение

В итоге получилось гибкое решение, позволяющее строить как интерфейсы для готового API, так и с собственным API и бекэндами, адаптированными для AWS, Яндекс Облака и Docker-совместимых сред (Kubernates, Swarm и т. п.)

Что дальше?

Дальше мы задумались о возможности развить наше решение до no-code аналогов таких как bubble, directual, adalo, чтобы еще больше упростить работу с конфигурациями и исключить повторный ввод кода (например при конфигурировании интерфейсов и сервисов).