Лучшие DevOps практики и кейсы

Инфраструктуры для WEB проектов на AWS

Разберем конкретный проект в подробностях и стоимостью содержания инфраструктуры. И так, мы имеем внутреннее WEB приложение которое состоит из статического веб сайта на React, бэкенда на Go и базы данных DynamoDB. Весь код храниться на Github, а для CI/CD используем Github Actions. Инфраструктурный код описан в Terraform.

Инфраструктура


Весь трафик от клиентов принимает CloudFront, который выступает в роли CDN. Благодаря нему мы можем повысить скорость догрузки страниц и уменьшить нагрузку на бекенд и фронтэнд, благодаря кэшированию запросов.

Далее в зависимости от префикса запроса (все, кроме /api/* идет на фронтенд часть) запросы идут на S3 или ALB.
S3 имеет функционал для обслуживания статических веб сайтов, поэтому он полностью подходил для этой задачи, также есть возможность реализовать разного рода роутинги в зависимости от запросов

На ALB мы проводим авторизацию клиентов с помощью AWS Cognito, который имеет обширный функционал для работы с разными типами авторизации/регистрации.

Важная заметка: при использовании связки ALB+CloudFront не забывайте закрывать ваши балансеры (чтобы трафик мог идти исключительно через CloudFront), так как это поможет вам избежать проблем с прямыми атаками на балансер (DDoS). А для большей защиты используйте сервисы WAF и Shield.

А позже передаем запрос на исполнение в AWS ECS (Fargate) кластер. Благодаря этому мы получаем автоскейлинг фактически из коробки, возможность настраивать доступ к другим ресурсам (IAM), логи и метрики (отправляются в CloudWatch) и многое другое.

AWS Docker registry хранит docker образы, которые позже будут использоваться в ECS. Благодаря полиси по тэгированию образов, а также их ротации мы добились эффективной и простой работы во время деплоев и траблшутинг сессиями.

Важно: Хоть Docker Registry довольно безопасный сервис, не стоит в своих docker образах вшивать секретные значения (пароли, конфигурации, ssh ключи и прочее). Очень скоро вы сможете прочитать о 5 советах по работе с докер образами.

С помощью CloudWatch мы реализовали логгинг, мониторинг и алертинг. На дашборд мы вывели основные сервисные и кастомные метрики из приложения (достаем из логов). При возникновении проблем мы получаем уведомление в Slack канал.

Цена вопроса

Вероятнее всего, Вас интересует сколько это стоит в работе, привожу расчеты за текущий месяц (всего приложение работает более 1.5 лет):

Важно: в стоимость включены только основные сервисы, которые изображены на диаграмме.

Возьмем информацию с балансировщика о количестве запросов, и увидим что в этом месяце на prod енвайромент пришло примерно 10к запросов, а на dev - 5k. 


Возьмем за основу нагрузку прод енвайромента в 10k запросов на ALB в месяц
ECS < $20
2 задачи в среднем: 1 ночью, 2 в часы пик
     0.25 vCPU ~ $15
     512 MB Memory ~ $4
ALB < $20
DynamoDB < $10
Cloudfront < $2
Cloudwatch < $1
Cognito
5k пользователей через соцсети = $5.5
5k пользователей через SAML или OIDC = $15
Кейсы