Почему вообще поехали:
Не из патриотизма. Аккаунт AWS жил на прокладку-юрлицо в Казахстане, оплата шла через посредника с комиссией 12-15%, и каждый месяц был риск, что прокладку прихлопнут вместе с аккаунтом и данными. Плюс латентность: основная аудитория в РФ, а ближайший регион eu-central-1, это 45-60 мс до Франкфурта против 5-15 мс внутри страны. Когда посредник в очередной раз задержал оплату и AWS прислал предупреждение о suspension, решение приняли за неделю.
Выбирали между Yandex Cloud, VK Cloud и Selectel. Взяли Yandex Cloud как основную площадку (самый зрелый managed-стек и нормальный terraform-провайдер) и Selectel под холодное хранилище бэкапов. VK Cloud щупали, их OpenStack-основа для нас оказалась минусом: больше ручной работы, хотя цены местами вкуснее.
Что переехало легко:
Kubernetes. У нас был EKS 1.29, переехали на Managed Service for Kubernetes. Stateless-сервисы вообще не заметили переезда: пересобрали пайплайны под Container Registry, поправили storage class в чартах, и все. Весь k8s-слой переехал за две недели силами двух человек.
Terraform тоже порадовал. Провайдер yandex покрывает процентов 90 того, что нам надо. Структура стейта поменялась полностью, но сами модули переписывались почти механически. Импорт существующих ресурсов местами кривой, пару раз пришлось руками править стейт через
Код: Выделить всё
terraform state rmManaged PostgreSQL после RDS оказался нормальным. Версии свежие (сейчас сидим на 16), реплики, PITR, все работает. Перенос 800 ГБ основной базы сделали через логическую репликацию с даунтаймом 4 минуты на переключение.
Что было больно:
Объектное хранилище. API-совместимость с S3 заявлена и в целом честная, presigned URL, multipart, lifecycle работают. Но дьявол в мелочах: не было S3 Select (мы на нем строили дешевую аналитику по логам, пришлось переезжать на ClickHouse), event notifications устроены иначе, чем S3 Events + Lambda, переделывали на очереди. Сама перекачка 30 ТБ через rclone заняла 9 дней, и за egress из AWS мы заплатили около 2700 долларов, это была самая дорогая строчка миграции.
Все, что было serverless. Lambda у нас исполняла десятка три функций, от ресайза картинок до cron-задач. Cloud Functions формально аналог, но лимиты по памяти и времени жестче, холодный старт заметнее, а главное, экосистема вокруг (слои, расширения, интеграции) беднее. Половину функций в итоге просто переписали в обычные деплойменты в k8s, и знаете что, жалеем только о потраченном времени, надо было сразу так.
Очереди. SQS заменили на Message Queue с SQS-совместимым API, клиентский код почти не трогали. Но FIFO-очереди вели себя иначе под нагрузкой, ловили дубли там, где SQS их не давал. Сделали идемпотентность на стороне консьюмеров, по-хорошему она и так должна была быть.
Сеть. Аналога PrivateLink нет, межсервисную связность с партнерами пришлось городить через site-to-site VPN. Балансировщики проще, чем ALB: нет weighted routing, нет нормальных правил по заголовкам, часть логики уехала в ingress-nginx. И зон доступности три против шести во Франкфурте, причем одна из трех у Яндекса исторически беднее по типам железа, планировать отказоустойчивость стало теснее.
Поддержка. На тарифе за 30+ тысяч рублей в месяц отвечают быстро, но глубина ответов плавает. Пару инцидентов с сетевой деградацией между зонами мы диагностировали сами быстрее, чем саппорт подтвердил проблему.
Экономика:
Цифры по нашему профилю нагрузки. На AWS мы платили около 12 тысяч долларов в месяц, с учетом комиссии посредника выходило порядка 1.2-1.3 млн рублей. Сейчас счет в Yandex Cloud плюс Selectel держится в районе 780-850 тысяч рублей в месяц. Экономия примерно 35%, но она нечестная в лоб: часть ее дала не смена облака, а вынужденный рефакторинг (выпилили Lambda-зоопарк, ужали S3 lifecycle-политиками, пересмотрели типы инстансов).
По компонентам: виртуалки и k8s-ноды дешевле AWS процентов на 20-30, особенно с резервированием на год (аналог committed use, скидка до 30%). Объектное хранилище сопоставимо, стандартный класс около 2 руб/ГБ в месяц, холодный у Selectel ощутимо дешевле, туда и складываем бэкапы. Egress-трафик дешевле в разы, и это для нас важная статья, отдаем много медиа. Managed-базы примерно паритет. Рублевый прайс без привязки к курсу сам по себе снял головную боль с бюджетированием.
Подводные камни, о которых не пишут:
Квоты. Дефолтные квоты на vCPU и адреса низкие, а их повышение идет через тикеты и занимает от часов до дней. Перед нагрузочным тестированием или распродажей квоты надо запрашивать заранее, мы один раз уперлись в потолок прямо во время маркетинговой акции.
Железо. Спотовых мощностей (прерываемые ВМ) может физически не быть в нужной зоне неделями. На AWS spot-рынок глубокий, тут он тонкий, CI на прерываемых нодах периодически голодает.
Документация хорошая по основным сценариям и пустая по краевым. Готовьтесь читать исходники терраформ-провайдера и спрашивать в комьюнити-чатах, там реально отвечают сотрудники.
Выводы:
Если ваш стек это k8s, Postgres, Redis, Kafka и объектное хранилище, переезд скучный и предсказуемый, закладывайте 2-3 месяца. Если вы глубоко вросли в проприетарные сервисы AWS (Lambda, DynamoDB, Kinesis, Step Functions), считайте миграцию как частичное переписывание системы и умножайте оценку на два. Экономика сходится в плюс, но главный выигрыш не деньги, а снятие риска внезапной потери аккаунта и нормальная латентность для российских пользователей. Жалеем ли? Нет. Хотели бы Aurora и глубину spot-рынка обратно? Да.