Gerenciar o ciclo de vida e os endereços de instâncias

AWSBeginner
Pratique Agora

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.