Introdução
Um arquivo de relatório foi excluído e sua equipe precisa recuperá-lo de um backup testado. Você preparará dados sintéticos, criará um snapshot EBS, excluirá deliberadamente o arquivo do exercício e restaurará seu conteúdo anterior em um novo volume. Antes da limpeza, verificará a resposta recuperada da aplicação.
Você já deve saber criar, anexar, formatar e montar um volume de dados EBS. Este ambiente independente fornece sua própria imagem, rede e par de chaves; ele não reutiliza recursos de um laboratório anterior.
Relação com a certificação
O backup e a recuperação por snapshots apoiam os conceitos de armazenamento da tarefa 3.6 dos objetivos do domínio 3 do AWS Certified Cloud Practitioner CLF-C02.
Inicie o servidor de recuperação
Nesta etapa, você iniciará a instância da aplicação e identificará sua zona de disponibilidade.
Comece em seu espaço de trabalho e carregue os IDs dos recursos fornecidos:
cd /home/labex/project
source launch.env
Inicie uma instância chamada recovery-server. A imagem já contém uma aplicação de relatórios; você fornecerá seu volume de dados:
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}]'
Obtenha o ID da instância por sua tag de nome:
INSTANCE_ID=$(aws ec2 \
describe-instances \
--filters Name=tag:Name,Values=recovery-server \
--query 'Reservations[0].Instances[0].InstanceId' \
--output text)
Espere a instância ficar em execução:
aws ec2 \
wait instance-running \
--instance-ids "$INSTANCE_ID"
Uma zona de disponibilidade é um local isolado dentro de uma região. Um volume EBS é anexado a uma instância na mesma zona de disponibilidade. Consulte a zona da instância em vez de tentar adivinhá-la:
AVAILABILITY_ZONE=$(aws ec2 \
describe-instances \
--instance-ids "$INSTANCE_ID" \
--query 'Reservations[0].Instances[0].Placement.AvailabilityZone' \
--output text)
Inspecione o estado e a zona:
aws ec2 \
describe-instances \
--instance-ids "$INSTANCE_ID" \
--query 'Reservations[].Instances[].{Instance:InstanceId,State:State.Name,Zone:Placement.AvailabilityZone}'
Confirme running. Abra AWS View, clique em Refresh resources, selecione recovery-server e clique em Check application. Confirme HTTP 200 antes de adicionar armazenamento.
Prepare o relatório de origem
Nesta etapa, você criará um volume de dados original e escreverá o relatório sintético que será incluído no backup.
O Amazon EBS fornece armazenamento em blocos para EC2. Um volume é um recurso semelhante a um disco, enquanto um sistema de arquivos organiza os arquivos nesse disco. Anexar um volume disponibiliza seu dispositivo de blocos; isso não cria um sistema de arquivos. O guia de volumes EBS descreve a anexação e a persistência dos volumes.
Crie um pequeno volume SSD de uso geral vazio. gp3 seleciona o tipo de volume, --size 1 solicita um GiB e a variável da zona o coloca na mesma zona de sua instância. Guarde seu ID para as operações seguintes:
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)
Espere o novo volume ficar disponível:
aws ec2 \
wait volume-available \
--volume-ids "$VOLUME_ID"
Anexe-o usando o nome de dispositivo da API /dev/sdf:
aws ec2 \
attach-volume \
--volume-id "$VOLUME_ID" \
--instance-id "$INSTANCE_ID" \
--device /dev/sdf
Espere a anexação:
aws ec2 \
wait volume-in-use \
--volume-ids "$VOLUME_ID"
Inspecione o volume e sua anexação:
aws ec2 \
describe-volumes \
--volume-ids "$VOLUME_ID" \
--query 'Volumes[].{Volume:VolumeId,State:State,Zone:AvailabilityZone,Size:Size,Type:VolumeType,Attachments:Attachments}'
Confirme in-use, tamanho 1, tipo gp3 e uma anexação à sua instância. Atualize AWS View e inspecione a linha do volume. O volume raiz é separado do novo volume de dados.
Consulte o endereço público atual da instância:
PUBLIC_IP=$(aws ec2 \
describe-instances \
--instance-ids "$INSTANCE_ID" \
--query 'Reservations[0].Instances[0].PublicIpAddress' \
--output text)
Conecte-se com a configuração SSH fornecida:
ssh -F ssh_config ubuntu@"$PUBLIC_IP"
Dentro da instância, inspecione o dispositivo recém-anexado. Seu nome Linux neste laboratório é /dev/xvdf; nomes de dispositivos podem ser diferentes do nome de anexação da API. Outras imagens EC2 podem apresentar nomes NVMe, portanto identifique o disco antes de operar nele. O guia oficial de preparação de volumes Linux explica essa diferença.
lsblk -f /dev/xvdf
Confirme que o dispositivo não tem um tipo de sistema de arquivos. Crie um sistema de arquivos ext4 somente neste volume de dados novo e vazio. Formatar um volume com dados existentes os apagaria:
sudo mkfs.ext4 /dev/xvdf
Um ponto de montagem é o diretório pelo qual você acessa um sistema de arquivos. Monte o novo sistema de arquivos no diretório preparado para a aplicação de relatórios:
sudo mount /dev/xvdf /srv/reports
Confirme o dispositivo de origem, o sistema de arquivos e o ponto de montagem:
findmnt /srv/reports
Procure /dev/xvdf, ext4 e /srv/reports. Crie um relatório CSV com dados sintéticos. sudo tee escreve no sistema de arquivos pertencente ao administrador; o here-document com delimitador entre aspas preserva as duas linhas:
sudo tee /srv/reports/report.csv <<'CSV'
period,total
Q1,320
CSV
Leia o arquivo novamente:
cat /srv/reports/report.csv
Volte ao terminal do LabEx:
exit
Em AWS View, selecione recovery-server e clique em Read volume report. Confirme HTTP 200 e o texto CSV period,total e Q1,320. Essa resposta demonstra que a aplicação consegue ler o arquivo do volume montado.
A montagem neste laboratório é manual. Uma reinicialização não restaura automaticamente uma montagem manual; em produção, normalmente se configura o UUID do sistema de arquivos em /etc/fstab depois de testar a entrada.
Crie um snapshot consistente
Nesta etapa, você pausará o acesso ao sistema de arquivos e fará um backup do volume de origem.
Um snapshot EBS é um backup de um volume em um determinado momento. Um backup precisa incluir os dados necessários, não apenas apresentar um estado de recurso bem-sucedido. A AWS recomenda pausar as gravações ou desmontar o volume para manter a consistência, conforme o guia de criação de snapshots. Este laboratório desmonta o sistema de arquivos de dados antes do backup.
Conecte-se à instância:
ssh -F ssh_config ubuntu@"$PUBLIC_IP"
Desmonte o sistema de arquivos de origem para descarregar as gravações e interromper o acesso ao sistema de arquivos:
sudo umount /srv/reports
Volte ao terminal do LabEx:
exit
Crie um snapshot de seu volume de origem. Guarde seu ID e identifique-o como 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)
A criação de snapshots é assíncrona. Espere até que seja concluída:
aws ec2 \
wait snapshot-completed \
--snapshot-ids "$SNAPSHOT_ID"
Inspecione seu estado e volume de origem:
aws ec2 \
describe-snapshots \
--snapshot-ids "$SNAPSHOT_ID" \
--query 'Snapshots[].{Snapshot:SnapshotId,State:State,SourceVolume:VolumeId}'
Confirme completed e o volume de origem esperado. Atualize AWS View para inspecionar o snapshot. Você testará seu conteúdo restaurando-o após uma exclusão deliberada de arquivo.
Observe uma exclusão acidental de arquivo
Nesta etapa, você removerá o relatório sintético do volume de origem e observará a ausência do relatório na aplicação.
Reconecte-se e monte novamente o volume original:
ssh -F ssh_config ubuntu@"$PUBLIC_IP"
sudo mount /dev/xvdf /srv/reports
Exclua somente o arquivo sintético que você criou para este exercício:
sudo rm /srv/reports/report.csv
Volte ao terminal do LabEx:
exit
Em AWS View, selecione recovery-server e clique em Read volume report. A solicitação ainda deve retornar HTTP 200, mas report agora é null. A aplicação está em execução; o arquivo de que ela precisa está ausente. Isso diferencia um problema no conteúdo do armazenamento de um servidor parado.
Seu snapshot foi criado antes dessa exclusão. Ele pode fornecer um novo volume contendo o relatório anterior sem modificar o volume original.
Restaure um novo volume a partir do snapshot
Nesta etapa, você restaurará o backup em um volume separado e mudará a aplicação para o sistema de arquivos recuperado.
A restauração cria um novo volume; ela não desfaz alterações no volume existente. Crie o substituto na zona de disponibilidade da instância usando seu snapshot concluído. O guia oficial de restauração descreve esse fluxo de substituição:
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)
Espere até que esteja pronto:
aws ec2 \
wait volume-available \
--volume-ids "$RESTORED_VOLUME_ID"
Anexe-o como um segundo dispositivo de dados:
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"
Inspecione a relação do volume substituto com o snapshot:
aws ec2 \
describe-volumes \
--volume-ids "$RESTORED_VOLUME_ID" \
--query 'Volumes[].{Volume:VolumeId,State:State,Snapshot:SnapshotId}'
Confirme in-use e o ID do snapshot salvo. Conecte-se para mudar a montagem da aplicação:
ssh -F ssh_config ubuntu@"$PUBLIC_IP"
Desmonte o sistema de arquivos original:
sudo umount /srv/reports
Inspecione o dispositivo recuperado, apresentado como /dev/xvdg neste laboratório:
sudo lsblk -f /dev/xvdg
Ele já contém um sistema de arquivos ext4 copiado do backup. Não formate este dispositivo: a formatação sobrescreveria os dados restaurados. Monte seu sistema de arquivos existente no diretório de relatórios da aplicação:
sudo mount /dev/xvdg /srv/reports
Confirme a origem ativa:
findmnt /srv/reports
Procure /dev/xvdg. Leia o relatório recuperado:
cat /srv/reports/report.csv
Espere as duas linhas originais, period,total e Q1,320. Volte ao terminal do LabEx:
exit
Em AWS View, clique em Refresh resources, selecione recovery-server e clique em Read volume report. Confirme HTTP 200 e o texto CSV original. Um teste de restauração bem-sucedido comprova que este backup contém dados utilizáveis pela aplicação.
Remova os recursos de recuperação
Nesta etapa, você limpará os dois volumes de dados, o snapshot e a instância.
Conecte-se e desmonte o sistema de arquivos recuperado:
ssh -F ssh_config ubuntu@"$PUBLIC_IP"
sudo umount /srv/reports
exit
Desanexe o volume recuperado:
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"
O sistema de arquivos de origem foi desmontado durante a restauração. Desanexe seu volume também:
aws ec2 \
detach-volume \
--volume-id "$VOLUME_ID" \
--instance-id "$INSTANCE_ID" \
--device /dev/sdf
aws ec2 \
wait volume-available \
--volume-ids "$VOLUME_ID"
Exclua os dois volumes desanexados do exercício:
aws ec2 \
delete-volume \
--volume-id "$RESTORED_VOLUME_ID"
aws ec2 \
delete-volume \
--volume-id "$VOLUME_ID"
Exclua o backup do exercício depois de testar sua restauração:
aws ec2 \
delete-snapshot \
--snapshot-id "$SNAPSHOT_ID"
Encerre seu servidor e espere seu estado final:
aws ec2 \
terminate-instances \
--instance-ids "$INSTANCE_ID"
aws ec2 \
wait instance-terminated \
--instance-ids "$INSTANCE_ID"
Confirme que a instância foi encerrada:
aws ec2 \
describe-instances \
--instance-ids "$INSTANCE_ID" \
--query 'Reservations[].Instances[].{Instance:InstanceId,State:State.Name}'
Liste os volumes e o backup do exercício por seus nomes:
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'
As duas listas devem ser []. Atualize AWS View e confirme que os volumes e o snapshot do exercício foram removidos e que o servidor não é mais um destino em execução. Mantenha a rede e o par de chaves preparados.
Resumo
Você fez um backup de um volume de relatórios com um snapshot EBS, observou o efeito da exclusão de um arquivo e restaurou um volume separado a partir do backup. Você montou o sistema de arquivos recuperado existente sem formatá-lo e verificou os dados originais da aplicação. Por fim, removeu os dois volumes de dados, o snapshot e a instância.



