Introducción
La aplicación de pedidos tiene una conexión a la base de datos, pero ninguna tabla de pedidos. Definirás un esquema pequeño, almacenarás tres pedidos de clientes y consultarás los datos que lee la aplicación.
Completa primero el laboratorio anterior de conexión. Este laboratorio empieza de forma independiente con una instancia PostgreSQL, una aplicación y la AWS CLI configurada. Eliminarás la base de práctica después de probar los resultados.
Relación con certificaciones
Este laboratorio ofrece práctica introductoria para los siguientes temas de examen.
- Cloud Practitioner (CLF-C02) · Tarea 3.4: Reconocer el uso de una base relacional para datos estructurados de una aplicación.
- Solutions Architect – Associate (SAA-C03) · Tarea 3.3: Comprender motores relacionales y patrones de acceso a datos de aplicaciones.
Define la tabla de pedidos
En este paso crearás un esquema con un identificador único, un nombre de cliente y un importe para cada pedido.
Una tabla almacena filas con columnas definidas. SQL es el lenguaje para definir y consultar esas filas. La API de RDS administra la instancia; SQL trabaja con los datos dentro del motor PostgreSQL.
Carga la configuración SQL preparada e inspecciona la instancia suministrada:
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}'
La instancia está disponible y contiene la base orders. Su conexión psql está preparada como service=orders-db.
Crea la tabla con un heredoc. El texto entre las dos líneas SQL se pasa a psql como sentencias 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
La clave primaria evita que dos filas compartan un ID de pedido. NOT NULL exige un valor. numeric(8,2) almacena un decimal con dos cifras decimales, y CHECK rechaza importes no positivos. Estas restricciones hacen que la base rechace datos inválidos.
Inspecciona la tabla:
psql \
"service=orders-db" \
--command '\d orders'
Debes ver las tres columnas, una clave primaria y la comprobación de importe positivo. La tabla aún no tiene filas.
Almacena tres pedidos de clientes
En este paso insertarás un conjunto pequeño de datos y lo leerás inmediatamente.
INSERT escribe filas. Nombrar las columnas aclara la relación de cada valor con su columna:
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
Debes ver tres filas con los valores anteriores. SELECT lee datos almacenados; ORDER BY hace predecible el orden mostrado. Sin una cláusula de ordenación, la base no garantiza un orden concreto de filas.
AWS View debe mostrar los mismos tres pedidos. La aplicación lee PostgreSQL cuando recibe una petición; añadir la tabla y las filas convierte una lista no disponible en datos útiles de la aplicación.
Consulta pedidos y comprueba la aplicación
En este paso responderás una pregunta de negocio y compararás los datos SQL con la respuesta de la aplicación.
El equipo necesita pedidos de al menos 25.00. WHERE filtra las filas antes de incluirlas en el resultado:
psql \
"service=orders-db" \
--command 'SELECT order_id, customer, total FROM orders WHERE total >= 25.00 ORDER BY order_id;'
Debes ver los pedidos 101 y 103. El filtro no elimina el pedido 102; solo elige las filas que devuelve.
Una agregación combina valores de varias filas. Cuenta todos los pedidos y calcula su importe total:
psql \
"service=orders-db" \
--command 'SELECT count(*) AS order_count, sum(total) AS order_total FROM orders;'
Debes obtener 3 pedidos y un total de 93.65.
Solicita la lista de pedidos de la aplicación:
curl \
--silent \
--show-error \
--fail \
http://127.0.0.1:8080/application/orders | jq
Debes obtener los tres pedidos, la base orders, el usuario orders_admin y read_only: false. SQL y la aplicación leen los mismos datos almacenados. La aplicación devuelve la lista completa; la consulta SQL anterior aplicó el filtro solicitado.
El usuario maestro de la base es útil para crear este esquema. El siguiente laboratorio asigna a la aplicación una identidad con menos permisos para que el acceso habitual no necesite privilegios administrativos.

Elimina la base de práctica
En este paso eliminarás la base de este laboratorio y sus datos de pedidos.
La instancia suministrada pertenece a este ejercicio. No necesitas conservar los pedidos de ejemplo ni un 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'
Debes obtener []. Eliminar la instancia borra la base que contiene la tabla; tiene un alcance mayor que DELETE, que elimina filas seleccionadas dentro de una tabla existente. Conserva la aplicación y los recursos de red preparados.
Resumen
Definiste un esquema de pedidos con restricciones, insertaste tres registros y usaste filtros y agregaciones SQL para responder preguntas sobre los datos. La aplicación leyó las mismas filas de PostgreSQL. Después eliminaste la base de práctica y conservaste la aplicación y la red suministradas.
El siguiente laboratorio restringe tanto el acceso de red como los privilegios de base de datos de la aplicación.


