Introdução
Sua equipe quer parar um servidor de relatórios durante a manutenção e iniciá-lo novamente com um endereço público previsível. Você operará uma instância EC2, comparará seus estados parado e em execução, associará um Elastic IP e verificará a aplicação depois de outro ciclo de parada e início.
Você já deve conhecer o lançamento de EC2, SSH e User Data. Este novo ambiente fornece sua própria imagem, rede, par de chaves e script de inicialização. Você lançará e operará o servidor.
Relação com a certificação
Operações de instâncias e endereçamento público apoiam os conceitos de computação e redes das tarefas 3.3 e 3.5 dos objetivos do domínio 3 do AWS Certified Cloud Practitioner CLF-C02.
Lançar o servidor de manutenção
Nesta etapa, você lançará o servidor da aplicação e inspecionará seu estado inicial e seus endereços.
Comece no diretório do projeto:
cd /home/labex/project
Carregue os IDs fornecidos da imagem, da sub-rede e do grupo de segurança:
source launch.env
O script de inicialização fornecido configura a mensagem da aplicação de relatórios. Inspecione-o antes de usar:
cat lifecycle-user-data.sh
Procure a mensagem Lifecycle server. Como no laboratório anterior, --user-data file://... lê o script Bash e o fornece à instância no lançamento. Crie um servidor chamado lifecycle-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 \
--user-data file://lifecycle-user-data.sh \
--tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=lifecycle-server}]'
Salve o ID da instância pela consulta de sua tag de nome para as próximas operações:
INSTANCE_ID=$(aws ec2 \
describe-instances \
--filters Name=tag:Name,Values=lifecycle-server \
--query 'Reservations[0].Instances[0].InstanceId' \
--output text)
Inspecione seu estado e seus endereços de rede:
aws ec2 \
describe-instances \
--instance-ids "$INSTANCE_ID" \
--query 'Reservations[].Instances[].{Instance:InstanceId,State:State.Name,PrivateIPv4:PrivateIpAddress,PublicIPv4:PublicIpAddress}'
Confirme running; se ainda estiver pending, aguarde um pouco e repita a consulta. Observe os endereços IPv4 privado e público na saída. Você os comparará após a manutenção.
Abra AWS View e clique em Refresh resources. Selecione lifecycle-server em Application requests e clique em Check application. Confirme HTTP 200 e Lifecycle server antes de alterar o estado da instância.
Parar o servidor para manutenção
Nesta etapa, você parará a instância e confirmará que ela não pode atender requisições da aplicação.
Uma instância stopped está desligada e pode ser iniciada novamente. Uma instância terminated foi removida permanentemente. Em uma instância com armazenamento raiz em EBS, parar preserva o volume raiz; a aplicação fica indisponível enquanto a instância está parada. O guia oficial do ciclo de vida de instâncias explica essas diferenças de estado.
Pare sua instância de aplicação:
aws ec2 \
stop-instances \
--instance-ids "$INSTANCE_ID"
Espere stopped. O waiter consulta o estado periodicamente e retorna sem saída quando a condição é atendida:
aws ec2 \
wait instance-stopped \
--instance-ids "$INSTANCE_ID"
Inspecione novamente o estado e os endereços:
aws ec2 \
describe-instances \
--instance-ids "$INSTANCE_ID" \
--query 'Reservations[].Instances[].{Instance:InstanceId,State:State.Name,PrivateIPv4:PrivateIpAddress,PublicIPv4:PublicIpAddress}'
Confirme stopped. O endereço IPv4 privado permanece, enquanto o IPv4 público atribuído automaticamente é liberado. Você precisará do endereço público atual após iniciá-la novamente.
Atualize o AWS View. Confirme stopped e que a instância não está mais disponível no seletor de aplicações em execução. O servidor fica indisponível durante a manutenção, embora o registro da instância e o armazenamento raiz permaneçam.
Manter um endereço público com Elastic IP
Nesta etapa, você iniciará o servidor, associará um Elastic IP e verificará se seu endpoint público permanece associado após outro ciclo de parada e início.
Inicie a instância existente:
aws ec2 \
start-instances \
--instance-ids "$INSTANCE_ID"
Espere running:
aws ec2 \
wait instance-running \
--instance-ids "$INSTANCE_ID"
Inspecione seus endereços:
aws ec2 \
describe-instances \
--instance-ids "$INSTANCE_ID" \
--query 'Reservations[].Instances[].{Instance:InstanceId,State:State.Name,PrivateIPv4:PrivateIpAddress,PublicIPv4:PublicIpAddress}'
O ID da instância e o endereço IPv4 privado permanecem iguais. O endereço público atribuído automaticamente muda após parar e iniciar. Atualize o AWS View e verifique a aplicação novamente; ela ainda deve retornar Lifecycle server.
Um Elastic IP é um endereço IPv4 público alocado à sua conta até ser liberado. A alocação reserva o endereço; a associação o conecta a uma instância ou interface de rede. Ele pode fornecer um endereço estável após parar e iniciar, conforme o guia oficial de Elastic IP.
Aloque um Elastic IP para uso em VPC e capture seu ID de alocação:
ALLOCATION_ID=$(aws ec2 \
allocate-address \
--domain vpc \
--query 'AllocationId' \
--output text)
Associe essa alocação à instância. Salve o ID de associação retornado para a limpeza:
ASSOCIATION_ID=$(aws ec2 \
associate-address \
--allocation-id "$ALLOCATION_ID" \
--instance-id "$INSTANCE_ID" \
--query 'AssociationId' \
--output text)
Inspecione o endereço e sua instância associada:
aws ec2 \
describe-addresses \
--allocation-ids "$ALLOCATION_ID" \
--query 'Addresses[].{PublicIPv4:PublicIp,Allocation:AllocationId,Instance:InstanceId}'
Anote o Elastic IP. Ele substitui o endereço IPv4 público atribuído automaticamente à instância. Atualize o AWS View e verifique a aplicação para confirmar que o novo endereço chega ao mesmo servidor.
Agora execute outro ciclo de manutenção:
aws ec2 \
stop-instances \
--instance-ids "$INSTANCE_ID"
aws ec2 \
wait instance-stopped \
--instance-ids "$INSTANCE_ID"
aws ec2 \
start-instances \
--instance-ids "$INSTANCE_ID"
aws ec2 \
wait instance-running \
--instance-ids "$INSTANCE_ID"
Inspecione a instância mais uma vez:
aws ec2 \
describe-instances \
--instance-ids "$INSTANCE_ID" \
--query 'Reservations[].Instances[].{Instance:InstanceId,State:State.Name,PrivateIPv4:PrivateIpAddress,PublicIPv4:PublicIpAddress}'
Confirme que o endereço público ainda é o Elastic IP anotado. Atualize o AWS View e clique em Check application. HTTP 200 com Lifecycle server confirma que o servidor atende requisições pelo endereço mantido após a manutenção.
Liberar o endereço e terminar o servidor
Nesta etapa, você liberará o endereço alocado e removerá permanentemente a instância da aplicação.
Desassociar remove a conexão com a instância. Isso não libera o endereço da sua conta. Primeiro desassocie a associação salva:
aws ec2 \
disassociate-address \
--association-id "$ASSOCIATION_ID"
Depois libere a alocação:
aws ec2 \
release-address \
--allocation-id "$ALLOCATION_ID"
Endereços IPv4 públicos alocados continuam sendo recursos faturáveis na AWS, mesmo quando uma instância está parada. Liberar um endereço que não é mais necessário faz parte da limpeza de recursos.
Termine o servidor:
aws ec2 \
terminate-instances \
--instance-ids "$INSTANCE_ID"
Espere a terminação:
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. Liste as alocações de Elastic IP restantes:
aws ec2 \
describe-addresses \
--query 'Addresses[].{Allocation:AllocationId,PublicIPv4:PublicIp}'
O resultado deve ser uma lista vazia, []. Atualize o AWS View e confirme que o servidor não é mais um destino em execução. Mantenha a rede e o par de chaves preparados.
Resumo
Você parou e iniciou um servidor de aplicação EC2, observou mudanças de endereço e associou um Elastic IP. Verificou o acesso à aplicação pelo endereço mantido após outro ciclo de manutenção. Por fim, liberou a alocação e terminou o servidor, confirmando a limpeza de ambos os recursos.



