[Amazon Web Services] AWS — сколько нужно сервисов, чтобы поднять веб-приложение?
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Так получилось, что до 2020 года я не имел дело с облаками. Когда же, наконец, углубился в эту тему, то немного потерялся от обилия сервисов, предлагаемых в AWS.
Необходимо было создать приложение с такими фичами:
- Авторизацией через facebook или google.
- Возможностью загрузки и отображения медиа-файлов.
- Получением событий с сервера в реальном времени.
В этой статье описаны сервисы, которые понадобились мне для реализации проекта и ощущения от процесса.
Архитектура приложения
Веб-сервис
Бизнес-логика нашего приложения реализована в виде веб-сервиса и помещена в докер-контейнер. Для запуска контейнеров в AWS можно использовать два сервиса Fargate и Elastic Beanstalk.
Fargate
Модный PaaS поверх ECS или EKS (EKS-Elastic Kubernetes Service, ECS-Elastic Container Service — проприетарная альтернатива kubernetes). Конфигурация выполняется путем описания высокоуровневой абстракции — задачи (Task), в которой указывается необходимое количество вычислительных ресурсов для ваших контейнеров.
Elastic Beanstalk
Появился задолго до Fargate. Позволяет запустить приложение на виртуалках (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
И Fargate, и Elastic Beanstalk предусматривают возможность горизонтального масштабирования. В обоих случаях балансировщик нагрузки конфигурируется автоматически. Предполагается, что вы не меняете настройки балансировщика напрямую. В Fargate масштабирование описывается в Task Definition, Elastic Beanstalk создает Auto Scaling Group.
Application Load Balancer работает на уровне HTTP. В принципе он может обрабатывать и HTTPS, но, так как он находится за CloudFront, то нам это не требуется. От ALB на инстансы идет уже только HTTP.
Состояние
Для хранения состояния используются три сервиса.
DynamoDB
NoSql база данных. Работает очень быстро (в пределах 10–20 миллисекунд на запрос). Поддерживает условные обновления, что позволяет организовать оптимистическую транзакционность.
S3
Хранилище файлов. Практически безразмерное. Позволяет открыть прямой доступ из интернета. Таким образом пользователи могут заливать и скачивать контент без использования вычислительных ресурсов сервиса нашего приложения.
Parameters Store
Хранилище настроек сервиса. Позволяет хранить ключи в зашифрованном виде.
Фасад
Технически, в облаке каждый сервис выставлен в интернет, так что, при наличии прав, клиент может обращаться к нему напрямую. Например, в нашем приложении, клиент напрямую заливает медиа-файлы в S3.
В остальных же случаях взаимодействие клиента с бэкендом идет через описанные ниже сервисы.
Route53
DNS от AWS.
CloudFront
CDN от AWS. В настройках CloudFront задаются правила по перенаправлению запросов к медиа-контенту на S3, а api-вызовов на наш веб-сервис. Также здесь можно настроить редирект с Http на Https (понадобится отдельный публичный S3 bucket с правилом редиректа).
AppSync
AppSync — часть большой перспективной концепции — AWS Amplify. Позволяет быстро разрабатывать мобильные приложения с serverless-бэкендом или даже no-code-бэкендом. Наше приложение не такое “модное”, но мы не могли пройти мимо AppSync, так это чуть ли не единственный сервис AWS, позволяющий публиковать и подписываться на сообщения.
Cognito
Отвечает в aws за регистрацию и авторизацию пользователей. Позволяет создать User Pool c привязкой к аккаунтам в Google, Amazon, Facebook и не только.
DevOps сервисы
Сервисы для базовых девелоперских операций представлены на следующей схеме.
Управление доступом к сервисам и ресурсам осуществляется с помощью IAM-Identity and Access Management.
Для автоматизации развертывания ресурсов используется CloudFormation, как с помощью шаблонов, так и из программного кода, с помощью SDK. Единица управления ресурсами называется стеком.
Конвейер обновления версий кода создается с помощью группы сервисов:
- CodeCommit — менеджер git-репозиториев, может быть безболезненно заменен на github.
- CodeBuild — сборка и публикация артефактов. Докеровские образы сохраняются в ECR-Elastic Container Repository.
- CodeDeploy — поставка, в нашем случае в Fargate или Elastic Beanstalk.
- CodePipeline — оркестрация конвейера.
Все логи накапливаются в CloudWatch. Там же, в пару кликов мыши, можно настроить алерты и дашборды для мониторинга.
Ответ на заглавный вопрос
Итак, для того, чтобы запустить веб-приложение, понадобилось 9 сервисов AWS, а для того, чтобы настроить девелоперские операции — еще 8 сервисов.
Следует отдать должное AWS, они максимально уменьшили порог вхождения, документации и примеров — предостаточно, но все же 17 раз пришлось разбираться с логикой проприетарного сервиса!
Когда я начинал, то не думал, что мне это может понравится. Я сопротивлялся. Так, например, закодил самостоятельно механизм jwt-аутентификации, вместо того, чтобы использовать Cognito.
Но я поменял свое мнение. Все же приятно сбросить с плеч груз инфраструктурного кода и сконцентрироваться на бизнес-логике. Немного освоившись, я начал испытывать чувства ребенка в парке аттракционов. Каждый новый сервис — новое веселье. Я рад, что этот парк пока не исследован до конца. Для себя я принял решение, что я здесь надолго.
===========
Источник:
habr.com
===========
Похожие новости:
- [Обработка изображений, Машинное обучение, Искусственный интеллект, DIY или Сделай сам] RPi-няня
- [Анализ и проектирование систем, Amazon Web Services, Big Data] Как мы организовали высокоэффективное и недорогое DataLake и почему именно так
- [Amazon Web Services, DevOps] AWS CLI через MFA
- [Node.JS] NestJS. Загрузка файлов в S3 хранилище (minio)
- [Администрирование баз данных, Хранение данных, Хранилища данных] Архитектура S3: 3 года эволюции Mail.ru Cloud Storage
- [Разработка веб-сайтов, CSS, HTML] CSS Grid понятно для всех
- [Алгоритмы, Машинное обучение, Развитие стартапа, Робототехника] Роботы на карантине
- [Amazon Web Services] AWS Community Builders
- [Облачные вычисления] Опыт подготовки и сдачи экзамена — AWS Solution Architect Associate
- [Java] Сбор метрик SpringBoot-приложения в AWS CloudWatch
Теги для поиска: #_amazon_web_services, #_aws, #_s3, #_dynamodb, #_fargate, #_elastic_beanstalk, #_cloudfront, #_cognito, #_cloudformation, #_cloudwatch, #_appsync, #_amazon_web_services
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 13:01
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Так получилось, что до 2020 года я не имел дело с облаками. Когда же, наконец, углубился в эту тему, то немного потерялся от обилия сервисов, предлагаемых в AWS. Необходимо было создать приложение с такими фичами:
В этой статье описаны сервисы, которые понадобились мне для реализации проекта и ощущения от процесса. Архитектура приложения Веб-сервис Бизнес-логика нашего приложения реализована в виде веб-сервиса и помещена в докер-контейнер. Для запуска контейнеров в AWS можно использовать два сервиса Fargate и Elastic Beanstalk. Fargate Модный PaaS поверх ECS или EKS (EKS-Elastic Kubernetes Service, ECS-Elastic Container Service — проприетарная альтернатива kubernetes). Конфигурация выполняется путем описания высокоуровневой абстракции — задачи (Task), в которой указывается необходимое количество вычислительных ресурсов для ваших контейнеров. Elastic Beanstalk Появился задолго до Fargate. Позволяет запустить приложение на виртуалках (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 И Fargate, и Elastic Beanstalk предусматривают возможность горизонтального масштабирования. В обоих случаях балансировщик нагрузки конфигурируется автоматически. Предполагается, что вы не меняете настройки балансировщика напрямую. В Fargate масштабирование описывается в Task Definition, Elastic Beanstalk создает Auto Scaling Group. Application Load Balancer работает на уровне HTTP. В принципе он может обрабатывать и HTTPS, но, так как он находится за CloudFront, то нам это не требуется. От ALB на инстансы идет уже только HTTP. Состояние Для хранения состояния используются три сервиса. DynamoDB NoSql база данных. Работает очень быстро (в пределах 10–20 миллисекунд на запрос). Поддерживает условные обновления, что позволяет организовать оптимистическую транзакционность. S3 Хранилище файлов. Практически безразмерное. Позволяет открыть прямой доступ из интернета. Таким образом пользователи могут заливать и скачивать контент без использования вычислительных ресурсов сервиса нашего приложения. Parameters Store Хранилище настроек сервиса. Позволяет хранить ключи в зашифрованном виде. Фасад Технически, в облаке каждый сервис выставлен в интернет, так что, при наличии прав, клиент может обращаться к нему напрямую. Например, в нашем приложении, клиент напрямую заливает медиа-файлы в S3. В остальных же случаях взаимодействие клиента с бэкендом идет через описанные ниже сервисы. Route53 DNS от AWS. CloudFront CDN от AWS. В настройках CloudFront задаются правила по перенаправлению запросов к медиа-контенту на S3, а api-вызовов на наш веб-сервис. Также здесь можно настроить редирект с Http на Https (понадобится отдельный публичный S3 bucket с правилом редиректа). AppSync AppSync — часть большой перспективной концепции — AWS Amplify. Позволяет быстро разрабатывать мобильные приложения с serverless-бэкендом или даже no-code-бэкендом. Наше приложение не такое “модное”, но мы не могли пройти мимо AppSync, так это чуть ли не единственный сервис AWS, позволяющий публиковать и подписываться на сообщения. Cognito Отвечает в aws за регистрацию и авторизацию пользователей. Позволяет создать User Pool c привязкой к аккаунтам в Google, Amazon, Facebook и не только. DevOps сервисы Сервисы для базовых девелоперских операций представлены на следующей схеме. Управление доступом к сервисам и ресурсам осуществляется с помощью IAM-Identity and Access Management. Для автоматизации развертывания ресурсов используется CloudFormation, как с помощью шаблонов, так и из программного кода, с помощью SDK. Единица управления ресурсами называется стеком. Конвейер обновления версий кода создается с помощью группы сервисов:
Все логи накапливаются в CloudWatch. Там же, в пару кликов мыши, можно настроить алерты и дашборды для мониторинга. Ответ на заглавный вопрос Итак, для того, чтобы запустить веб-приложение, понадобилось 9 сервисов AWS, а для того, чтобы настроить девелоперские операции — еще 8 сервисов. Следует отдать должное AWS, они максимально уменьшили порог вхождения, документации и примеров — предостаточно, но все же 17 раз пришлось разбираться с логикой проприетарного сервиса! Когда я начинал, то не думал, что мне это может понравится. Я сопротивлялся. Так, например, закодил самостоятельно механизм jwt-аутентификации, вместо того, чтобы использовать Cognito. Но я поменял свое мнение. Все же приятно сбросить с плеч груз инфраструктурного кода и сконцентрироваться на бизнес-логике. Немного освоившись, я начал испытывать чувства ребенка в парке аттракционов. Каждый новый сервис — новое веселье. Я рад, что этот парк пока не исследован до конца. Для себя я принял решение, что я здесь надолго. =========== Источник: habr.com =========== Похожие новости:
|
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 13:01
Часовой пояс: UTC + 5