Thank you for reading this post, don't forget to subscribe!
Не имеет значения, сколько у вас серверов и каких - без сети они всё равно бесполезны. В этом занятии мы научимся создавать виртуальные частные облака и разворачивать сетевую инфраструктуру для многослойного проекта.

Для начала перейдём в AWS VPC - Virtual Private Cloud

Выберем вкладку Your VPCs и начнём создание нового:

В настройках подсети, в первую очередь, выберем название и блок айпи адресов. Здесь я использовал диапазон 10.42.0.0/16, для упрощения задачи предлагаю вам использовать его же. Для этого упражнения IPv6 нам не понадобятся, не включаем. В тэги не забудьте добавить название проекта - я использую AppDemo, а вы можете выбрать своё.

Готово

Для удобства работы с ресурсами выберите новую сеть в окне Filter by VPC слева сверху.

Сеть есть, будем продолжать! Перейдём в подсети (subnets) и создадим новые:

Для начала, привяжем их к нашей новой VPC

Затем зададим следующие параметры: название (вида ПРОЕКТ AZ1 Public), зону доступности (а), тэги и блок айпи адресов. Для упрощения демонстрации я использовал диапазон /24, если вы точно понимаете, что делаете, то можете взять более подходящий к реальной ситуации диапазон на ваше усмотрение (например /20). Таким образом, для первой подсети я использую адреса 10.42.0.0/24.

Сразу же создам и вторую подсеть для этой зоны, на этот раз уже приватную. Она будет выглядеть точно так же, кроме имени (Private) и диапазона -10.42.1.0/24


так же создадим ещё две подсети - они будут крайне похожи на первые две, но будут использовать вторую зону доступности региона (b) и другие диапазоны адресов: 10.42.2.0/24 и 10.42.3.0/24.
Подсети у нас есть, даже инстансы в них можно создать, но толку от этого пока немного - без доступа в интернет ничего не заработает. Для этого нам понадобится internet gateway, давайте создадим такой. Перейдём в Internet Gateways и запустим создание:

Сложной задачей это не назовёшь - по сути, мы только имя да тэги можем задать.

Теперь надо присоединить его к нашему VPC:

Выберите наш VPC и продолжим - Attach Internet Gateway

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

И, в списке действий, выберем Modify auto-assign IP settings.

Включим галку Enable auto-assign и сохраним изменения.

Так же включим эту настройку для второй публичной подсети.
Теперь настроим таблицы маршрутизации - без соответствующих маршрутов наш интернет-шлюз всё равно останется недоступен, а зачем мы его тогда создавали? Перейдём в Route Tables и создадим новую таблицу.

Эта таблица предназначена для публичных подсетей нашего облака. Так её и назовём: AppDemo Public RT. Обязательно выберите нужный VPC (не дефолтный, а новый)

Теперь подредактируем маршруты:

Добавьте новый: Он должен идти ПОСЛЕ локального и захватывать все адреса назначения (0.0.0.0/0). Точкой назначения выберите наш новый интернет-шлюз. Затем сохраните маршруты.


Сравните вашу новую таблицу маршрутов с приведённой на картинке отличаться должен только айди шлюза.

Таблица готова, но ей, увы, никто не пользуется. Добавим её подсетям, которым нужен доступ к интернет-шлюзу (то есть публичным). При назначении таблицы, она “вытеснит” дефолтную, заместив её.

Выберите в этом окне обе публичные (но не приватные) сети и сохраните изменения.

Ну что, публичные сети готовы! Давайте добавим пару серверов: перейдите в службу EC2.

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

Создайте группу для веб-серверов доступных снаружи:

Их правила предельно просты: HTTP откуда угодно. Для упрощения задачи добавим также SSH и ICMP, пригодятся. Разумеется, в реальной жизни SSH доступ должен быть ограничен, но пока оставим так.

Затем добавим группу для серверов бэкенда, расположенных в приватной подсети.

Здесь оформим правила по другому - весь трафик, но только из первой группы безопасности (в текущем пример - AppDemo Web). Исходящий трафик в обоих случаях разрешим куда угодно.

