Crea una tabla DynamoDB para pedidos

AWSBeginner
Practicar Ahora

Introducción

Un servicio de pedidos necesita un lugar para almacenar detalles de pedidos y consultarlos por ID de pedido. Crearás una tabla DynamoDB, almacenarás dos elementos tipados, actualizarás un pedido empaquetado y eliminarás un pedido temporal. Finalmente eliminarás únicamente la tabla propia conservando una tabla de referencia ajena a la tarea.

Este laboratorio empieza de forma independiente en un entorno nuevo. Empieza con los laboratorios de AWS Foundations sobre comandos de terminal, identidad del llamante y nombres de recursos. Utiliza /home/labex/project y la conexión desechable preparada. AWS View muestra el estado real de tablas y elementos; no es la AWS Console.

Relación con las certificaciones

Certificación Tarea del examen Práctica
Cloud Practitioner (CLF-C02) Tarea 3.4 Claves DynamoDB, elementos tipados y operaciones de datos.
Solutions Architect – Associate (SAA-C03) Tarea 3.3 Claves DynamoDB, elementos tipados y operaciones de datos.
Developer – Associate (DVA-C02) Tarea 1.3 Claves DynamoDB, elementos tipados y operaciones de datos.
Data Engineer – Associate (DEA-C01) Tarea 2.4 Práctica de fundamentos: Claves DynamoDB, elementos tipados y operaciones de datos.

Vista general del laboratorio

Diagrama conceptual con iconos AWS4, exportado con draw.io: AWS CLI administra una tabla de pedidos con clave order_id, actualiza campos concretos y elimina solo recursos propios.

Crea una tabla de pedidos

En este paso, crearás una tabla para un pequeño servicio de pedidos. DynamoDB almacena elementos en lugar de filas restringidas por un esquema completo de columnas. La tabla declara su clave primaria; cada elemento puede tener atributos adicionales. Una clave de partición identifica un elemento en esta tabla sencilla.

AWS CLI oficial y una conexión desechable están preparados. Utiliza este espacio de trabajo y después inspecciona el llamante. No introduzcas credenciales personales.

cd /home/labex/project
aws sts get-caller-identity

El ARN del llamante termina en user/dynamodb-operator. El identificador de cuenta y el ARN identifican la conexión, no una clave de pedido.

Crea labex-d01-orders con order_id como clave de partición (HASH) de tipo String (S). --attribute-definitions declara únicamente atributos de claves, no todos los campos de los elementos. PAY_PER_REQUEST selecciona capacidad bajo demanda en lugar de unidades aprovisionadas de lectura y escritura. En AWS, las solicitudes y el almacenamiento generan cargos; esta elección no significa almacenamiento gratuito.

aws dynamodb create-table \
  --table-name labex-d01-orders \
  --attribute-definitions AttributeName=order_id,AttributeType=S \
  --key-schema AttributeName=order_id,KeyType=HASH \
  --billing-mode PAY_PER_REQUEST

La creación de la tabla devuelve metadatos. Un waiter consulta periódicamente el servicio hasta que la tabla está disponible; es más seguro que suponer que la primera respuesta significa que el recurso está listo.

aws dynamodb wait table-exists --table-name labex-d01-orders
aws dynamodb describe-table \
  --table-name labex-d01-orders \
  --query 'Table.{State:TableStatus,Keys:KeySchema,Billing:BillingModeSummary.BillingMode}'

Espera ACTIVE, la clave de partición order_id y PAY_PER_REQUEST. Observa AWS View en la parte superior de LabEx. La tarjeta de pedidos todavía no tiene elementos; la tabla de referencia independiente pertenece al entorno preparado y debe permanecer sin cambios.

Escribe y lee elementos tipados

En este paso, almacenarás dos pedidos y recuperarás uno por su clave exacta. La API de bajo nivel de DynamoDB utiliza atributos tipados: S para cadenas y N para números. El valor N se codifica como una cadena JSON, pero DynamoDB lo trata como número. Los importes monetarios aquí son unidades enteras para un pequeño ejemplo sintético.

Los dos elementos de ejemplo utilizan order_id como clave; cada atributo lleva un tipo DynamoDB.

Las comillas simples permiten que el shell pase el JSON sin cambios, incluidas las comillas dobles de su interior. Cada put-item crea un elemento completo con su propia clave. Una escritura correcta normalmente no muestra salida.

aws dynamodb put-item \
  --table-name labex-d01-orders \
  --item '{"order_id":{"S":"O100"},"customer":{"S":"Ada"},"amount":{"N":"145"},"status":{"S":"NEW"}}'
