Introdução
A aplicação de pedidos tem uma conexão ao banco, mas ainda não tem uma tabela de pedidos. Você definirá um pequeno esquema, armazenará três pedidos de clientes e consultará os dados que a aplicação lê.
Conclua primeiro o laboratório anterior de conexão. Este laboratório começa de forma independente com uma instância PostgreSQL, uma aplicação e a AWS CLI configurada. Você removerá o banco de exercício após testar os resultados.
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 um caso de uso de banco relacional para dados estruturados de uma aplicação.
- Solutions Architect – Associate (SAA-C03) · Tarefa 3.3: Entender mecanismos relacionais e padrões de acesso a dados de aplicações.
Defina a tabela de pedidos
Nesta etapa, você criará um esquema com um identificador exclusivo, nome do cliente e total para cada pedido.
Uma tabela armazena linhas com colunas definidas. SQL é a linguagem usada para definir e consultar essas linhas. A API do RDS gerencia a instância; SQL opera nos dados dentro do mecanismo PostgreSQL.
Carregue as configurações SQL preparadas e inspecione a instância fornecida:
cd /home/labex/project
source database.env
aws rds \
describe-db-instances \
--db-instance-identifier orders-db \
--query 'DBInstances[0].{Database:DBName,Endpoint:Endpoint,Status:DBInstanceStatus}'
A instância está disponível e contém o banco orders. Sua conexão psql está preparada como service=orders-db.
Crie a tabela usando um heredoc. O texto entre as duas linhas SQL é passado ao psql como instruções SQL:
psql \
"service=orders-db" \
--set=ON_ERROR_STOP=1 <<'SQL'
CREATE TABLE orders (
order_id integer PRIMARY KEY,
customer text NOT NULL,
total numeric(8,2) NOT NULL CHECK (total > 0)
);
SQL
A chave primária impede duas linhas de compartilharem um ID de pedido. NOT NULL exige um valor. numeric(8,2) armazena um decimal com duas casas decimais, e CHECK rejeita um total não positivo. Essas restrições fazem o banco rejeitar dados inválidos.
Inspecione a tabela:
psql \
"service=orders-db" \
--command '\d orders'
Espere encontrar três colunas, uma chave primária e a verificação de total positivo. A tabela ainda não tem linhas.
Armazene três pedidos de clientes
Nesta etapa, você inserirá um pequeno conjunto de dados e o lerá imediatamente.
INSERT grava linhas. Nomear as colunas torna explícita a relação de cada valor com sua coluna:
psql \
"service=orders-db" \
--set=ON_ERROR_STOP=1 <<'SQL'
INSERT INTO orders (order_id, customer, total)
VALUES
(101, 'Maya', 49.90),
(102, 'Owen', 18.50),
(103, 'Nina', 25.25);
SELECT order_id, customer, total
FROM orders
ORDER BY order_id;
SQL
Espere encontrar três linhas com os valores acima. SELECT lê dados armazenados; ORDER BY torna a exibição previsível. Sem uma cláusula de ordenação, o banco não garante uma ordem específica das linhas.
O AWS View deve mostrar os mesmos três pedidos. A aplicação lê o PostgreSQL quando recebe uma solicitação; adicionar a tabela e as linhas transforma uma lista indisponível em dados úteis da aplicação.
Consulte os pedidos e verifique a aplicação
Nesta etapa, você responderá a uma pergunta de negócio e comparará os dados SQL com a resposta da aplicação.
A equipe quer pedidos de pelo menos 25.00. WHERE filtra as linhas antes de incluí-las no resultado:
psql \
"service=orders-db" \
--command 'SELECT order_id, customer, total FROM orders WHERE total >= 25.00 ORDER BY order_id;'
Espere encontrar os pedidos 101 e 103. O filtro não exclui o pedido 102; ele apenas seleciona as linhas retornadas.
Uma agregação combina valores de várias linhas. Conte todos os pedidos e calcule o total combinado:
psql \
"service=orders-db" \
--command 'SELECT count(*) AS order_count, sum(total) AS order_total FROM orders;'
Espere encontrar 3 pedidos e um total de 93.65.
Solicite a lista de pedidos da aplicação:
curl \
--silent \
--show-error \
--fail \
http://127.0.0.1:8080/application/orders | jq
Espere encontrar os três pedidos, o banco orders, o usuário orders_admin e read_only: false. SQL e a aplicação leem os mesmos dados armazenados. A aplicação retorna a lista completa; a consulta SQL anterior aplicou o filtro solicitado.
O usuário mestre do banco é útil para criar este esquema. O próximo laboratório fornece à aplicação uma identidade com menos permissões para que o acesso rotineiro não exija privilégios administrativos.

Remova o banco de exercício
Nesta etapa, você removerá o banco deste laboratório e seus dados de pedidos.
A instância fornecida pertence a este exercício. Não é necessário manter os pedidos de exemplo nem um snapshot final:
aws rds \
delete-db-instance \
--db-instance-identifier orders-db \
--skip-final-snapshot \
--query 'DBInstance.DBInstanceIdentifier'
aws rds \
wait db-instance-deleted \
--db-instance-identifier orders-db
aws rds \
describe-db-instances \
--query 'DBInstances[].DBInstanceIdentifier'
Espere encontrar []. Excluir a instância remove o banco que contém a tabela; é uma operação mais ampla que DELETE, que remove linhas selecionadas dentro de uma tabela existente. Mantenha a aplicação e os recursos de rede preparados.
Resumo
Você definiu um esquema de pedidos com restrições, inseriu três registros e usou filtros e agregações SQL para responder perguntas sobre os dados. A aplicação leu as mesmas linhas do PostgreSQL. Depois, removeu o banco de exercício, preservando a aplicação e a rede fornecidas.
O próximo laboratório restringe o acesso de rede e os privilégios da aplicação no banco.


