5 помилок архітектури AWS, які допускають малі та середні компанії (і як їх уникнути)
AWS давно перестав бути прерогативою великих корпорацій. Малий та середній бізнес мігрує в хмару все активніше — от тільки багато хто наступає на одні й ті самі граблі.
В Otocolobus ми допомагаємо компаніям МСБ із Польщі та Європи будувати cloud-native рішення на AWS. Піднімали аналітичні дашборди реального часу, бекенди мобільних додатків, системи обробки даних — тож добре знаємо, що працює, а що закінчується головним болем. Нижче — п'ять архітектурних помилок, які ми зустрічаємо найчастіше, і конкретні поради, як їх уникнути.
1. Over-engineering з першого дня
Найпоширеніший гріх? Проєктувати під навантаження рівня Netflix, коли у тебе 500 користувачів.
Виглядає це зазвичай так: стартап розгортає Kubernetes-кластер із кількома мікросервісами, додає service mesh, по окремій базі даних на кожен сервіс і нагороджує все це розгалуженим CI/CD-пайплайном — і все це до того, як взагалі підтвердив, що продукт комусь потрібен. Далі приходить рахунок від AWS із чотиризначною цифрою, а першого платного клієнта ще й близько немає.
Що ми бачили наживо: До нас звернувся клієнт із трьома мікросервісами на EKS — для внутрішнього інструменту, яким користувалося 40 людей. Місячний рахунок за AWS — понад 1200 €. Ми перенесли все в один сервіс на ECS Fargate за Application Load Balancer. Рахунок впав нижче 150 €.
Що робити натомість:
- Почніть із моноліту або мінімуму сервісів. ECS Fargate — відмінний компроміс: контейнери без головного болю з управлінням серверами, а під час простою витрати падають до нуля.
- Обирайте DynamoDB в режимі on-demand замість provisioned capacity, доки не зрозумієте свої патерни навантаження.
- Поставте собі одне запитання: «Чи вирішить це одна Lambda-функція?» Якщо так — з неї й починайте.
2. Безпека? «Налаштуємо після запуску»
«Нормальні IAM-політики додамо після релізу.» Ми це чуємо постійно. Біда в тому, що це «після» якось ніколи не настає — а коли настає, то вже після інциденту.
Компанії МСБ тут особливо вразливі, бо зазвичай не мають окремого спеціаліста з безпеки. Розробник з AdministratorAccess на своєму IAM-акаунті — це міна уповільненої дії.
До чого це призводить: Витік AWS-ключів на GitHub закінчується запуском інстансів для майнінгу крипти — буквально за кілька хвилин. Рахунки злітають до десятків тисяч. Це не теоретичний сценарій — у галузі таке трапляється щотижня.
Що робити натомість:
- Увімкніть MFA для кожного IAM-акаунту з першого дня. Без жодних винятків.
- Скрізь, де можливо, використовуйте IAM-ролі замість довгоживучих ключів доступу.
- Активуйте AWS CloudTrail і налаштуйте бюджетні алерти ще до першого деплою.
- Дотримуйтесь принципу мінімальних привілеїв: починайте з нуля і додавайте лише те, що реально потрібно.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject"
],
"Resource": "arn:aws:s3:::my-app-bucket/*"
}
]
}
Така мінімальна S3-політика в рази безпечніша за s3:* — а написати її можна за пів хвилини.
3. Клацання замість коду, або життя без Infrastructure as Code
Якщо вся ваша інфраструктура — це послідовність кліків у консолі AWS, у вас серйозна проблема. Ресурси, створені вручну через консоль, не задокументовані, не відтворювані і практично не піддаються аудиту.
Ми бачимо це раз за разом: компанія підіймає все продакшн-середовище «мишкою». А потім виявляється, що треба staging. Або треба відновити систему після збою. Або в команду приходить новий розробник і запитує: «Як це все налаштовано?» Відповідь — розведені руки.
Що робити натомість:
- Впровадьте Terraform або AWS CloudFormation із самого початку. В Otocolobus ми ставимо на Terraform — за його multi-cloud гнучкість та зрілу екосистему — але CloudFormation теж працює, якщо ви тільки в AWS.
- Зберігайте код інфраструктури в Git поруч із кодом додатку.
- Використовуйте модулі, щоб не дублювати одне й те саме (принцип DRY).
resource "aws_ecs_service" "app" {
name = "my-app"
cluster = aws_ecs_cluster.main.id
task_definition = aws_ecs_task_definition.app.arn
desired_count = 2
launch_type = "FARGATE"
network_configuration {
subnets = var.private_subnets
security_groups = [aws_security_group.app.id]
}
}
Infrastructure as Code — не розкіш. Це абсолютний мінімум для будь-якого продакшн-середовища.
4. Витрати? «Розберемось, коли прийде рахунок»
Ціноутворення AWS складне — і це не випадково. Без свідомого контролю витрат дрібні неефективності нашаровуються й перетворюються на суттєві суми. Ми регулярно проводимо аудити AWS-акаунтів у наших клієнтів і щоразу бачимо одне й те саме: 30–50% бюджету йде на ресурси, які простоюють, завеликі за розміром або просто забуті.
Головні винуватці:
- EC2-інстанси, що працюють цілодобово для задач, потрібних лише в робочі години
- Непідключені EBS-томи та забуті Elastic IP (так, AWS бере гроші за невикористані EIP)
- NAT Gateway, що гоняє трафік, який спокійно міг би йти через VPC endpoint
- RDS-інстанси, підібрані під пікове навантаження, яке тримається 2 години на добу
Що робити натомість:
- Увімкніть AWS Cost Explorer і заглядайте туди щотижня — не раз на місяць і не раз на квартал.
- Налаштуйте алерти в AWS Budgets. Алерт на 500 €/місяць неодноразово рятував наших клієнтів від неприємного сюрпризу у рахунку.
- Тегуйте кожен ресурс:
project,environment,owner. Ресурси без тегів — це гроші, які тихо витікають. - Беріться за Reserved Instances чи Savings Plans тільки після оптимізації базових витрат. Річне зобов'язання на неправильно підібраний інстанс — це не економія, а фіксація втрат.
5. Запуск без спостережуваності
Не полагодиш те, чого не бачиш. Але безліч компаній МСБ запускають додатки без продуманого логування, без метрик і без алертів. Коли о другій ночі щось ламається, перший сигнал — сердитий лист від клієнта наступного ранку.
Як виглядає нормальна спостережуваність у компанії МСБ:
Зовсім не обов'язково дорого чи складно. Надійний базовий набір — це CloudWatch Logs для централізованого збору логів, CloudWatch Alarms із порогами на CPU, пам'ять і відсоток помилок, а також X-Ray для трейсингу запитів між сервісами.
Коли ми будували платформу аналітики реального часу для клієнта з логістичної галузі — на ECS та DynamoDB Streams — спостережуваність була частиною архітектури з першого начерку, а не «фічею», додаваною на фініші. DynamoDB Streams подавав дані в контейнери обробки, і кожен етап логувався, вимірювався та був під алертами. Коли о третій ночі зовнішній API без попередження змінив формат відповіді, черговий інженер дізнався про це за хвилину — а не за шість годин.
Що робити натомість:
- Із першого дня логуйте в структурованому форматі JSON. Це нічого не коштує додатково, зате CloudWatch Logs Insights починає реально працювати.
- Зберіть дашборд із 5–7 ключовими метриками вашого додатку. Якщо не вміщується на одному екрані — ви відстежуєте забагато.
- Підключіть PagerDuty, Opsgenie або хоча б найпростіший алерт SNS → email на критичні пороги.
Спільний знаменник
Усі п'ять помилок ростуть із одного кореня: ставлення до хмарної інфраструктури як до чогось, що налаштовують раз і забувають. AWS винагороджує продуману, поступову архітектуру. Починайте просто, захистіть фундамент, опишіть все кодом, тримайте руку на пульсі витрат і інструментуйте свої системи.
Якщо ви ведете бізнес на AWS і хоч одна з цих помилок здалася знайомою — ви не самі. І жодна з них не є незворотною. Найкращий час виправити архітектуру був на старті. Другий найкращий — зараз.
В Otocolobus ми допомагаємо малим і середнім компаніям будувати архітектури AWS, які від першого дня безпечні, ефективні за витратами та готові до продакшну. Хочете безкоштовний огляд своєї архітектури? Напишіть нам.