Создайте kep pair, формата - pem, если его ещё нет. Используйте его при создании инстансов.

Теперь можно и сервера добавить, всё готово.

Выберем Amazon Linux 2

и T2.Micro

Поменяем настройки: во-первых, выберем правильную сеть и подсеть (AZ1 Public)

Во-вторых, добавим user data:
|
1 2 3 4 5 |
#!/bin/bash amazon-linux-extras install -y nginx1 systemctl start nginx echo "Hello from `hostname`" > /usr/share/nginx/html/index.html |

Ну и группу безопасности, конечно.

Про тэги тоже не забываем!

И key pair нужный, который создавали мы.

Пока этот инстанс создаётся, запустим следующий:
Выделив первый, нажмите на Actions - Image and templates - launch more like this

Создадим ещё один сервер со схожими настройками, но разместите его в другой публичной подсети (чтобы эти два веб-сервера были размещены в разных зонах доступности). Имя тоже придётся поменять, а вот остальное будет примерно таким же.
Откройте в браузере публичные айпи-адреса этих серверов - они оба должны вас приветствовать радостным “Hello!” - когда запустятся, конечно

Чтобы завершить эту часть работы, убедитесь, что вы можете подключиться к ним по SSH.

NAT Gateway
ничего не будет работать если сервера из приватной подсети не смогут подключится к интернету - ведь и им бывает нужно обновление скачать. Для того, чтобы помочь им это сделать, мы добавим два NAT Gateway - по одному в каждую публичную подсеть. В принципе, хватило бы и одного, но тогда при разрыве сетевого соединения между зонами доступности вторая зона (без NAT) осталась бы без интернета.
Итак, начнём: перейдём в VPC, NAT Gateways и приступим к созданию.

Назначим имя, подсеть (AZ1 Public) и запросим Elastic IP - без него NAT шлюз не заработает.

Подключение NAT шлюза займёт время

поднимем ещё один NAT шлюз в другой публичной сети
Как и в случае с обычными интернет-шлюзами, пользоваться сервера ими не смогут, пока мы не расскажем, как их найти, а значит - пришло время таблиц маршрутизации, да не одной, как в прошлый раз, а сразу двух - по одной на частную подсеть.
Создадим первую из них:

Назовём AppDemo Private AZ1 RT и привяжем к VPC

Отредактируем таблицу маршрутизации

И добавим новый маршрут: идея точно такая же, весь трафик (0.0.0.0/0), который не попадает в local, должен идти в NAT Gateway этой подсети (именно этой, не соседней)

Сохранили изменения? Тогда давайте привяжем эту таблицу к соответствующей приватной подсети

Выберите приватную сеть соответствующей зоны доступности:

Для завершения настройки нам придётся повторить эти действия, создав вторую приватную таблицу маршрутизации, добавив новый маршрут и подключив её к оставшейся подсети. Обратите внимание - и NAT-шлюз, и подсеть должны быть из второй зоны доступности.
В конце убедитесь, что ваш список ваших таблиц маршрутов выглядит примерно так же:
- Публичная RT привязана к обеим публичным подсетям
- Приватная RT AZ1 привязана к приватной подсети AZ1
- Приватная RT AZ2 привязана к приватной подсети AZ2

Теперь всё готово и можно запустить уже и бэкенд-сервера:

Важно: запустите его в нужной подсети (Private AZ1)

Задайте нужные тэги:

Секьюрити группы:

И key pair нужный, который создавали мы.

И подключите секьюрити группу бэкенда.
создайте сервер для второй приватной сети, используя те же настройки (кроме самой подсети и названия, они должны быть AZ2 Private)
Для проверки настроек, давайте выполним два действия:
Залогинившись на публичный сервер (как в прошлой части), выполните ping используя приватные адреса серверов бэкенда.

Если всё прошло благополучно и сетевое соединение есть, вторым шагом завершаем проверку и запрашиваем HTTP соединение на эти сервера посредством curl

Ответ вида “Hello from ip-10-42-…” однозначно говорит нам что всё ок