Introdução
Uma aplicação de pedidos precisa de um banco de dados relacional para armazenar pedidos de clientes. Neste laboratório, você criará um banco de dados PostgreSQL privado com o Amazon RDS, conectará um cliente SQL padrão e configurará a aplicação para usar o novo endpoint.
Você deve conhecer as sub-redes de VPC, os grupos de segurança e as conexões de aplicações dos cursos anteriores de VPC e EC2. O ambiente fornece a rede, a aplicação e a AWS CLI configurada. Não é necessária uma conta pessoal da AWS. Você removerá o banco de dados ao final.
Relação com certificações
Este laboratório oferece prática introdutória para os seguintes tópicos de exames.
- Cloud Practitioner (CLF-C02) · Tarefa 3.4: Reconhecer o Amazon RDS como um serviço gerenciado de banco de dados relacional.
- Solutions Architect – Associate (SAA-C03) · Tarefa 3.3: Entender mecanismos de banco de dados e conexões de aplicações.
Crie o banco de dados da aplicação
Nesta etapa, você criará uma instância privada PostgreSQL na rede de banco de dados preparada.
O Amazon RDS gerencia instâncias de bancos de dados relacionais. O PostgreSQL é o mecanismo que armazena tabelas e executa SQL. A AWS CLI gerencia o recurso do RDS; um cliente SQL conecta-se ao mecanismo para trabalhar com os dados. Criar uma instância do RDS e consultar uma tabela são operações diferentes.
O AWS Management Console é útil para explorar serviços e inspecionar recursos. A CLI é útil para consultas precisas, operações repetíveis e automação, embora sua sintaxe exija prática. Este curso usa o Terminal e o AWS View preparados. O AWS View mostra os recursos deste laboratório e os resultados da aplicação; ele é separado do AWS Management Console.
Comece no diretório de trabalho e carregue as configurações de conexão fornecidas:
cd /home/labex/project
source database.env
DB_SECURITY_GROUP_ID identifica as regras de acesso à rede preparadas para o banco de dados. PGSERVICEFILE e PGPASSFILE informam ao cliente PostgreSQL onde estão os arquivos comuns de conexão e senha. Mantenha os arquivos de senha privados; não é necessário exibir seu conteúdo.
Inspecione o grupo de sub-redes de banco de dados preparado:
aws rds \
describe-db-subnet-groups \
--db-subnet-group-name orders-subnets \
--query 'DBSubnetGroups[].{Name:DBSubnetGroupName,VPC:VpcId,Subnets:Subnets[].SubnetIdentifier}'
Um grupo de sub-redes de banco de dados identifica as sub-redes de VPC disponíveis para o RDS. Este grupo contém sub-redes privadas de banco de dados em duas zonas de disponibilidade. Ter duas sub-redes no grupo não habilita, por si só, uma implantação Multi-AZ.
Crie a instância:
aws rds \
create-db-instance \
--db-instance-identifier orders-db \
--db-instance-class db.t3.micro \
--engine postgres \
--engine-version 16.15 \
--allocated-storage 20 \
--master-username orders_admin \
--master-user-password "$(cat db-password.txt)" \
--db-name orders \
--db-subnet-group-name orders-subnets \
--vpc-security-group-ids "$DB_SECURITY_GROUP_ID" \
--no-publicly-accessible \
--backup-retention-period 0 \
--query 'DBInstance.{Identifier:DBInstanceIdentifier,Status:DBInstanceStatus,Engine:Engine}'
O identificador da instância orders-db nomeia o recurso do RDS; o nome do banco de dados orders nomeia o banco PostgreSQL dentro dele. db.t3.micro seleciona uma classe de instância, e 20 é o tamanho de armazenamento solicitado em GiB. O acesso privado mantém as conexões da aplicação dentro da rede preparada. A retenção de backups automáticos está desabilitada para este exercício curto; um laboratório posterior ensina a criar um snapshot manual.
$(cat db-password.txt) fornece a senha preparada do banco de dados sem imprimi-la. Não cole senhas em anotações ou capturas de tela.
Aguarde a disponibilidade e consulte o endpoint de conexão:
aws rds \
wait db-instance-available \
--db-instance-identifier orders-db
aws rds \
describe-db-instances \
--db-instance-identifier orders-db \
--query 'DBInstances[0].{Identifier:DBInstanceIdentifier,Database:DBName,Status:DBInstanceStatus,Endpoint:Endpoint}'
Espere encontrar o banco de dados orders, o status available e a porta PostgreSQL 5432. O endpoint é o endereço usado pelos clientes para selecionar esta instância de banco de dados. O AWS View deve listar orders-db como banco primário. A tabela de pedidos ainda não foi criada.
Conecte o cliente SQL e a aplicação
Nesta etapa, você testará o mecanismo de banco de dados e configurará seu endpoint na aplicação.
O psql é o cliente padrão de linha de comando do PostgreSQL. O serviço preparado chamado orders-db contém os dados de conexão da instância que você acabou de criar. Um nome de serviço é uma entrada conveniente de configuração do cliente; ele não é um recurso da AWS.

