
Всем привет. Уже на следующей неделе стартуют занятия по курсу «Облачные сервисы». Предлагаем вашему вниманию краткий пересказ открытого урока «AWS EC2-сервис». Его провёл Егор Зуев, преподаватель и специалист по облачным сервисам с более чем 10-летним опытом работы. В рамках данного семинара мы рассмотрели EC2-сервис от платформы AWS, закодировали и развернули простое приложение, подняли базу данных, а также рассмотрели репликацию образов и балансировщики нагрузок.
Обзор сервиса AWS EC2
EC2 (elastic compute cloud) — это сервис, который предоставляет вычислительные мощности путем предоставления виртуальных/физических машин с заранее созданными образами операционных систем (например, Ubuntu, Debian, Windows).
Типы инстансов, доступные для выбора:

Что касается образов, то в AWS EC2 используется AMI (Amazon machine image) — он же образ заготовленной операционной системы, которую будет применять инстанс EC2. Ближайшая аналогия — виртуальный диск с уже установленной системой, например, в Virtual Box.
Важно знать, что когда мы настраиваем машину и выбираем образ, нам нужно будет настроить доступ. Так как машина будет находиться в облаке, нам и другим пользователям надо будет к ней достучаться. Для этого настраиваем Security group — набор правил (policy), который применяется к инстансу EC2 и включает в себя разрешения на входящий и исходящий трафик.
Работа с консолью
Сразу после регистрации на сервисе вы попадаете в консоль AWS EC2. Там можно выбрать EC2 и тип машины, на которой будем всё разворачивать. В нашем случае выбираем Ubuntu Server.



Важный момент: на шаге № 2 нас интересует t2micro (помечен зелёным стикером), т. к. всё остальное будет платным.
В следующих трёх шагах настройки оставляем по умолчанию, а вот шагу № 6 следует уделить особое внимание. Здесь нужно ввести название группы, например, backend-security-group, а потом сразу добавить правило, чтобы из внешнего мира можно было подключиться только по 80-му порту.

На седьмом шаге нажимаем Launch и запускаем инстанс. Но перед этим система попросит создать ключ для подключения по ssh. Когда все шаги пройдены, на инициализацию уйдёт 1-2 минуты.
Созданный инстанс назовём backend.

Подробное видео по настройкам.
Подключение
Если кто забыл о тонкостях подключения, сервис заботливо об этом подскажет:

Можно использовать для подключения отдельную программу, например, Bitvise SSH Client — очень удобный инструмент.
У машины сразу доступны публичный и приватный IP-адреса. Публичный используем для допуска к машине, который вбиваем, обращаясь к ней по ssh. В качестве username пишем ubuntu, потом импортируем созданный нами ключ. Останется лишь залогиниться на машине. Кстати, все действия будем выполнять из-под рута, для перехода в который набираем команду sudo su.

Подробности подключения.
Подключаем базу данных
В качестве базы данных было принято решение использовать PostgreSQL. Для продолжения работы создаём новый инстанс со следующими настройками:
- ставим 16 Гб в колонке Size (шаг № 4);
- Security group name называем database-security-group (шаг № 6);
- добавляем правило в конфигурации, выбирая PostgreSQL из вложенного списка (шаг № 6).
В итоге получаем в консоли два инстанса — backend и database.

Подробности подключения БД.
Создаём и разворачиваем приложение
Создаём новый проект, используя WebStorm и Node.js. Наша задача — написать простое приложение, которое будет делать всего две вещи — отвечать на пинги и считать количество запросов-обращений к определённому end point и, соответственно, выдавать его.
Разворачивать приложение будем в два этапа. Для развёртывания заходим на машину, именуемую backend, делаем апдейт, устанавливаем Node.js, делаем git clone, устанавливаем библиотеки.
Далее поднимаем базу. Обратите внимание, что Node и Postgres у нас работают на разных машинах. Момент истины — подключение к приложению через публичный адрес. Ура, всё работает!

Следующий этап — создание собственного AMI-образа, который будет для нас доступен. На базе этого AMI-образа мы сможем сделать копию нашего бэкенда и развернуть её в два клика. Для этого переходим в «Image» — «Create Image».

Создав образ, делаем необходимые настройки. Опций совсем немного: например, нужно указать минимальный размер жёсткого диска. Речь идёт о размере снапшота, то есть по сути будет сниматься снапшот с жёсткого диска, на котором у нас всё установлено. Можно сказать, что AMI — это виртуальная сущность, состоящая из настроек образа и снапшота с установленной ОС (в нашем случае, ОС с установленным Node.js, и нашим приложением).
Важный момент: на создание снапшота уйдёт около пяти минут, на протяжении которых машина будет в статусе hold (чем «жирнее» ваш образ, тем больше по времени будет hold).
Назовём образ, к примеру, backend-ami. Имя представлено здесь:

После создания образа мы можем сделать его репликацию и получить такую же копию машины буквально в несколько кликов. И подсоединиться к машинам не по отдельности, а через балансировщики нагрузок. Предлагается несколько балансировщиков на выбор, которые различаются алгоритмами балансировки. Настройка выбранного балансировщика сложностей не вызовет, хотя есть нюансы, о которых важно помнить.

Прайс-модели
AWS EC2 предлагает 4 прайс-модели. В скриншоте ниже представлены описания трёх из них: Reserved, Spot Market и On-Demand. Кстати, на открытом уроке мы использовали модель On-Demand.

Подробнее о моделях.
Кроме возможности выбора моделей, AWS EC2-сервис хорош ещё и тем, что он интегрирован (как и многие другие продукты AWS) с системой мониторинга от AWS – Cloudwatch. Данная система мониторинга гибко настраивается и позволяет следить как за расходом ресурсов, так и бюджета. Буквально в несколько кликов можно настроить лимит на использование EC2 ресурсов, при превышении которого вы получите соответствующее уведомление, например, по почте.
Остаётся добавить, что открытый урок получился весьма содержательным. И если эта тема вам интересна, лучше посмотрите вебинар полностью, чтобы ничего не пропустить.