Lançar um servidor de aplicação EC2

AWSBeginner
Pratique Agora

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.

AWS View mostra report-server em execução e a resposta da aplicação configurada

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.