13,7K подписчиков

Доступная и масштабируемая 3-уровневая архитектура AWS

Источник: Nuances of Programming Сегодня мы подробно расскажем, как построить трехуровневую структуру AWS. AWS, как и торт, с добавлением уровней становится только интереснее.

Источник: Nuances of Programming

Сегодня мы подробно расскажем, как построить трехуровневую структуру AWS. AWS, как и торт, с добавлением уровней становится только интереснее. Испечем AWS-торт с тремя уровнями: веба, приложения и базы данных. Это модульная архитектура: каждый уровень масштабируется независимо, прямое взаимодействие клиентов с БД предотвращается группами безопасности. Постепенно разберем значение и вклад каждого уровня, но прежде рассмотрим архитектуру.

Источник: Nuances of Programming Сегодня мы подробно расскажем, как построить трехуровневую структуру AWS. AWS, как и торт, с добавлением уровней становится только интереснее.-2

Ключевые термины

VPC  —  конфигурируемый по запросу пул общих ресурсов, выделяемых в общедоступной облачной среде.

Подсеть  —  диапазон IP-адресов для подключения ресурсов, например экземпляров EC2.

Интернет-шлюз  —  компонент VPC для взаимодействия VPC с интернетом.

Шлюз NAT  —  служба AWS для подключения экземпляров закрытой подсети к службам вне VPC, но без возможности внешним службам инициировать подключение.

Список ингредиентов

  • Учетная запись AWS;
  • интерфейс командной строки.

Порядок приготовления

Убедиться в наличии доступа из интернета к веб-странице веб-уровня.

Выполнив команду ping из экземпляра EC2 в веб-уровне, убедиться в том, что уровень приложения пингуется из веб-уровня.

Дополнительные требования

Веб-уровень:

  • две публичные подсети;
  • минимум два экземпляра EC2 с выбранной ОС бесплатного уровня в группе автомасштабирования;
  • группой безопасности веб-сервера EC2 разрешаются права входящих подключений из интернета;
  • выполнить начальную загрузку статической веб-страницы или создать пользовательский AMI, в котором эта страница уже имеется;
  • создать публичную маршрутную таблицу и связать две публичные подсети.

Уровень приложения:

  • две закрытые подсети;
  • минимум два экземпляра EC2 с выбранной ОС бесплатного уровня в группе автомасштабирования;
  • группой безопасности сервера приложений EC2 разрешаются права входящих подключений из группы безопасности веб-сервера;
  • связать с закрытой маршрутной таблицей.
    Это не настоящий уровень приложения: отсутствует код для запуска в экземплярах EC2.

Уровень базы данных:

  • использовать бесплатную БД MySQL RDS служб реляционных баз данных;
  • группой безопасности БД разрешается входящий трафик для MySQL из группы безопасности сервера приложений.

Рецепт

Этап 1. Создание VPC

Подготовим основу для торта  —  виртуальное частное облако VPC. В Services («Службы») VPC нажимаем Create VPC («Создать VPC»):

Источник: Nuances of Programming Сегодня мы подробно расскажем, как построить трехуровневую структуру AWS. AWS, как и торт, с добавлением уровней становится только интереснее.-3

В VPC settings («Настройки VPC») выбираем VPC only («Только VPC»), добавляем тег, выбираем IPv4 CIDR manual input («Ручной ввод IPv4 CIDR»), вводим IPv4 CIDR, оставляем в Tenancy («Аренда») Default («По умолчанию») и нажимаем Save («Сохранить»):

Источник: Nuances of Programming Сегодня мы подробно расскажем, как построить трехуровневую структуру AWS. AWS, как и торт, с добавлением уровней становится только интереснее.-4

В выпадающем меню Actions («Действия») домашней страницы VPC выбираем Edit VPC settings («Редактировать настройки VPC»). Отмечаем галочкой Enable DNS hostnames («Включить имена хостов DNS»), нажимаем Save («Сохранить»).

Атрибутом DNS hostnames определяется, получаются ли экземплярами, запущенными в VPC, общедоступные имена хостов DNS, которые соответствуют их общедоступным IP-адресам.

Источник: Nuances of Programming Сегодня мы подробно расскажем, как построить трехуровневую структуру AWS. AWS, как и торт, с добавлением уровней становится только интереснее.-5

Этап 2. Создание подсетей