aws dynamodb put-item \
  --table-name labex-d01-orders \
  --item '{"order_id":{"S":"O101"},"customer":{"S":"Ada"},"amount":{"N":"50"},"status":{"S":"NEW"}}'

Recupera O100 por su clave primaria. --consistent-read solicita una lectura fuertemente consistente de la tabla base, útil al inspeccionar una escritura inmediatamente. Las lecturas utilizan consistencia eventual de forma predeterminada.

aws dynamodb get-item \
  --table-name labex-d01-orders \
  --key '{"order_id":{"S":"O100"}}' \
  --consistent-read

Item contiene O100, Ada, amount 145 y status NEW. Se permite que falten atributos que no sean de clave; no se permite que falte una clave requerida. En AWS View, despliega O100 dentro de la tarjeta de pedidos para ver el elemento tipado real devuelto por el mismo servicio.

Actualiza un pedido y elimina un elemento temporal

En este paso, modificarás O100 sin reemplazar sus demás campos y después eliminarás el pedido temporal O101. update-item aplica una expresión a un elemento identificado por clave. SET asigna atributos. Un alias de nombre en la expresión evita conflictos con palabras reservadas: #state representa status. Los valores de expresión llevan sus tipos DynamoDB.

El servicio de pedidos necesita cambiar los datos de preparación y conservar la identidad del cliente. PutItem reemplazaría todo el elemento con la misma clave; UpdateItem cambia solo los atributos indicados. El campo customer devuelto demuestra que la actualización conservó los demás datos del pedido.

--return-values ALL_NEW devuelve el elemento actualizado completo para que puedas inspeccionar el resultado inmediatamente.

aws dynamodb update-item \
  --table-name labex-d01-orders \
  --key '{"order_id":{"S":"O100"}}' \
  --update-expression 'SET amount = :amount, #state = :state' \
  --expression-attribute-names '{"#state":"status"}' \
  --expression-attribute-values '{":amount":{"N":"160"},":state":{"S":"PACKED"}}' \
  --return-values ALL_NEW

Los atributos devueltos conservan customer Ada mientras amount pasa a 160 y status pasa a PACKED.

Elimina únicamente O101 por su clave exacta y después léelo de nuevo.

aws dynamodb delete-item \
  --table-name labex-d01-orders \
  --key '{"order_id":{"S":"O101"}}' \
  --return-values ALL_OLD
aws dynamodb get-item \
  --table-name labex-d01-orders \
  --key '{"order_id":{"S":"O101"}}' \
  --consistent-read

ALL_OLD muestra el elemento eliminado. La lectura posterior devuelve {} porque no queda ningún elemento en esa clave; es una lectura correcta sin resultado. En AWS View, O101 desaparece y O100 conserva sus campos actualizados. Despliega O100 y compara el importe y el estado.

El pedido restante muestra el importe tipado y el estado actualizados.

Limpia únicamente la tabla propia

En este paso, eliminarás la tabla de pedidos después de comprobar sus datos finales. Eliminar una tabla elimina todos sus elementos e índices. Confirma su nombre exacto antes de eliminarla; nunca recorras para eliminar todas las tablas devueltas por el servicio.

aws dynamodb scan --table-name labex-d01-orders --consistent-read

El recorrido final devuelve únicamente O100 con amount 160 y status PACKED. Un scan examina una tabla en lugar de un elemento identificado por clave; los patrones de acceso más amplios utilizarán Query en el siguiente laboratorio.

aws dynamodb delete-table --table-name labex-d01-orders
aws dynamodb wait table-not-exists --table-name labex-d01-orders
aws dynamodb list-tables
aws dynamodb get-item \
  --table-name labex-d01-reference \
  --key '{"id":{"S":"platform"}}' \
  --consistent-read

El inventario contiene labex-d01-reference y ninguna tabla de pedidos. La nota de referencia sigue siendo keep unchanged. Un inventario y una lectura de referencia correctos demuestran que la conexión sigue funcionando; un fallo de autenticación o red no demostraría la eliminación. AWS View ahora muestra solo la referencia conservada y Orders table absent. La conexión desechable termina con esta VM; no copies sus credenciales a otro lugar.

Resumen

Creaste una tabla bajo demanda con una clave de partición String, escribiste elementos tipados, realizaste una lectura por clave fuertemente consistente, actualizaste atributos seleccionados y eliminaste un elemento. Después eliminaste únicamente la tabla propia y demostraste que la referencia ajena a la tarea seguía siendo legible. Estas operaciones establecen la base para consultas con claves compuestas y patrones de acceso alternativos en los siguientes laboratorios.

Para ampliar este tema, consulta la referencia de AWS: Tablas, elementos, atributos y claves primarias.