Введение
Файл отчёта удалён, и вашей команде нужно восстановить его из проверенной резервной копии. Вы подготовите синтетические данные отчёта, создадите снимок EBS, намеренно удалите файл упражнения и восстановите его прежнее содержимое на новом томе. Перед удалением ресурсов вы проверите восстановленный ответ приложения.
Вы уже должны знать, как создавать, подключать, форматировать и монтировать том данных EBS. Эта независимая среда предоставляет собственный образ, сеть и пару ключей и не использует ресурсы предыдущей лабораторной.
Связь с сертификацией
Резервное копирование и восстановление с помощью снимков закрепляют понятия хранения из задачи 3.6 целей домена 3 AWS Certified Cloud Practitioner CLF-C02.
Запустите сервер восстановления
На этом шаге вы запустите экземпляр приложения и определите его зону доступности.
Начните в рабочем каталоге и загрузите предоставленные идентификаторы ресурсов:
cd /home/labex/project
source launch.env
Запустите один экземпляр с именем recovery-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=recovery-server}]'
Получите идентификатор экземпляра по тегу имени:
INSTANCE_ID=$(aws ec2 \
describe-instances \
--filters Name=tag:Name,Values=recovery-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, выберите recovery-server и нажмите Check application. Подтвердите HTTP 200 перед добавлением хранилища.
Подготовьте исходный отчёт
На этом шаге вы создадите исходный том данных и запишете синтетический отчёт для резервного копирования.
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=source-report}]' \
--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 выберите recovery-server и нажмите Read volume report. Подтвердите HTTP 200 и текст CSV period,total и Q1,320. Этот ответ показывает, что приложение может прочитать файл со смонтированного тома.
Монтирование в этой лабораторной выполняется вручную. Перезагрузка не восстанавливает ручное монтирование автоматически; в рабочих системах обычно настраивают UUID файловой системы в /etc/fstab после проверки записи.
Создайте согласованный снимок
На этом шаге вы приостановите доступ к файловой системе и создадите резервную копию исходного тома.
Снимок EBS — резервная копия тома на определённый момент времени. Копия должна содержать нужные данные, а не только иметь успешный статус ресурса. AWS рекомендует приостановить запись или размонтировать том для согласованности, как описано в руководстве по созданию снимков. В этой лабораторной файловая система данных размонтируется перед резервным копированием.
Подключитесь к экземпляру:
ssh -F ssh_config ubuntu@"$PUBLIC_IP"
Размонтируйте исходную файловую систему, чтобы завершить запись и прекратить доступ к ней:
sudo umount /srv/reports
Вернитесь в терминал LabEx:
exit
Создайте снимок исходного тома. Сохраните его идентификатор и присвойте метку report-backup:
SNAPSHOT_ID=$(aws ec2 \
create-snapshot \
--volume-id "$VOLUME_ID" \
--description 'Report before accidental deletion' \
--tag-specifications 'ResourceType=snapshot,Tags=[{Key=Name,Value=report-backup}]' \
--query 'SnapshotId' \
--output text)
Создание снимка выполняется асинхронно. Дождитесь его завершения:
aws ec2 \
wait snapshot-completed \
--snapshot-ids "$SNAPSHOT_ID"
Проверьте его состояние и исходный том:
aws ec2 \
describe-snapshots \
--snapshot-ids "$SNAPSHOT_ID" \
--query 'Snapshots[].{Snapshot:SnapshotId,State:State,SourceVolume:VolumeId}'
Подтвердите completed и ожидаемый исходный том. Обновите AWS View, чтобы проверить снимок. Вы проверите его содержимое восстановлением после намеренного удаления файла.
Наблюдайте последствия случайного удаления файла
На этом шаге вы удалите синтетический отчёт с исходного тома и увидите отсутствие отчёта в приложении.
Подключитесь снова и повторно смонтируйте исходный том:
ssh -F ssh_config ubuntu@"$PUBLIC_IP"
sudo mount /dev/xvdf /srv/reports
Удалите только синтетический файл, созданный для этого упражнения:
sudo rm /srv/reports/report.csv
Вернитесь в терминал LabEx:
exit
В AWS View выберите recovery-server и нажмите Read volume report. Запрос по-прежнему должен возвращать HTTP 200, но report теперь равен null. Приложение работает, но нужный файл отсутствует. Это позволяет отличить проблему с содержимым хранилища от остановленного сервера.
Ваш снимок создан до этого удаления. Он может предоставить новый том с прежним отчётом, не изменяя исходный том.
Восстановите новый том из снимка
На этом шаге вы восстановите резервную копию на отдельный том и переключите приложение на восстановленную файловую систему.
Восстановление создаёт новый том, а не отменяет изменения существующего. Создайте замену в зоне доступности экземпляра, используя завершённый снимок. Официальное руководство по восстановлению описывает этот процесс замены:
RESTORED_VOLUME_ID=$(aws ec2 \
create-volume \
--availability-zone "$AVAILABILITY_ZONE" \
--snapshot-id "$SNAPSHOT_ID" \
--volume-type gp3 \
--tag-specifications 'ResourceType=volume,Tags=[{Key=Name,Value=recovered-report}]' \
--query 'VolumeId' \
--output text)
Дождитесь готовности:
aws ec2 \
wait volume-available \
--volume-ids "$RESTORED_VOLUME_ID"
Подключите его как второе устройство данных:
aws ec2 \
attach-volume \
--volume-id "$RESTORED_VOLUME_ID" \
--instance-id "$INSTANCE_ID" \
--device /dev/sdg
aws ec2 \
wait volume-in-use \
--volume-ids "$RESTORED_VOLUME_ID"
Проверьте связь нового тома со снимком:
aws ec2 \
describe-volumes \
--volume-ids "$RESTORED_VOLUME_ID" \
--query 'Volumes[].{Volume:VolumeId,State:State,Snapshot:SnapshotId}'
Подтвердите in-use и сохранённый идентификатор снимка. Подключитесь для переключения монтирования приложения:
ssh -F ssh_config ubuntu@"$PUBLIC_IP"
Размонтируйте исходную файловую систему:
sudo umount /srv/reports
Проверьте восстановленное устройство, представленное в этой лабораторной как /dev/xvdg:
sudo lsblk -f /dev/xvdg
Оно уже содержит файловую систему ext4, скопированную из резервной копии. Не форматируйте это устройство: форматирование перезапишет восстановленные данные. Смонтируйте существующую файловую систему в каталог отчётов приложения:
sudo mount /dev/xvdg /srv/reports
Подтвердите активный источник:
findmnt /srv/reports
Найдите /dev/xvdg. Прочитайте восстановленный отчёт:
cat /srv/reports/report.csv
Ожидаются исходные две строки: period,total и Q1,320. Вернитесь в терминал LabEx:
exit
В AWS View нажмите Refresh resources, выберите recovery-server и нажмите Read volume report. Подтвердите HTTP 200 и исходный текст CSV. Успешная проверка восстановления доказывает, что резервная копия содержит пригодные для приложения данные.
Удалите ресурсы восстановления
На этом шаге вы удалите оба тома данных, снимок и экземпляр.
Подключитесь и размонтируйте восстановленную файловую систему:
ssh -F ssh_config ubuntu@"$PUBLIC_IP"
sudo umount /srv/reports
exit
Отключите восстановленный том:
aws ec2 \
detach-volume \
--volume-id "$RESTORED_VOLUME_ID" \
--instance-id "$INSTANCE_ID" \
--device /dev/sdg
aws ec2 \
wait volume-available \
--volume-ids "$RESTORED_VOLUME_ID"
Исходная файловая система размонтирована при восстановлении. Отключите и её том:
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 "$RESTORED_VOLUME_ID"
aws ec2 \
delete-volume \
--volume-id "$VOLUME_ID"
Удалите резервную копию упражнения после проверки восстановления:
aws ec2 \
delete-snapshot \
--snapshot-id "$SNAPSHOT_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}'
Выведите тома и резервную копию упражнения по их именам:
aws ec2 \
describe-volumes \
--filters Name=tag:Name,Values=source-report,recovered-report \
--query 'Volumes[].VolumeId'
aws ec2 \
describe-snapshots \
--filters Name=tag:Name,Values=report-backup \
--query 'Snapshots[].SnapshotId'
Оба списка должны быть []. Обновите AWS View и подтвердите, что тома и снимок упражнения удалены, а сервер больше не является работающей целью. Оставьте подготовленную сеть и пару ключей на месте.
Итоги
Вы создали резервную копию тома отчётов с помощью снимка EBS, наблюдали эффект удаления файла и восстановили отдельный том из копии. Вы смонтировали существующую восстановленную файловую систему без форматирования и проверили исходные данные приложения. Наконец, вы удалили оба тома данных, снимок и экземпляр.