Чтобы соответствовать требованиям, нужны две публичные подсети для веб-уровня и по две закрытые подсети для уровня приложения и уровня БД.

В выпадающем меню виртуального частного облака выбираем Subnets («Подсети»), на странице подсети нажимаем Create a subnet («Создать подсеть»), выбираем созданный нами VPC:

Источник: Nuances of Programming Сегодня мы подробно расскажем, как построить трехуровневую структуру AWS. AWS, как и торт, с добавлением уровней становится только интереснее.-6

Выбрав VPC ID («Идентификатор VPC»), вводим настройки подсети:

Источник: Nuances of Programming Сегодня мы подробно расскажем, как построить трехуровневую структуру AWS. AWS, как и торт, с добавлением уровней становится только интереснее.-7

Повторяем этот этап пять раз и по необходимости редактируем настройки для подсетей приложения и БД.

Источник: Nuances of Programming Сегодня мы подробно расскажем, как построить трехуровневую структуру AWS. AWS, как и торт, с добавлением уровней становится только интереснее.-8

Чтобы для каждой подсети включить автоприсвоение общедоступных IPv4-адресов, в подсети выбираем Actions («Действия») > Edit subnet settings («Редактировать настройки подсети») > Enable auto-assign public IPv4 address («Включить автоприсвоение общедоступного IPv4-адреса») > Save («Сохранить»):

Источник: Nuances of Programming Сегодня мы подробно расскажем, как построить трехуровневую структуру AWS. AWS, как и торт, с добавлением уровней становится только интереснее.-9
Не забываем сохранить
Не забываем сохранить

Создав подсети, переходим к третьему этапу.

Этап 3. Интернет-шлюз

Чтобы создать интернет-шлюз, в выпадающем меню виртуального частного облака слева выбираем Internet Gateways («Интернет-шлюзы»), в дашборде интернет-шлюзов нажимаем Create internet gateway («Создать интернет-шлюз»):

Источник: Nuances of Programming Сегодня мы подробно расскажем, как построить трехуровневую структуру AWS. AWS, как и торт, с добавлением уровней становится только интереснее.-11

Создав интернет-шлюз, в выпадающем меню Actions («Действия») выбираем Attach to VPC («Подключить к VPC»), а из выпадающего меню  —  VPC:

Источник: Nuances of Programming Сегодня мы подробно расскажем, как построить трехуровневую структуру AWS. AWS, как и торт, с добавлением уровней становится только интереснее.-12
Это важнейший этап
Это важнейший этап

Этап 4. Создание шлюза NAT

В выпадающем меню виртуального частного облака выбираем NAT gateways («Шлюзы NAT»), затем Create NAT gateway («Создать шлюз NAT»), в NAT gateway settings («Настройки шлюза NAT») называем NAT, выбираем веб-подсеть из выпадающего меню, далее Public («Публичная») и выделяем Elastic IP address («Эластичный IP-адрес»):

Источник: Nuances of Programming Сегодня мы подробно расскажем, как построить трехуровневую структуру AWS. AWS, как и торт, с добавлением уровней становится только интереснее.-14
Готов к работе
Готов к работе

Этап 5. Создание маршрутной таблицы

В выпадающем меню виртуального частного облака выбираем Route tables («Маршрутные таблицы»), справа вверху нажимаем Create route table («Создать маршрутную таблицу»), вводим имя и подключаем трехуровневый VPC:

Все обратно увязывается с VPC
Все обратно увязывается с VPC

Редактируем связи подсетей, перейдя в Subnet associations («Связи подсетей») и Edit subnet associations («Редактировать связи подсетей»):

Источник: Nuances of Programming Сегодня мы подробно расскажем, как построить трехуровневую структуру AWS. AWS, как и торт, с добавлением уровней становится только интереснее.-17

Выбираем две публичные веб-подсети из списка Available subnets («Доступные подсети»), нажимаем Save associations («Сохранить связи»):

Источник: Nuances of Programming Сегодня мы подробно расскажем, как построить трехуровневую структуру AWS. AWS, как и торт, с добавлением уровней становится только интереснее.-18

Добавим интернет-шлюз в цель трехуровневой публичной маршрутной таблицы. Выбираем Route («Маршрут») > Edit route («Редактировать маршрут») > Add route («Добавить маршрут») > 0.0.0.0/0 > Target («Цель»): интернет-шлюз > Save changes («Сохранить изменения»):