Diagrama conceitual: Uma conexão PostgreSQL privada precisa de endpoint acessível e porta permitida.
Consulte o mecanismo:
psql \
"service=orders-db" \
--command 'SELECT current_database(), current_user;'
Espere encontrar o banco de dados orders e o usuário orders_admin. Esse resultado vem de uma conexão ao banco, e não dos metadados do recurso do RDS. O RDS gerencia o host do banco; as aplicações conectam-se pelo protocolo do banco de dados, sem acesso SSH ao host.
Obtenha o endpoint do RDS. --query seleciona um campo, --output text produz um valor simples, e $(...) do shell o salva em DB_ENDPOINT:
DB_ENDPOINT=$(aws rds \
describe-db-instances \
--db-instance-identifier orders-db \
--query 'DBInstances[0].Endpoint.Address' \
--output text)
Inspecione a configuração da aplicação fornecida:
cat app-config.json
read_host seleciona o banco para consultas, e write_host seleciona o banco para alterações. Por enquanto, ambos devem usar o primário. password_file referencia um arquivo privado em vez de incorporar uma senha neste documento JSON.
Use jq, uma ferramenta de edição de JSON, para definir os dois campos de host. Grave um novo arquivo e substitua a configuração somente após a edição ter sucesso:
jq \
--arg host "$DB_ENDPOINT" \
'.read_host = $host | .write_host = $host' \
app-config.json > app-config.new
mv app-config.new app-config.json
Teste a conexão da aplicação:
curl \
--silent \
--show-error \
--fail \
http://127.0.0.1:8080/application/connection
Espere que database seja orders, user seja orders_admin e read_only seja false. O primário aceita gravações, mas este laboratório apenas estabelece a conexão. A lista de pedidos do AWS View continuará indisponível até existir uma tabela de pedidos; você criará essa tabela no próximo laboratório.

O exemplo mostra a aplicação conectada ao banco primário orders e ao endpoint nativo do RDS. A tabela de pedidos ainda não foi criada. Seus identificadores de recursos podem ser diferentes.

Exemplo da Console oficial: Endpoint e Port em Connectivity & security correspondem a Endpoint.Address e Endpoint.Port da CLI. O exemplo mostra MySQL e 3306; este laboratório usa PostgreSQL e 5432 com o endpoint retornado pelo seu comando. Não copie o hostname nem a porta do exemplo. Continue no Terminal e AWS View sem entrar na AWS.
Source: AWS RDS guide.
Remova a instância de banco de dados
Nesta etapa, você removerá o banco temporário, preservando a aplicação e a rede preparadas.
Exclua sua instância sem manter um snapshot final:
aws rds \
delete-db-instance \
--db-instance-identifier orders-db \
--skip-final-snapshot \
--query 'DBInstance.DBInstanceIdentifier'
--skip-final-snapshot descarta o banco deste exercício em vez de salvar uma cópia de recuperação. Para dados importantes, decida como preservar um backup antes de excluir uma instância.
Aguarde a exclusão e inspecione o inventário:
aws rds \
wait db-instance-deleted \
--db-instance-identifier orders-db
aws rds \
describe-db-instances \
--query 'DBInstances[].DBInstanceIdentifier'
Espere encontrar []. O AWS View deve mostrar nenhum banco de dados. O endpoint antigo da aplicação já não aponta para um banco existente, portanto uma falha de conexão é esperada após a exclusão. Mantenha o grupo de sub-redes, os grupos de segurança e os arquivos da aplicação fornecidos.
Resumo
Você criou uma instância privada RDS PostgreSQL, distinguiu seu identificador de recurso do nome do banco e inspecionou seu endpoint. Usou psql para consultar o mecanismo e conectou uma aplicação ao mesmo primário. Por fim, excluiu a instância, preservando a rede preparada.
O próximo laboratório cria uma tabela de pedidos e usa SQL para armazenar e consultar pedidos de clientes.



