Потратил два часа делая всё правильно. Я ошибался.

Потратил два часа делая всё правильно.
Terraform. CodeBuild. IAM роли. VPC endpoints.
Я ошибался.


У нас есть AWS China аккаунт. Приложение для китайских пользователей.

Два ECS сервиса. 0.25 CPU. Минимум памяти. Приложение + MongoDB.
Вокруг: ALB, Service Discovery, ECR, VPC, EFS, пара VPC endpoints.
Итого ~1800 юаней в месяц. Всё работает.

Образ собирается на CircleCI, пушится в AWS CN ECR.


Потом пуш стал падать по таймауту - 10 минут.

Образ - всего 120 МБ. Проблема не в размере.
Проблема в том, что AWS China за Великим китайским файрволом.
Скорость внешнего канала непредсказуема. CircleCI в США толкает образ в cn-northwest-1 - лотерея по времени.


Думаю: переехать на CodeBuild. Логика железная.

CircleCI заливает только исходники - 5 МБ. Триггерит CodeBuild внутри CN.
CodeBuild сам собирает образ и пушит в ECR. Внешний канал - только для кода, не для 120 МБ образа.


Понедельник, 16:00. Два часа до конца рабочего дня.

Начал делать. Увлёкся.

Дополнительный модуль Terraform. Параметры в Terragrunt. IAM роли - там всегда отдельная история: разделение прав в AWS замороченное, не зря его везде упоминают отдельно.

Когда закончил и открыл схему - было приятно смотреть. Чисто. Логично. Внешний канал только для исходников. Образ никогда не пересекает файрвол.

Пришло время деплоить. Я всегда в этот момент делаю паузу - отвлечься, ещё раз просмотреть, иногда проговорить вслух. Помогает поймать то, что не замечаешь в процессе.

Поймал.

ECR VPC endpoints. Их два.

Я уже думал об этом когда впервые запускал ECS. Казалось странным: ECS без ECR не работает - почему я должен платить за два дополнительных эндпойнта? Ладно, тогда принял как данность.

Но сейчас я их добавил зачем?


Потом посчитал.

Каждый VPC endpoint - $0.01 в час за зону. Две зоны - $14 в месяц с эндпойнта. Два эндпойнта - $29 в месяц суммарно.
Образ собирается раз в полгода.

$348 в год. За два билда.

Убрал оба - работает и без них.


Ладно. Но потом думаю дальше.

Я потратил 2 инженерных часа. Это не бесплатно.
CircleCI раннер с увеличенным таймаутом - сколько он стоит за запуск раз в полгода?

Посчитал: копейки.

Итог: просто увеличил таймаут до 20 минут. Закрыл тикет.


Это не история про лень.

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

Новый сервис. Новые права. Новые endpoints. Новые деньги. Каждый шаг логичен. Сумма - нет.


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

Именно это я проверяю на аудитах - не отдельные сервисы, а сумму решений.

→ itaudit.yushkov.org