Источник: Nuances of Programming Сегодня мы подробно расскажем, как построить трехуровневую структуру AWS. AWS, как и торт, с добавлением уровней становится только интереснее.-19
Источник: Nuances of Programming Сегодня мы подробно расскажем, как построить трехуровневую структуру AWS. AWS, как и торт, с добавлением уровней становится только интереснее.-20

Чтобы связать еще четыре подсети, создадим дополнительную таблицу маршрутизации. В отличие от предыдущего этапа выбираем закрытые подсети:

Источник: Nuances of Programming Сегодня мы подробно расскажем, как построить трехуровневую структуру AWS. AWS, как и торт, с добавлением уровней становится только интереснее.-21
Источник: Nuances of Programming Сегодня мы подробно расскажем, как построить трехуровневую структуру AWS. AWS, как и торт, с добавлением уровней становится только интереснее.-22
Источник: Nuances of Programming Сегодня мы подробно расскажем, как построить трехуровневую структуру AWS. AWS, как и торт, с добавлением уровней становится только интереснее.-23

Сохранив настройки, меняем маршрут на шлюз NAT в Edit route settings («Редактировать настройки маршрута»):

Источник: Nuances of Programming Сегодня мы подробно расскажем, как построить трехуровневую структуру AWS. AWS, как и торт, с добавлением уровней становится только интереснее.-24

Переходим к веб-уровню.

Этап 6. Создание шаблона запуска

Приступаем к веб-уровню нашего торта. Это внешняя часть архитектуры: пользовательский интерфейс и взаимодействие клиентов с бизнесом.

Начнем с создания шаблона запуска, переходим в дашборд EC2 > Instances («Экземпляры») > Launch templates («Шаблоны запуска») > Create launch template («Создать шаблон запуска»):

Источник: Nuances of Programming Сегодня мы подробно расскажем, как построить трехуровневую структуру AWS. AWS, как и торт, с добавлением уровней становится только интереснее.-25
Источник: Nuances of Programming Сегодня мы подробно расскажем, как построить трехуровневую структуру AWS. AWS, как и торт, с добавлением уровней становится только интереснее.-26

Вводим имя и описание версии шаблона запуска, отмечаем галочкой Auto Scaling Guidance («Руководство по автомасштабированию»):

Источник: Nuances of Programming Сегодня мы подробно расскажем, как построить трехуровневую структуру AWS. AWS, как и торт, с добавлением уровней становится только интереснее.-27

В Application and OS Images («Приложение и образы ОС») выбираем Quick Start («Быстрый запуск») > Amazon Linux > любой AMI бесплатного уровня:

Источник: Nuances of Programming Сегодня мы подробно расскажем, как построить трехуровневую структуру AWS. AWS, как и торт, с добавлением уровней становится только интереснее.-28

Выбираем тип экземпляра t1.micro:

Источник: Nuances of Programming Сегодня мы подробно расскажем, как построить трехуровневую структуру AWS. AWS, как и торт, с добавлением уровней становится только интереснее.-29

Для входа повторно используем старую пару ключей, при ее отсутствии выбираем Create new key pair («Создать новую пару ключей») и сохраняем ее для последующего применения:

Источник: Nuances of Programming Сегодня мы подробно расскажем, как построить трехуровневую структуру AWS. AWS, как и торт, с добавлением уровней становится только интереснее.-30

В Network settings («Настройки сети») выбираем Create security group («Создать группу безопасности»), называем ее, выбираем VPC:

Источник: Nuances of Programming Сегодня мы подробно расскажем, как построить трехуровневую структуру AWS. AWS, как и торт, с добавлением уровней становится только интереснее.-31

В Inbound security group rules («Правила входящих подключений для групп безопасности») создаем два правила. Первым разрешается HTTP-трафик, вторым  —  SSH-трафик:

Источник: Nuances of Programming Сегодня мы подробно расскажем, как построить трехуровневую структуру AWS. AWS, как и торт, с добавлением уровней становится только интереснее.-32

В Advanced network configuration («Расширенная конфигурация сети») включаем Auto-assign public IP Info («Автоприсвоение общедоступных IPv4-адресов»):

