Введение
Приложению отчётов нужен отдельный диск для файла отчёта. Вы создадите том Amazon EBS, подключите его к экземпляру EC2, отформатируете и смонтируете файловую систему и предоставите отчёт с этого тома. Затем вы размонтируете и отключите том и удалите созданные ресурсы.
Вы уже должны знать, как запускать EC2 и работать с SSH. Каждая лабораторная начинается в новой среде со своим образом приложения, сетью и парой ключей.
Связь с сертификацией
Эта лабораторная позволяет отработать выбор блочного хранилища для рабочей нагрузки EC2 и закрепляет понятия хранения из задачи 3.6 целей домена 3 AWS Certified Cloud Practitioner CLF-C02.
Запустите сервер хранения
На этом шаге вы запустите экземпляр приложения и определите его зону доступности.
Начните в рабочем каталоге и загрузите предоставленные идентификаторы ресурсов:
cd /home/labex/project
source launch.env
Запустите один экземпляр с именем storage-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=storage-server}]'
Получите идентификатор экземпляра по тегу имени:
INSTANCE_ID=$(aws ec2 \
describe-instances \
--filters Name=tag:Name,Values=storage-server \
--query 'Reservations[0].Instances[0].InstanceId' \
--output text)
Дождитесь перехода экземпляра в состояние работы:
aws ec2 \
wait instance-running \
--instance-ids "$INSTANCE_ID"
Зона доступности — изолированное расположение внутри региона. Том EBS подключается к экземпляру в той же зоне доступности. Запросите зону экземпляра, а не пытайтесь её угадать:
AVAILABILITY_ZONE=$(aws ec2 \
describe-instances \
--instance-ids "$INSTANCE_ID" \
--query 'Reservations[0].Instances[0].Placement.AvailabilityZone' \
--output text)
Проверьте состояние и зону:
aws ec2 \
describe-instances \
--instance-ids "$INSTANCE_ID" \
--query 'Reservations[].Instances[].{Instance:InstanceId,State:State.Name,Zone:Placement.AvailabilityZone}'
Убедитесь, что состояние — running. Откройте AWS View, нажмите Refresh resources, выберите storage-server и нажмите Check application. Подтвердите HTTP 200 перед добавлением хранилища.
Создайте и подключите том данных
На этом шаге вы создадите отдельный том данных EBS и подключите его к работающему серверу.
Amazon EBS предоставляет блочное хранилище для EC2. Том — ресурс, подобный диску, а файловая система организует файлы на этом диске. Подключение тома делает его блочное устройство доступным, но не создаёт файловую систему. Руководство по томам EBS описывает подключение и сохранение томов.
Создайте небольшой пустой SSD-том общего назначения. gp3 задаёт тип тома, --size 1 запрашивает один GiB, а переменная зоны размещает его в одной зоне с экземпляром. Сохраните его идентификатор для дальнейших операций:
VOLUME_ID=$(aws ec2 \
create-volume \
--availability-zone "$AVAILABILITY_ZONE" \
--size 1 \
--volume-type gp3 \
--tag-specifications 'ResourceType=volume,Tags=[{Key=Name,Value=report-data}]' \
--query 'VolumeId' \
--output text)
Дождитесь доступности нового тома:
aws ec2 \
wait volume-available \
--volume-ids "$VOLUME_ID"
Подключите его с именем устройства API /dev/sdf:
aws ec2 \
attach-volume \
--volume-id "$VOLUME_ID" \
--instance-id "$INSTANCE_ID" \
--device /dev/sdf
Дождитесь подключения:
aws ec2 \
wait volume-in-use \
--volume-ids "$VOLUME_ID"
Проверьте том и его подключение:
aws ec2 \
describe-volumes \
--volume-ids "$VOLUME_ID" \
--query 'Volumes[].{Volume:VolumeId,State:State,Zone:AvailabilityZone,Size:Size,Type:VolumeType,Attachments:Attachments}'
Подтвердите in-use, размер 1, тип gp3 и подключение к вашему экземпляру. Обновите AWS View и проверьте строку тома. Корневой том отличается от нового тома данных.
Смонтируйте том и предоставьте отчёт
На этом шаге вы инициализируете пустой том данных и сделаете отчёт доступным для приложения.
Получите текущий публичный адрес экземпляра:
PUBLIC_IP=$(aws ec2 \
describe-instances \
--instance-ids "$INSTANCE_ID" \
--query 'Reservations[0].Instances[0].PublicIpAddress' \
--output text)
Подключитесь с помощью предоставленной конфигурации SSH:
ssh -F ssh_config ubuntu@"$PUBLIC_IP"
Внутри экземпляра проверьте недавно подключённое устройство. Его имя Linux в этой лабораторной — /dev/xvdf; имена устройств могут отличаться от имени подключения API. Другие образы EC2 могут использовать имена NVMe, поэтому определите диск перед операциями с ним. Официальное руководство по подготовке томов Linux объясняет это различие.
lsblk -f /dev/xvdf
Убедитесь, что у устройства нет типа файловой системы. Создайте файловую систему ext4 только на этом новом пустом томе данных. Форматирование тома с существующими данными удалило бы их:
sudo mkfs.ext4 /dev/xvdf
Точка монтирования — каталог, через который вы обращаетесь к файловой системе. Смонтируйте новую файловую систему в подготовленный каталог приложения отчётов:
sudo mount /dev/xvdf /srv/reports
Подтвердите исходное устройство, файловую систему и точку монтирования:
findmnt /srv/reports
Найдите /dev/xvdf, ext4 и /srv/reports. Создайте CSV-отчёт с синтетическими данными. sudo tee записывает в файловую систему, принадлежащую администратору; here-document с разделителем в кавычках сохраняет две строки:
sudo tee /srv/reports/report.csv <<'CSV'
period,total
Q1,320
CSV
Прочитайте файл снова:
cat /srv/reports/report.csv
Вернитесь в терминал LabEx:
exit
В AWS View выберите storage-server и нажмите Read volume report. Подтвердите HTTP 200 и текст CSV period,total и Q1,320. Этот ответ показывает, что приложение может прочитать файл со смонтированного тома.
Монтирование в этой лабораторной выполняется вручную. Перезагрузка не восстанавливает ручное монтирование автоматически; в рабочих системах обычно настраивают UUID файловой системы в /etc/fstab после проверки записи.
Размонтируйте, отключите и удалите
На этом шаге вы удалите том данных и экземпляр приложения в контролируемом порядке.
Сначала снова подключитесь к экземпляру приложения:
ssh -F ssh_config ubuntu@"$PUBLIC_IP"
Размонтируйте файловую систему перед отключением диска. Это прекращает доступ к файловой системе и записывает ожидающие записи на диск:
sudo umount /srv/reports
Подтвердите, что файловая система больше не смонтирована:
findmnt /srv/reports
Для несмонтированного каталога findmnt не выводит данные и возвращает ненулевой код завершения; здесь это ожидается. Вернитесь в терминал LabEx:
exit
Отключите только свой том данных:
aws ec2 \
detach-volume \
--volume-id "$VOLUME_ID" \
--instance-id "$INSTANCE_ID" \
--device /dev/sdf
Дождитесь, когда том снова станет доступным:
aws ec2 \
wait volume-available \
--volume-ids "$VOLUME_ID"
Удалите отключённый том. Это навсегда удаляет его данные, поэтому сохраните важные файлы или резервную копию перед удалением тома рабочей системы:
aws ec2 \
delete-volume \
--volume-id "$VOLUME_ID"
Завершите экземпляр приложения:
aws ec2 \
terminate-instances \
--instance-ids "$INSTANCE_ID"
Дождитесь завершения:
aws ec2 \
wait instance-terminated \
--instance-ids "$INSTANCE_ID"
Проверьте итоговое состояние экземпляра:
aws ec2 \
describe-instances \
--instance-ids "$INSTANCE_ID" \
--query 'Reservations[].Instances[].{Instance:InstanceId,State:State.Name}'
Подтвердите terminated, затем выведите оставшиеся тома:
aws ec2 \
describe-volumes \
--query 'Volumes[].{Volume:VolumeId,State:State}'
Ожидается []: ваш том данных удалён явно, а корневой том этого экземпляра удалён при завершении. Обновите AWS View и подтвердите, что сервер больше не является работающей целью, а список томов пуст. Оставьте подготовленную сеть и пару ключей на месте.
Итоги
Вы создали том данных EBS в той же зоне доступности, что и экземпляр EC2, подключили его, отформатировали пустую файловую систему и смонтировали её для приложения. Вы проверили реальный ответ с отчётом, затем размонтировали, отключили и удалили том перед завершением сервера.



