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$ не выходили.
Так же ко всему этому бесплатно (при условии использования на ресурсах 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
Чтобы исключить большое количество копипаста при переходе между облаками ввели файлы конфигураций, вместо использования библиотек и модулей напрямую.
Файлы конфигурации интерфейсов разработали сами.
Файлы конфигурации API Gateway взяли такие же, как у AWS и Яндекс Облака (по сути это OpenAPI c дополнениями специфичными для конкретного облака).
Файлы конфигураций сервисов сделали сами, но они могут быть преобразованы в формат AWS, Яндекс Облака, Kubernetes, Docker Compose.
Дополнительно, модифицировали генератор интерфейсов, для переключения между разными бэкэндами (чтобы интерфейс не был жестко связан с API шлюзом), разделив проект на плагины и компоненты.
API шлюз, написанный для docker, получил ряд сервисов. Общим для всех, стал сервис авторизации, что позволяет переключаться между Cognito и его альтернативами (как Keycloak) независимо от облака, которое используем.
Так же, помимо собственных сервисов, перенесенных из AWS в docker, появились компоненты, используемые в AWS и Яндекс облаке.
Общая схема «слоёного пирога» для нашего решения получилась такая (без лишней детализации)
В итоге получилось гибкое решение, позволяющее строить как интерфейсы для готового API, так и с собственным API и бекэндами, адаптированными для AWS, Яндекс Облака и Docker-совместимых сред (Kubernates, Swarm и т. п.)
Что дальше?
Дальше мы задумались о возможности развить наше решение до no-code аналогов таких как bubble, directual, adalo, чтобы еще больше упростить работу с конфигурациями и исключить повторный ввод кода (например при конфигурировании интерфейсов и сервисов).