Источник: Nuances of Programming Сегодня мы подробно расскажем, как построить трехуровневую структуру AWS. AWS, как и торт, с добавлением уровней становится только интереснее.-33

В Advanced Details («Дополнительные сведения») User data («Пользовательские данные») добавляем скрипт bash, им устанавливается, обновляется и запускается Apache. По завершении нажимаем Create launch template («Создать шаблон запуска»):

#!/bin/bash
sudo yum update -y
#Обновляется операционная система
sudo yum install -y httpd
sudo systemctl enable httpd
sudo systemctl start httpd
#Устанавливается, включается и запускается веб-сервер Apache
sudo echo "<html><body><h1>Is it time for cake yet?</h1></body></html>" > /var/www/html/index.html
#Меняем текст и настраиваем веб-страницу

Этап 7. Создание группы автомасштабирования

Чтобы создать для шаблона группу автомасштабирования, нажимаем View template («Просмотр шаблонов»), выбираем шаблон из списка Launch templates («Шаблоны запуска»), переходим к Launch template version details («Сведения о версии шаблона запуска»), выбираем Actions («Действия») и Create Auto Scaling group («Создать группу автомасштабирования»):

Источник: Nuances of Programming Сегодня мы подробно расскажем, как построить трехуровневую структуру AWS. AWS, как и торт, с добавлением уровней становится только интереснее.-34

Введем имя группы автомасштабирования, в Launch template («Шаблон запуска») выбираем Three_Tier_Template («Трехуровневый шаблон»), остальные параметры оставляем по умолчанию, нажимаем Next («Далее»):

Источник: Nuances of Programming Сегодня мы подробно расскажем, как построить трехуровневую структуру AWS. AWS, как и торт, с добавлением уровней становится только интереснее.-35

В Network («Сеть») выбираем из выпадающего меню трехуровневый VPC и публичные подсети, нажимаем Next («Далее»):

Источник: Nuances of Programming Сегодня мы подробно расскажем, как построить трехуровневую структуру AWS. AWS, как и торт, с добавлением уровней становится только интереснее.-36

В Load balancing («Балансировка нагрузки») выбираем Attach to a new load balancer («Подключиться к новому балансировщику нагрузки»), Application Load Balancer («Балансировщик нагрузки приложений») и Internet-facing («С выходом в интернет»):

Источник: Nuances of Programming Сегодня мы подробно расскажем, как построить трехуровневую структуру AWS. AWS, как и торт, с добавлением уровней становится только интереснее.-37

В Listeners and routing («Прослушиватели и маршрутизация») выбираем Create a target group («Создать целевую группу»), нажимаем Next («Далее»):

Источник: Nuances of Programming Сегодня мы подробно расскажем, как построить трехуровневую структуру AWS. AWS, как и торт, с добавлением уровней становится только интереснее.-38

В Group size («Размер группы») меняем Desired capacity («Желаемая емкость») и Minimum capacity («Минимальная емкость») на Two («Два»), Maximum capacity («Максимальная емкость») на Four («Четыре»), нажимаем Next («Далее»):

Источник: Nuances of Programming Сегодня мы подробно расскажем, как построить трехуровневую структуру AWS. AWS, как и торт, с добавлением уровней становится только интереснее.-39

Обойдемся без уведомлений, нажимаем Next («Далее»), и без тегов. Тщательного просмотрев все настройки, нажимаем Create Auto Scaling group («Создать группу автомасштабирования»).

Чтобы убедиться в работоспособности экземпляров, нажимаем EC2, переходим к экземпляру, копипастим IPv4-адрес в механизм поиска:

Источник: Nuances of Programming Сегодня мы подробно расскажем, как построить трехуровневую структуру AWS. AWS, как и торт, с добавлением уровней становится только интереснее.-40
Отличная работа
Отличная работа

Этап 8. Создание уровня приложения

Добрались до середины архитектуры торта, уровня приложения. Его часто называют уровнем логики, здесь обрабатываются все собранные данные.

Чтобы создать уровень приложения, в меню Launch template («Шаблон запуска») создаем другой шаблон запуска, нажимая Create launch template, и называем его. Шаблоны должны отличаться, снова отмечаем галочкой Auto Scaling Guidance («Руководство по автомасштабированию»):

Источник: Nuances of Programming Сегодня мы подробно расскажем, как построить трехуровневую структуру AWS. AWS, как и торт, с добавлением уровней становится только интереснее.-42

