Terraform: инфраструктура на уровне кода | страница 49



Похоже, с планом все в порядке, поэтому введите yes, и вы увидите, как развертывается новый сервер EC2 (рис. 2.8).

Если щелкнуть на новом сервере, внизу страницы, на панели с описанием, можно увидеть его публичный IP-адрес. Дайте ему минуту или две, чтобы он загрузился, и затем сделайте HTTP-запрос по этому адресу на порте 8080, используя браузер или утилиту вроде curl:

$ curl http://:8080

Hello, World

Ура! Теперь у вас есть рабочий веб-сервер, запущенный в AWS!

Рис. 2.8. Вместо старого сервера EC2 мы получаем новый, с кодом веб-сервера


Сетевая безопасность

Чтобы не усложнять примеры в этой книге, развертывание происходит не только в VPC по умолчанию (как упоминалось ранее), но и в стандартные подсети этого VPC. VPC состоит из одной или нескольких подсетей, каждая из которых имеет собственные IP-адреса. Все подсети в VPC по умолчанию являются публичными — их IP-адреса доступны из Интернета. Благодаря этому вы можете проверить работу своего сервера EC2 на домашнем компьютере.

Размещение сервера в публичной подсети подходит для быстрого эксперимента, но в реальных условиях это потенциальный риск безопасности. Хакеры со всего мира постоянно сканируют IP-адреса случайным образом в надежде найти какие-нибудь уязвимости. Если ваши серверы доступны снаружи, достаточно лишь оставить незащищенным один порт или воспользоваться устаревшим кодом с известной уязвимостью — и кто-то сможет проникнуть внутрь.

Таким образом, в промышленных системах все серверы и уж точно все хранилища данных следует развертывать в закрытых подсетях, IP-адреса которых доступны только внутри VPC, но не из публичного Интернета. Все, что должно находиться в публичных подсетях, — это небольшое количество обратных прокси и балансировщиков нагрузки, в которых закрыто все, что только можно (позже в этой главе вы увидите пример того, как развернуть балансировщик нагрузки).


Развертывание конфигурируемого веб-сервера

Вы, наверное, заметили, что код веб-сервера дублирует порт 8080 в группе безопасности и конфигурации пользовательских данных. Это противоречит принципу «не повторяйся» (don’t repeat yourself, или DRY): каждый элемент информации в системе должен иметь единое, однозначное и достоверное представление31. Если номер порта указан в двух местах, легко оказаться в ситуации, когда одно из значений обновлено, а другое — нет.

Чтобы можно было сделать ваш код более конфигурируемым и отвечающим принципу DRY, Terraform позволяет определять