Запустить сервер приложения EC2

AWSBeginner
Практиковаться сейчас

Введение

Вашей команде нужен сервер для небольшого приложения отчётов. В этой лабораторной работе вы запустите инстанс Amazon EC2, подключитесь по SSH, измените приветствие приложения и проверите его ответ через AWS View. Затем завершите инстанс и подтвердите окончательное состояние.

Вы должны знать базовые команды терминала и назначение VPC, подсети и группы безопасности. Среда предоставляет сеть, образ Ubuntu, пару ключей SSH и приложение. Инстанс приложения вы создадите и настроите самостоятельно.

Связь с сертификацией

Эта работа отрабатывает программные операции AWS и выбор EC2 как вычислительного сервиса, связанные с задачами 3.1 и 3.3 целей домена 3 AWS Certified Cloud Practitioner CLF-C02. Вы также научитесь различать образ, тип инстанса и работающий инстанс.

Запустить инстанс приложения

На этом шаге вы проверите подготовленный образ и запустите один инстанс EC2 в предоставленной сети.

Инстанс EC2 — виртуальный сервер. Amazon Machine Image (AMI) предоставляет его операционную систему и начальное программное обеспечение. Тип инстанса определяет сочетание вычислительной мощности и памяти. Для этого вводного приложения вы выберете t3.micro, небольшой тип общего назначения.

Начните в каталоге проекта:

cd /home/labex/project

Файл launch.env содержит идентификаторы подготовленных образа, подсети и группы безопасности. Просмотрите его, чтобы узнать используемые ресурсы:

cat launch.env

Это ID ресурсов, которые различаются между средами. Загрузите их в текущую оболочку с помощью source, который читает присваивания переменных из файла:

source launch.env

Проверьте AMI. Параметр --image-ids выбирает образ, а --query ограничивает отображаемые поля:

aws ec2 \
  describe-images \
  --image-ids "$AMI_ID" \
  --query 'Images[].{Image:ImageId,Name:Name,Architecture:Architecture}'

Найдите имя образа report-server-ubuntu-2204 и архитектуру x86_64. Образ содержит Ubuntu и приложение отчётов, поэтому вы сможете сосредоточиться на запуске и эксплуатации сервера.

Подсеть определяет сетевое расположение инстанса. Предоставленная группа безопасности разрешает SSH на порту 22 и запросы приложения на порту 8081 из сети доступа лабораторной работы. Пара ключей report-key предоставляет открытый ключ, установленный на инстансе; закрытый ключ находится в каталоге проекта для подключения по SSH.

Запустите один инстанс с подготовленными ресурсами. --count 1 создаёт один сервер, а тег присваивает ему узнаваемое имя report-server:

aws ec2 \
  run-instances \
  --image-id "$AMI_ID" \
  --instance-type t3.micro \
  --subnet-id "$SUBNET_ID" \
  --security-group-ids "$SECURITY_GROUP_ID" \
  --key-name report-key \
  --count 1 \
  --tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=report-server}]'

Ответ содержит ID нового инстанса и его начальное состояние. Сохраните ID в переменной оболочки для следующих команд. Синтаксис $(...) выполняет команду внутри скобок и сохраняет её вывод; --output text возвращает ID в виде обычного текста:

INSTANCE_ID=$(aws ec2 \
  describe-instances \
  --filters Name=tag:Name,Values=report-server \
  --query 'Reservations[0].Instances[0].InstanceId' \
  --output text)

Проверьте состояние и адреса инстанса:

aws ec2 \
  describe-instances \
  --instance-ids "$INSTANCE_ID" \
  --query 'Reservations[].Instances[].{Instance:InstanceId,State:State.Name,PrivateIPv4:PrivateIpAddress,PublicIPv4:PublicIpAddress}'

Подтвердите состояние running и наличие частного и публичного IPv4-адресов. Если состояние ещё pending, немного подождите и повторите команду. Частный адрес идентифицирует сервер внутри VPC; публичный адрес используется для подключения через сеть доступа лабораторной работы.