В Launch template («Шаблон запуска») выбираем Quick Start («Быстрый запуск») > Amazon Linux > AMI бесплатного уровня > тип экземпляра t1.micro условно-бесплатного уровня > в Key Pair Login («Вход по паре ключей») выбираем пару ключей.

В Network settings («Настройки сети») создаем группу безопасности, в Subnet («Подсеть») оставляем по умолчанию Don’t include in launch template («Не включать в шаблон запуска»), переходим в Firewall Security («Безопасность брандмауэра»), выбираем Create security group («Создать группу безопасности»), называем ее ThreeTierPrivateSecurityGroup, в Description («Описание») вводим Allow Security Group and SSH Access («Разрешить группу безопасности и SSH-доступ»), выбираем свой VPC:

Источник: Nuances of Programming Сегодня мы подробно расскажем, как построить трехуровневую структуру AWS. AWS, как и торт, с добавлением уровней становится только интереснее.-43

В Inbound security group rules («Правила входящих подключений для групп безопасности») создаем правило для разрешения SSH-трафика и меняем источник на нашу группу безопасности, выбрав ее из Source («Источник»):

Дежавю?
Дежавю?

Настроив эти элементы, нажимаем Create launch template («Создать шаблон запуска»). Создав шаблон, нажимаем View launch templates («Просмотреть шаблоны запуска») и создаем группу автомасштабирования. Как прежде, выбираем Launch template ID («Идентификатор шаблона запуска»), переходим в Actions («Действия») и создаем группу автомасштабирования:

Источник: Nuances of Programming Сегодня мы подробно расскажем, как построить трехуровневую структуру AWS. AWS, как и торт, с добавлением уровней становится только интереснее.-45

Создаем новое имя группы автомасштабирования, выбираем Three_Tier_Application_Template, нажимаем Next («Далее»):

Источник: Nuances of Programming Сегодня мы подробно расскажем, как построить трехуровневую структуру AWS. AWS, как и торт, с добавлением уровней становится только интереснее.-46

В Network («Сеть») выбираем свой VPC и зоны доступности приложения, нажимаем Next («Далее»):

Источник: Nuances of Programming Сегодня мы подробно расскажем, как построить трехуровневую структуру AWS. AWS, как и торт, с добавлением уровней становится только интереснее.-47

В Configured Advanced Options («Настраиваемые расширенные параметры») выбираем Attach to a new load balancer («Подключиться к новому балансировщику нагрузки») > Application Load Balancer («Балансировщик нагрузки приложений») > вводим Load balancer name («Имя балансировщика нагрузки») > Internet-facing («С выходом в интернет»):

Источник: Nuances of Programming Сегодня мы подробно расскажем, как построить трехуровневую структуру AWS. AWS, как и торт, с добавлением уровней становится только интереснее.-48

В Listeners and routing («Прослушиватели и маршрутизация») выбираем Create a target group («Создать целевую группу»), нажимаем Next («Далее»):

Источник: Nuances of Programming Сегодня мы подробно расскажем, как построить трехуровневую структуру AWS. AWS, как и торт, с добавлением уровней становится только интереснее.-49

В Group size («Размер группы») меняем Desired capacity («Желаемая емкость») и Minimum capacity («Минимальная емкость») на Two («Два»), Maximum capacity («Максимальная емкость») на Four («Четыре») и нажимаем Next («Далее»), пока не доберемся до просмотра:

Источник: Nuances of Programming Сегодня мы подробно расскажем, как построить трехуровневую структуру AWS. AWS, как и торт, с добавлением уровней становится только интереснее.-50

Просмотрев настройки, нажимаем Create an Auto Scaling group («Создать группу автомасштабирования») и видим их обе:

Источник: Nuances of Programming Сегодня мы подробно расскажем, как построить трехуровневую структуру AWS. AWS, как и торт, с добавлением уровней становится только интереснее.-51

Видим также, что экземпляры запущены:

Источник: Nuances of Programming Сегодня мы подробно расскажем, как построить трехуровневую структуру AWS. AWS, как и торт, с добавлением уровней становится только интереснее.-52

Настал последний этап этой гонки: создание базы данных.

Этап 9. Создание уровня базы данных

Уровень БД последний в нашем торте. Это уровень бэкенда, где хранится и контролируется обрабатываемая на уровне приложения информация.

