Облачные счета растут быстрее, чем бизнес, — это норма, если не управлять затратами. Типичная картина: dev-среды работают 24/7, инстансы right-sized «на всякий случай», неиспользуемые EBS-тома и снапшоты за несколько лет. Аудит инфраструктуры даёт 20–40% экономии без потери производительности. Cloud cost optimization — наша специализация: мы проводим аудит облачной инфраструктуры, right-sizing инстансов и резервирование инстансов (Reserved Instances, Savings Plans). За последние годы мы провели более 100 проектов, средняя экономия составила 32%, что для среднего бизнеса означает $2000–$5000 в месяц.
Основные драйверы перерасхода — отсутствие регулярного аудита и автоматизации. Инженеры создают ресурсы под текущую нагрузку, не удаляя временные, а dev-среды часто копируют продакшен, хотя нужны только 8 часов в день. Классы хранения не меняются, хотя данные не запрашиваются месяцами. Каждая из этих проблем даёт 5–15% перерасхода, в сумме — 30–50%. С помощью right-sizing, покупки Reserved Instances и удаления orphaned ресурсов можно быстро снизить счета.
Причины роста облачных счетов
Основная причина — отсутствие регулярного аудита и автоматизации. Инженеры создают ресурсы под текущую нагрузку, не удаляя временные. Dev-среды дублируют продакшен, хотя нужны только 8 часов в день. Классы хранения не меняются, хотя данные не запрашиваются месяцами. Каждая из этих проблем в отдельности даёт 5–15% перерасхода, а в сумме — 30–50%.
Выявление неиспользуемых ресурсов
Compute (EC2/GCE/VM)
Самая большая статья. Проблемы:
-
Oversized инстансы (c5.2xlarge для сервиса под 200 RPS)
- Dev/staging работают ночью и в выходные
- Старые инстансы на предыдущих поколениях (r4 вместо r6i)
Storage
Незаметно копится:
- EBS-тома от удалённых инстансов (orphaned volumes)
- Снапшоты старше 90 дней (часто хранятся годами)
- S3 объекты без lifecycle policy
- Неоптимальный storage class (Standard вместо Infrequent Access для архивов)
Трансфер данных
Data transfer out стоит дорого. Особенно: cross-AZ трафик (EC2 ↔ RDS в разных AZ), egress из региона.
Idle и неиспользуемые ресурсы
Load balancers без трафика, NAT Gateways, Elastic IP без привязки.
Инструменты анализа
| Инструмент |
Назначение |
Бесплатно? |
| AWS Cost Explorer |
Анализ расходов по сервисам, тегам, RI |
Да |
| AWS Trusted Advisor / GCP Recommender |
Конкретные рекомендации по right-sizing |
Да |
| Infracost |
Анализ стоимости Terraform-планов до применения |
Да (с ограничениями) |
| CloudHealth / Spot.io / Apptio Cloudability |
Enterprise-аналитика, showback/chargeback |
Нет |
Быстрые победы (неделя 1-2)
- Удалить orphaned resources: EBS-тома без attachment, Elastic IPs без привязки, старые снапшоты.
aws ec2 describe-volumes --filters Name=status,Values=available --query 'Volumes[*].[VolumeId,Size,CreateTime]' --output table
- S3 Intelligent-Tiering: включить для больших buckets — AWS автоматически перемещает объекты между storage tiers.
- Выключать dev/staging ночью: Lambda + CloudWatch Events или Instance Scheduler.
- Удалить старые снапшоты: lifecycle policy для AMI и EBS snapshots.
Чек-лист быстрых побед
- Удалить orphaned EBS-тома
- Включить S3 Intelligent-Tiering
- Настроить автоматическое выключение dev-сред
- Удалить старые снапшоты
Rightsizing инстансов
Анализ CloudWatch метрик за 2–4 недели:
- CPU < 20% в P95 → уменьшить инстанс
- Memory < 30% → уменьшить
- Network: сравнить с теоретическим лимитом инстанса
import boto3
from datetime import datetime, timedelta
cw = boto3.client('cloudwatch')
def get_cpu_p95(instance_id: str, days: int = 14) -> float:
response = cw.get_metric_statistics(
Namespace='AWS/EC2',
MetricName='CPUUtilization',
Dimensions=[{'Name': 'InstanceId', 'Value': instance_id}],
StartTime=datetime.now() - timedelta(days=days),
EndTime=datetime.now(),
Period=3600,
Statistics=['p95']
)
values = [dp['p95'] for dp in response['Datapoints']]
return max(values) if values else 0
Как right-sizing снижает счета?
Rightsizing — это приведение размера инстансов в соответствие с фактической нагрузкой. Например, если инстанс c5.2xlarge (8 vCPU, 16 GB RAM) использует CPU на 10% в пике, его можно заменить на c5.large (2 vCPU, 4 GB RAM). Экономия — 75% стоимости. Для типового проекта с 20–30 инстансами это $1500–$3000 в месяц.
Когда стоит покупать Savings Plans?
После стабилизации baseline нагрузки:
- 1-year Compute Savings Plans: 20–30% скидка, гибкость (работает для EC2, Fargate, Lambda)
- 3-year Reserved Instances: 40–60% скидка для стабильных workloads
- Spot Instances: 70–90% скидка для прерываемых задач (batch, CI workers)
Подробнее о Savings Plans можно прочитать в AWS Savings Plans документации.
Оптимизация трафика
Cross-AZ трафик: RDS и EC2 должны быть в одном AZ (для non-HA инстансов). Или используйте RDS Proxy для снижения числа соединений и их правильного размещения. S3 VPC Gateway Endpoint: трафик S3 → EC2 через VPC endpoint не тарифицируется как egress.
Объём работ
- Аудит текущей облачной инфраструктуры с детальным отчётом
- Выявление избыточных и неиспользуемых ресурсов
- Подготовка плана right-sizing и покупки RI/Savings Plans
- Настройка автоматического выключения dev-сред
- Внедрение S3 lifecycle policy и Intelligent-Tiering
- Мониторинг и регулярные отчёты для контроля затрат
- Передача знаний команде заказчика, документация
Результаты типичного аудита
| Категория |
Экономия |
| Rightsizing инстансов |
15–25% |
| Reserved/Savings Plans |
20–40% от compute |
| Dev/staging scheduling |
10–20% |
| S3 lifecycle + storage class |
5–15% |
| Orphaned resources |
3–8% |
Сроки проведения оптимизации
- Аудит и анализ текущих расходов — 2–3 дня
- Быстрые победы (orphaned, scheduling) — 2–3 дня
- Rightsizing план + реализация — 3–5 дней
- Reserved/Savings Plans покупка — 1 день (требует 1–2 недели наблюдения перед покупкой)
Закажите аудит облачных расходов — мы найдём точки роста и предложим план экономии. Свяжитесь с нами, чтобы получить консультацию и примеры реализованных проектов. Таким образом, управление облачными затратами и оптимизация EC2 — это постоянный процесс.
Мы регулярно сталкиваемся с ситуацией: «Сайт не открывается» в 3 часа ночи — и выясняется, что disk full на VPS, потому что логи nginx не ротировались полгода. Или сервер лёг под нагрузкой в день запуска рекламной кампании, потому что на shared хостинге стоял лимит в 50 одновременных соединений. Настройка хостинга и деплоя — это не про «где дешевле», это про то, что происходит в момент, когда что-то идёт не так. Наша команда помогает избежать таких инцидентов, проектируя инфраструктуру с учётом реальных паттернов нагрузки.
Когда выбирать Vercel и Netlify?
Vercel создан под Next.js — деплой в один push, preview deployments для каждого PR, автоматический CDN, Edge Functions, ISR без конфигурации. Для фронтенд-проектов и JAMstack это оптимальный выбор: нет операционной нагрузки, time-to-deploy измеряется минутами.
Ограничения реальные: Vercel Serverless Functions запускаются в us-east-1 по умолчанию (latency для Европы +80–100ms), Function timeout 300 секунд на Pro, Bandwidth 1TB/месяц на Pro. Для тяжёлого backend — нужны воркеры или отдельный сервер.
Netlify ближе к статике и Edge Functions на базе Deno Deploy. Build minutes — основное ограничение на бесплатном тарифе.
| Критерий |
Vercel |
Netlify |
| Основная специализация |
Next.js, фреймворки |
Статика, JAMstack |
| Edge Functions |
V8 isolates (Node.js) |
Deno Deploy |
| Preview Deployments |
Встроенные |
Встроенные |
| Serverless Functions |
Да, ограничение 300s |
Да, ограничение 10s |
| Бесплатный лимит bandwidth |
100 GB |
100 GB |
Почему Docker — основа предсказуемого деплоя?
«Работает на моей машине» — классика. Docker решает это через контейнеризацию окружения. Но плохой Dockerfile создаёт новые проблемы.
Типичная ошибка: копировать всё в образ без .dockerignore, получать 800MB образ вместо 80MB. node_modules внутри образа весит столько же. Правильно: multi-stage build.
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
RUN npm run build
FROM node:20-alpine AS runner
WORKDIR /app
COPY --from=builder /app/.next ./.next
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/package.json ./package.json
EXPOSE 3000
CMD ["npm", "start"]
Итоговый образ: 180MB вместо 1.2GB. Время сборки CI сокращается из-за layer caching — если package.json не изменился, слой с npm ci берётся из кэша.
Docker Compose для локальной разработки и простых продакшен-сценариев: приложение + PostgreSQL + Redis в одной конфигурации. Для production на одном сервере — вполне рабочий вариант, если нет требований горизонтального масштабирования.
Подробнее о контейнеризации — Wikipedia: Docker.
Как настроить Nginx как reverse proxy?
Nginx перед приложением — стандарт для VPS и выделенных серверов. Основные функции: SSL termination, gzip, static files, rate limiting, upstream балансировка.
Конфигурация, которую часто делают неправильно: worker_processes auto — количество процессов равно числу CPU. worker_connections 1024 — это 1024 на каждый воркер-процесс. При 4 CPU и 1024 connections = 4096 одновременных соединений. Для высоконагруженного сайта нужно worker_connections 4096 и настройка keepalive_timeout 65.
Для статических ассетов с хешем в имени файла:
location ~* \.(js|css|woff2|png|webp)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
immutable сообщает браузеру: не проверяй этот файл даже при hard refresh. Правильно работает только с content-hashed именами файлов (что делает Vite/webpack по умолчанию). Документация — Wikipedia: Nginx.
AWS: гибкость и сложность
EC2 + Auto Scaling Group — классика для горизонтального масштабирования. AMI с предустановленным приложением, Launch Template, ASG с min/desired/max instances, Application Load Balancer. При CPU > 70% на 3 минуты — scale out, при CPU < 30% на 15 минут — scale in. Health check через ALB исключает нездоровые инстансы из ротации.
ECS Fargate — контейнеры без управления EC2. Деплой Docker-образа, задаёте CPU/память (512 CPU units = 0.5 vCPU, от 512MB памяти), Fargate запускает. Дороже Lambda, но нет cold start и нет timeout-ограничений. Подходит для long-running процессов, WebSocket-серверов, тяжёлых воркеров.
RDS для PostgreSQL с Multi-AZ: автоматический failover за 1–2 минуты при падении primary. Read Replicas для масштабирования чтения. RDS Proxy для connection pooling — Lambda-функции не умеют держать долгосрочные соединения, прокси буферизует это.
Kubernetes: когда это оправдано
K8s добавляет значительную операционную сложность. Оправдан, когда: несколько команд деплоят независимые сервисы, нужна тонкая настройка ресурсов на сервис, canary deployments и blue/green без простоя — требование.
AWS EKS, GKE или managed k8s от Hetzner (дешевле). Helm charts для стандартных сервисов. Horizontal Pod Autoscaler по CPU и custom metrics (RPS через Prometheus).
Для большинства стартапов и средних проектов — Kubernetes избыточен. ECS или Fly.io дают 80% возможностей при 20% операционной сложности.
Мониторинг и alerting
Сервер без мониторинга — это ожидание инцидента. Минимальный стек: Prometheus + Grafana (или Grafana Cloud для managed), alerting на disk > 80%, memory > 85%, CPU > 90% за 5 минут, error rate > 1%. Uptime через Better Uptime или Upptime (self-hosted).
Logs: Loki + Grafana или CloudWatch Logs Insights. Структурированные JSON-логи (winston, pino) — обязательно, иначе поиск по логам превращается в боль.
Что входит в настройку хостинга
- Аудит текущей инфраструктуры и профилирование нагрузки
- Выбор целевой архитектуры (VPS, AWS, serverless, Kubernetes)
- Настройка CI/CD pipeline (GitHub Actions, GitLab CI) с автоматическим деплоем
- IaC через Terraform или Pulumi (инфраструктура как код)
- Конфигурация Nginx, SSL-сертификаты, HTTP/2, brotli
- Мониторинг и алертинг (Prometheus + Grafana, PagerDuty)
- Документация runbooks и обучение команды
Дополнительно: пишите, если нужна миграция с текущего хостинга или интеграция с внешними сервисами.
Процесс работы
- Аудит текущей инфраструктуры (2–5 дней)
- Выбор целевой архитектуры с обоснованием по нагрузке и бюджету (1–3 дня)
- Настройка CI/CD pipeline (GitHub Actions, GitLab CI) (2–5 дней)
- IaC через Terraform или Pulumi (3–10 дней)
- Настройка мониторинга и alerting (2–5 дней)
- Документация runbooks и обучение команды (1–3 дня)
Наш опыт — 7 лет на рынке, более 50 проектов, гарантия работоспособности после деплоя.
Сроки
- Базовый деплой на VPS с Docker + Nginx + CI/CD: 1–2 недели.
- Настройка AWS инфраструктуры с Auto Scaling, RDS, CDN: 3–6 недель.
- Миграция на EKS с нуля: 6–12 недель.
- Настройка Vercel/Netlify для JAMstack: 3–5 дней.
Стоимость рассчитывается индивидуально в зависимости от сложности и объёма работ. Получите консультацию — оценим вашу архитектуру за один день.