AWS предлагает широкий спектр сервисов для различных задач. Как не потеряться во всем разнообразии, и что нужно для работы обычного веб приложение разберемся дальше.

ТЗ для разработки приложения:

Возможность входа через google и facebook
Поддержка загрузки и воспроизведения медиа
В реальном времени получать события с сервера

Дальше рассмотрим сервисы, которые я буду использовать для проекта

Архитектура веб приложения

WEB сервис

Для реализации логики приложения мы использовали вeб сервис, который размещен в docker контейнере. В AWS существует несколько сервисов для работы с контейнерами, рассмотрим Fargate и Elastic Beanstalk.

Fargate

Современный PaaS на основе ECS (EKS-Elastic Kubernetes Service) или EKS (EKS-Elastic Kubernetes Service) — альтернатива kubernetes. Конфигурируется с использованием task — задачи с указанием необходимых ресурсов для контейнера.

Elastic Beanstalk

Появилась раньше Fargate. C помощью этого средства можно запускать приложение на виртуальных машинах EC2. Так же можно запускать и докер контейнер. Минусы: конфигурация достаточно сложная, а так же длительное время создание машин. Плюсы: Elastic Beanstalk намного дешевле для средних нагрузок.

EC2 Базовая утилизация процессора Цена за час Fargate Цена за час Отношение цен
t2.micro 10% $0.0134 1vCPU,1GB $0.05167 3.85
t2.medium 20% $0.0536 2vCPU,4GB $0.11356 2.12
t2.xlarge 22.5% $0.2144 4vCPU,16GB $0.268 1.25

В Elastic Beanstalk — очень просо отслеживать сетевой трафик в отличии от fargate.

Application Load Balancer

Elastic Beanstalk и Fargate позволяют выполнять горизонтальное масштабирование. Для обоих систем конфигурация балансировщика производится автоматически. Для настройки маштабирования в Elastic Beanstalk используется раздел Auto Scaling Group, для Fargate в разделе Task Definition.

Application Load Balancer может обрабатывать как HTTP так и HTTPS, но мы используем CloudFront, поэтому нам https не нужен и на инстансы от ALB идет только HTTP.
Для сохранения состояния есть три сервиса

DynamoDB

База данных NoSQL. Имеет высокую скорость работы. Имеет поддержку условны обновлений, благодаря чему можно реализовать оптимистическую транзакционность.

S3

Хранилище для файлов. Имеет огромный размер. Можно получить прямой интернет доступ, благодаря чему пользователи смогут скачивать и загружать контент минуя ресурсы сервера приложения.

Parameters Store

Хранилище для настроек. Есть возможность шифровать хранимые ключи.

Фронтенд

В облаке практически каждый сервис опубликован в интернете, имея доступ можно обращаться к сервису напрямую. В данном примере пользователи заливают данные в S3 напрямую.

В других случаях, клиент работает с бэкендом через сервисы:

Route 53

Это dns от компании AWS.

CloudFront

Это SDN от Amazon. CloudFront на основании заданных правил перенаправляет запросы к контенту к S3 и API-вызова на сервер. Редирект http на https так же настраивается здесь.

AppSync

Используется для быстрой разработки мобильных приложения serverless бэкендом и no-code бэкендом. В данном случае мы его не будем использовать, но хотелось упомянуть о такой возможности. Также он позволяет публиковать и подписываться на сообщения.

Cognito

Выполняет функцию авторизации и регистрации пользователей. Дает возможность создавать User Pool и привязать к аккаунтам Facebook, Amazon, Google.

DevOPS сервисы

Базовые операции для разработки и доставки кода, будут использовать такие сервисы:

девопс сервисы

IAM-Identity и Access Management используются для управления доступом.

CloudFormation используется для автоматизации деплоя из шаблонов и из програмного кода  через SDK. Стек — единица управления ресурсом.

Обработка кода включает в такие сервисы:

  • CodeCommit  — git репозиторий, можно использовать github.
  • CodeBuild  — используется для сборки и публикации артифактов. ECR-Elastic Container Repository — хранит образы для докера.
  • CodeDeploy — доставка, тут мы используем Fargate или Elastic Beanstalk.
  • CodePipeline — оркестрация для конвейера.
  • CloudWatch — хранит все логи, а также настаиваются алерты и мониторинг.

ИТОГО

Что бы запустить web приложение, мы задействовали 9 сервисов от AWS, для разработки и доставки кода еще 8 сервисов.

AWS достаточно недорогое облако, имеет много примеров и полезной документации, но с логикой работы сервиса, все же придётся поразбираться.

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

Хотите перейти в облако не не знаете с чего начать, обращайтесь [email protected], наши специалисты всегда готовы помочь.