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], наши специалисты всегда готовы помочь.