Introdução
Sua aplicação de relatórios precisa de um disco separado para seu arquivo de relatório. Você criará um volume do Amazon EBS, o anexará a uma instância EC2, formatará e montará seu sistema de arquivos e disponibilizará um relatório a partir desse volume. Depois, desmontará, desanexará e excluirá os recursos que criou.
Você já deve conhecer o lançamento de instâncias EC2 e o SSH. Cada laboratório começa em um ambiente novo, com sua própria imagem de aplicação, rede e par de chaves.
Relação com a certificação
Este laboratório pratica a escolha de armazenamento em blocos para uma carga de trabalho EC2 e apoia 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 armazenamento
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 storage-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=storage-server}]'
Obtenha o ID da instância por sua tag de nome:
INSTANCE_ID=$(aws ec2 \
describe-instances \
--filters Name=tag:Name,Values=storage-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 storage-server e clique em Check application. Confirme HTTP 200 antes de adicionar armazenamento.
Crie e anexe o volume de dados
Nesta etapa, você criará um volume de dados EBS separado e o anexará ao servidor em execução.
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=report-data}]' \
--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.
Monte o volume e disponibilize um relatório
Nesta etapa, você inicializará o volume de dados vazio e disponibilizará um relatório para a aplicação.
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 storage-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.
Desmonte, desanexe e exclua
Nesta etapa, você removerá o volume de dados e a instância da aplicação em uma ordem controlada.
Primeiro, reconecte-se à instância da aplicação:
ssh -F ssh_config ubuntu@"$PUBLIC_IP"
Desmonte o sistema de arquivos antes de desanexar seu disco. Isso interrompe o acesso ao sistema de arquivos e descarrega as gravações pendentes:
sudo umount /srv/reports
Confirme que ele não está mais montado:
findmnt /srv/reports
Um diretório não montado não produz saída e findmnt retorna um código de saída diferente de zero; isso é esperado aqui. Volte ao terminal do LabEx:
exit
Desanexe somente seu volume de dados:
aws ec2 \
detach-volume \
--volume-id "$VOLUME_ID" \
--instance-id "$INSTANCE_ID" \
--device /dev/sdf
Espere o volume ficar disponível novamente:
aws ec2 \
wait volume-available \
--volume-ids "$VOLUME_ID"
Exclua o volume desanexado. Isso remove seus dados permanentemente, portanto guarde arquivos importantes ou um backup antes de excluir um volume de produção:
aws ec2 \
delete-volume \
--volume-id "$VOLUME_ID"
Encerre a instância da aplicação:
aws ec2 \
terminate-instances \
--instance-ids "$INSTANCE_ID"
Espere o encerramento:
aws ec2 \
wait instance-terminated \
--instance-ids "$INSTANCE_ID"
Inspecione o estado final da instância:
aws ec2 \
describe-instances \
--instance-ids "$INSTANCE_ID" \
--query 'Reservations[].Instances[].{Instance:InstanceId,State:State.Name}'
Confirme terminated e depois liste os volumes restantes:
aws ec2 \
describe-volumes \
--query 'Volumes[].{Volume:VolumeId,State:State}'
Espere []: seu volume de dados foi excluído explicitamente e o volume raiz desta instância foi excluído no encerramento. Atualize AWS View e confirme que o servidor não é mais um destino em execução e que a lista de volumes está vazia. Mantenha a rede e o par de chaves preparados.
Resumo
Você criou um volume de dados EBS na mesma zona de disponibilidade de uma instância EC2, o anexou, formatou um sistema de arquivos vazio e o montou para a aplicação. Você verificou uma resposta real do relatório e depois desmontou, desanexou e excluiu o volume antes de encerrar o servidor.