Подключиться и настроить приложение

На этом шаге вы подключитесь к инстансу по SSH, измените приветствие приложения отчётов и проверите ответ в AWS View.

Получите публичный IPv4-адрес инстанса и сохраните его в другой переменной оболочки:

PUBLIC_IP=$(aws ec2 \
  describe-instances \
  --instance-ids "$INSTANCE_ID" \
  --query 'Reservations[0].Instances[0].PublicIpAddress' \
  --output text)

SSH создаёт зашифрованное терминальное подключение к серверу. Образы Ubuntu используют имя входа ubuntu. Предоставленный ssh_config выбирает закрытый ключ и маршрут подключения лабораторной работы; -F указывает SSH прочитать этот файл конфигурации:

ssh -F ssh_config ubuntu@"$PUBLIC_IP"

Теперь ваш терминал находится внутри инстанса приложения. Подтвердите пользователя:

whoami

Вывод должен быть ubuntu. Это отличает инстанс приложения от терминала LabEx, где пользователь — labex.

Предоставленное приложение читает приветствие из /etc/report-app/config.json. Для изменения этого системного файла нужны права администратора. sudo tee записывает следующий текст в файл, а here-document между маркерами JSON предоставляет этот текст:

sudo tee /etc/report-app/config.json <<'JSON'
{
  "message": "Hello from EC2"
}
JSON

Приложение перечитывает конфигурацию при каждом запросе. Используйте curl, чтобы обратиться к его endpoint проверки состояния через loopback-адрес инстанса:

curl -sS http://127.0.0.1:8081/health

Ответ JSON должен указывать сервис Report server и содержать "message": "Hello from EC2". Это доказывает, что приложение отвечает внутри инстанса с вашей конфигурацией.

Выйдите из сеанса SSH, чтобы вернуться в терминал LabEx:

exit

Откройте AWS View и нажмите Refresh resources. Найдите report-server в таблице инстансов. Подтвердите состояние running и сравните публичный IPv4-адрес с адресом из CLI.

В Application requests выберите работающий инстанс и нажмите Check application. Подтвердите ответ HTTP 200 с Hello from EC2. Запрос направляется на текущий публичный адрес инстанса и проверяет приложение через сеть в дополнение к проверке внутри сервера.

AWS View показывает работающий report-server и ответ настроенного приложения

Пример контрольной точки: приложение возвращает HTTP 200 с Hello from EC2. Ваши ID ресурсов и адреса будут отличаться.

Завершить свой сервер

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

Завершение окончательно удаляет инстанс. Используйте сохранённый ID, чтобы выбрать только свой сервер приложения:

aws ec2 \
  terminate-instances \
  --instance-ids "$INSTANCE_ID"

Ответ показывает предыдущее и текущее состояния. AWS CLI также предоставляет waiter, который опрашивает ресурс до достижения указанного состояния. Дождитесь окончания завершения:

aws ec2 \
  wait instance-terminated \
  --instance-ids "$INSTANCE_ID"

Waiter заканчивает работу без вывода, когда условие выполнено. Проверьте окончательное состояние:

aws ec2 \
  describe-instances \
  --instance-ids "$INSTANCE_ID" \
  --query 'Reservations[].Instances[].{Instance:InstanceId,State:State.Name}'

Подтвердите terminated. Запись инстанса может оставаться видимой после завершения; это не означает, что сервер продолжает работать.

Нажмите Refresh resources в AWS View. Инстанс должен показывать terminated и больше не быть доступной работающей целью приложения. Оставьте подготовленные сеть и пару ключей.

Итоги

Вы запустили инстанс EC2 с помощью AMI, типа инстанса, сетевых ресурсов и пары ключей SSH. Подключились к серверу, настроили приложение отчётов и проверили его ответ через AWS View. Наконец, завершили инстанс и подтвердили окончательное состояние.