Introdução
Sua equipe precisa de um servidor para uma pequena aplicação de relatórios. Neste laboratório, você lançará uma instância Amazon EC2, conectará por SSH, alterará a mensagem da aplicação e testará sua resposta pelo AWS View. Depois, terminará a instância e confirmará seu estado final.
Você deve conhecer os comandos básicos do terminal e a finalidade de uma VPC, uma sub-rede e um grupo de segurança. O ambiente fornece uma rede, uma imagem Ubuntu, um par de chaves SSH e o software da aplicação. Você criará e configurará a instância da aplicação.
Relação com a certificação
Este laboratório pratica operações programáticas da AWS e a escolha do EC2 como serviço de computação, relacionadas às tarefas 3.1 e 3.3 dos objetivos do domínio 3 do AWS Certified Cloud Practitioner CLF-C02. Você também distinguirá uma imagem, um tipo de instância e uma instância em execução.
Lançar a instância da aplicação
Nesta etapa, você inspecionará uma imagem preparada e lançará uma instância EC2 na rede fornecida.
Uma instância EC2 é um servidor virtual. Uma Amazon Machine Image (AMI) fornece seu sistema operacional e software inicial. Um tipo de instância especifica uma combinação de capacidade de computação e memória. Você escolherá t3.micro, um tipo pequeno de uso geral, para esta aplicação introdutória.
Comece no diretório do projeto:
cd /home/labex/project
O arquivo launch.env contém os identificadores da imagem, da sub-rede e do grupo de segurança preparados. Inspecione-o para conhecer os recursos que usará:
cat launch.env
Os valores são IDs de recursos e diferem entre ambientes. Carregue-os no shell atual com source, que lê as atribuições de variáveis do arquivo:
source launch.env
Inspecione a AMI. A opção --image-ids seleciona a imagem, enquanto --query limita os campos exibidos:
aws ec2 \
describe-images \
--image-ids "$AMI_ID" \
--query 'Images[].{Image:ImageId,Name:Name,Architecture:Architecture}'
Procure o nome de imagem report-server-ubuntu-2204 e a arquitetura x86_64. Essa imagem contém Ubuntu e a aplicação de relatórios, permitindo que você se concentre no lançamento e na operação do servidor.
A sub-rede determina a localização da instância na rede. O grupo de segurança fornecido permite SSH na porta 22 e requisições da aplicação na porta 8081 a partir da rede de acesso do laboratório. O par de chaves report-key fornece a chave pública instalada na instância; sua chave privada está no diretório do projeto para a conexão SSH.
Lance uma instância com os recursos preparados. --count 1 cria um servidor, e a tag fornece o nome identificável report-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=report-server}]'
A resposta contém o ID da nova instância e seu estado inicial. Salve o ID em uma variável de shell para os próximos comandos. A sintaxe $(...) executa o comando entre parênteses e armazena sua saída; --output text retorna o ID como texto simples:
INSTANCE_ID=$(aws ec2 \
describe-instances \
--filters Name=tag:Name,Values=report-server \
--query 'Reservations[0].Instances[0].InstanceId' \
--output text)
Inspecione o estado e os endereços da instância:
aws ec2 \
describe-instances \
--instance-ids "$INSTANCE_ID" \
--query 'Reservations[].Instances[].{Instance:InstanceId,State:State.Name,PrivateIPv4:PrivateIpAddress,PublicIPv4:PublicIpAddress}'
Confirme o estado running e a presença dos endereços IPv4 privado e público. Se ainda estiver pending, aguarde um pouco e repita o comando. O endereço privado identifica o servidor dentro da VPC; o público é o destino usado para conectar pela rede de acesso do laboratório.
Conectar e configurar a aplicação
Nesta etapa, você conectará à instância por SSH, alterará a mensagem da aplicação de relatórios e testará a resposta no AWS View.
Obtenha o endereço IPv4 público da instância em outra variável de shell:
PUBLIC_IP=$(aws ec2 \
describe-instances \
--instance-ids "$INSTANCE_ID" \
--query 'Reservations[0].Instances[0].PublicIpAddress' \
--output text)
SSH cria uma conexão de terminal criptografada com o servidor. Imagens Ubuntu usam o usuário de login ubuntu. O arquivo ssh_config fornecido seleciona sua chave privada e a rota de conexão do laboratório; -F instrui o SSH a ler esse arquivo de configuração:
ssh -F ssh_config ubuntu@"$PUBLIC_IP"
Seu terminal está agora dentro da instância da aplicação. Confirme o usuário conectado:
whoami
A saída deve ser ubuntu. Isso diferencia a instância da aplicação do terminal do LabEx, cujo usuário é labex.
A aplicação fornecida lê sua mensagem em /etc/report-app/config.json. Atualizar esse arquivo do sistema exige privilégios de administrador. sudo tee escreve o texto abaixo no arquivo, e o here-document entre os marcadores JSON fornece esse texto:
sudo tee /etc/report-app/config.json <<'JSON'
{
"message": "Hello from EC2"
}
JSON
A aplicação relê essa configuração em cada requisição. Use curl para consultar seu endpoint de saúde pelo endereço de loopback da instância:
curl -sS http://127.0.0.1:8081/health
A resposta JSON deve identificar o serviço Report server e incluir "message": "Hello from EC2". Isso comprova que a aplicação responde dentro da instância com sua configuração.
Saia da sessão SSH para voltar ao terminal do LabEx:
exit
Abra AWS View e clique em Refresh resources. Encontre report-server na tabela de instâncias. Confirme seu estado running e compare o endereço IPv4 público com o retornado pela CLI.
Em Application requests, selecione a instância em execução e clique em Check application. Confirme uma resposta HTTP 200 contendo Hello from EC2. Essa requisição usa o endereço público atual da instância e testa a aplicação pela rede, além da verificação dentro do servidor.

Exemplo de verificação: a aplicação retorna HTTP 200 com Hello from EC2. Seus IDs de recursos e endereços serão diferentes.
Terminar seu servidor
Nesta etapa, você terminará a instância da aplicação e confirmará que ela não está mais em execução.
A terminação remove a instância permanentemente. Use o ID salvo para selecionar somente seu servidor de aplicação:
aws ec2 \
terminate-instances \
--instance-ids "$INSTANCE_ID"
A resposta mostra os estados anterior e atual. A AWS CLI também fornece um waiter, que consulta um recurso até atingir o estado indicado. Espere a terminação terminar:
aws ec2 \
wait instance-terminated \
--instance-ids "$INSTANCE_ID"
O waiter retorna sem saída quando a condição é atendida. Inspecione o estado final:
aws ec2 \
describe-instances \
--instance-ids "$INSTANCE_ID" \
--query 'Reservations[].Instances[].{Instance:InstanceId,State:State.Name}'
Confirme terminated. Um registro da instância pode continuar visível após a terminação; isso não significa que o servidor continua em execução.
Clique em Refresh resources no AWS View. A instância deve mostrar terminated e não estar mais disponível como destino de aplicação em execução. Mantenha a rede e o par de chaves preparados.
Resumo
Você lançou uma instância EC2 usando uma AMI, um tipo de instância, recursos de rede e um par de chaves SSH. Conectou ao servidor, configurou a aplicação de relatórios e verificou sua resposta no AWS View. Por fim, terminou a instância e confirmou seu estado final.