Чтобы создать БД, переходим к RDS службе реляционных БД в Services («Службы») и нажимаем Create database («Создать базу данных»):

Источник: Nuances of Programming Сегодня мы подробно расскажем, как построить трехуровневую структуру AWS. AWS, как и торт, с добавлением уровней становится только интереснее.-53

Выбираем Standard create («Стандартное создание») > MySQL > Free tier («Бесплатный уровень»):

Источник: Nuances of Programming Сегодня мы подробно расскажем, как построить трехуровневую структуру AWS. AWS, как и торт, с добавлением уровней становится только интереснее.-54
Источник: Nuances of Programming Сегодня мы подробно расскажем, как построить трехуровневую структуру AWS. AWS, как и торт, с добавлением уровней становится только интереснее.-55
Источник: Nuances of Programming Сегодня мы подробно расскажем, как построить трехуровневую структуру AWS. AWS, как и торт, с добавлением уровней становится только интереснее.-56

В Settings («Настройки») меняем DB Instance Identifier («Идентификатор экземпляра БД»), создаем для нее пароль:

Источник: Nuances of Programming Сегодня мы подробно расскажем, как построить трехуровневую структуру AWS. AWS, как и торт, с добавлением уровней становится только интереснее.-57

В Connectivity («Возможность подключения») из выпадающего списка выбираем VPC. Ниже меняем группу безопасности VPC, нажимая Create new («Создать новую»). Вводим ее имя, остальные элементы оставляем по умолчанию и создаем БД:

Источник: Nuances of Programming Сегодня мы подробно расскажем, как построить трехуровневую структуру AWS. AWS, как и торт, с добавлением уровней становится только интереснее.-58

Создав БД, редактируем правила группы безопасности. Переходим в EC2 Instance Dashboard («Дашборд экземпляров EC2») > Network & Security («Сеть и безопасность») > Security Groups («Группы безопасности»), выбираем Three Tier Database Security Group («Трехуровневую группу безопасности базы данных»), а в выпадающем меню Actions («Действия») —  Edit inbound rules («Редактировать правила входящих подключений»):

Источник: Nuances of Programming Сегодня мы подробно расскажем, как построить трехуровневую структуру AWS. AWS, как и торт, с добавлением уровней становится только интереснее.-59

Удаляем текущее правило, добавляем новое, меняя тип на MYSQL/Aurora, сохраняя Source («Источник») как Custom («Пользовательский»), выполняя поиск группы безопасности БД, затем нажимаем Save Rules («Сохранить правила»):

Источник: Nuances of Programming Сегодня мы подробно расскажем, как построить трехуровневую структуру AWS. AWS, как и торт, с добавлением уровней становится только интереснее.-60

Построение уровней завершено  —  убедимся в их корректной работе и взаимодействии. В дашборде EC2 выбираем экземпляр в публичной подсети и копипастим общедоступный IP-адрес:

Источник: Nuances of Programming Сегодня мы подробно расскажем, как построить трехуровневую структуру AWS. AWS, как и торт, с добавлением уровней становится только интереснее.-61

Общедоступный IP-адрес рабочий. Убедимся, что уровень приложения тоже. Выбираем в выпадающем меню один из публичных экземпляров и нажимаем Connect («Подключиться»):

Источник: Nuances of Programming Сегодня мы подробно расскажем, как построить трехуровневую структуру AWS. AWS, как и торт, с добавлением уровней становится только интереснее.-62
Переходим в SSH Client («Клиент SSH»).
Переходим в SSH Client («Клиент SSH»).

Открываем командную строку и подключаемся к экземпляру по ssh. Из этого экземпляра командой ping пропингуем закрытый экземпляр:

Источник: Nuances of Programming Сегодня мы подробно расскажем, как построить трехуровневую структуру AWS. AWS, как и торт, с добавлением уровней становится только интереснее.-64

В случае успеха вернется такой ответ:

Источник: Nuances of Programming Сегодня мы подробно расскажем, как построить трехуровневую структуру AWS. AWS, как и торт, с добавлением уровней становится только интереснее.-65

А значит, уровни взаимодействуют и наш трехуровневый торт завершен.

Читайте также:

Читайте нас в TelegramVK

Перевод статьи Donald Kish: Available & Scalable AWS 3-Tier Architecture