Créer une table DynamoDB pour les commandes

AWSBeginner
Pratiquer maintenant

Introduction

Un service de commandes doit stocker les détails des commandes et les retrouver par identifiant. Vous allez créer une table DynamoDB, stocker deux éléments typés, mettre à jour une commande emballée et supprimer une commande temporaire. Enfin, vous supprimerez uniquement votre table tout en conservant une table de référence sans rapport avec votre travail.

Ce laboratoire commence indépendamment dans un nouvel environnement. Commencez par les laboratoires AWS Foundations sur les commandes du terminal, l'identité de l'appelant et les noms de ressources. Utilisez /home/labex/project et la connexion temporaire préparée. AWS View affiche l'état réel des tables et des éléments ; il ne s'agit pas de la console AWS.

Lien avec les certifications

Certification Tâche de l’examen Pratique
Cloud Practitioner (CLF-C02) Tâche 3.4 Clés DynamoDB, éléments typés et opérations sur les données.
Solutions Architect – Associate (SAA-C03) Tâche 3.3 Clés DynamoDB, éléments typés et opérations sur les données.
Developer – Associate (DVA-C02) Tâche 1.3 Clés DynamoDB, éléments typés et opérations sur les données.
Data Engineer – Associate (DEA-C01) Tâche 2.4 Pratique des fondamentaux : Clés DynamoDB, éléments typés et opérations sur les données.

Vue d’ensemble du laboratoire

Schéma conceptuel avec des icônes AWS4, exporté par draw.io : AWS CLI gère une table de commandes avec la clé order_id, met à jour certains attributs et supprime uniquement les ressources de l’exercice.

Créer une table de commandes

Dans cette étape, vous allez créer une table pour un petit service de commandes. DynamoDB stocke des éléments plutôt que des lignes soumises à un schéma complet de colonnes. La table déclare sa clé primaire ; chaque élément peut avoir des attributs supplémentaires. Une clé de partition identifie un élément dans cette table simple.

La CLI AWS officielle et une connexion temporaire sont préparées. Utilisez cet espace de travail, puis inspectez l'appelant. Ne saisissez pas d'identifiants personnels.

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

L'ARN de l'appelant se termine par user/dynamodb-operator. L'identifiant du compte et l'ARN identifient la connexion, pas une clé de commande.

Créez labex-d01-orders avec order_id comme clé de partition (HASH) de type String (S). --attribute-definitions déclare uniquement les attributs de clé, pas tous les champs des éléments. PAY_PER_REQUEST sélectionne la capacité à la demande plutôt que des unités de lecture et d'écriture provisionnées. Sur AWS, les requêtes et le stockage sont facturés ; ce choix ne signifie pas que le stockage est gratuit.

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 création de la table renvoie des métadonnées. Une commande d'attente interroge le service jusqu'à ce que la table soit disponible ; c'est plus sûr que de supposer que la première réponse signifie que la ressource est prête.

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}'

Attendez-vous à obtenir ACTIVE, la clé de partition order_id et PAY_PER_REQUEST. Observez AWS View en haut dans LabEx. La carte des commandes ne contient pas encore d'éléments ; la table de référence distincte appartient à l'environnement préparé et doit rester inchangée.

Écrire et lire des éléments typés

Dans cette étape, vous allez stocker deux commandes et en récupérer une par sa clé exacte. L'API DynamoDB de bas niveau utilise des attributs typés : S pour les chaînes et N pour les nombres. La valeur N est encodée sous forme de chaîne JSON, mais DynamoDB la traite comme un nombre. Ici, les montants monétaires sont des unités entières dans un petit exemple synthétique.

Les deux éléments d'exemple utilisent order_id comme clé ; chaque attribut porte un type DynamoDB.

Les guillemets simples permettent au shell de transmettre le JSON sans modification, y compris ses guillemets doubles internes. Chaque put-item crée un élément complet avec sa propre clé. Une écriture réussie ne produit normalement aucune sortie.

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"}}'

Récupérez O100 par sa clé primaire. --consistent-read demande une lecture fortement cohérente de la table de base, utile pour inspecter immédiatement une écriture. Les lectures utilisent par défaut la cohérence éventuelle.

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

L'élément Item contient O100, Ada, le montant 145 et le statut NEW. L'absence d'attributs hors clé est autorisée ; l'absence d'une clé requise ne l'est pas. Dans AWS View, développez O100 dans la carte des commandes pour voir l'élément typé réel renvoyé par le même service.

Mettre à jour une commande et supprimer un élément temporaire

Dans cette étape, vous allez modifier O100 sans remplacer ses autres champs, puis supprimer la commande temporaire O101. update-item applique une expression à un élément identifié par sa clé. SET affecte des attributs. Un alias de nom dans l'expression évite les conflits avec les mots réservés : #state représente status. Les valeurs de l'expression portent leurs types DynamoDB.

Le service de commandes doit modifier les détails de préparation tout en conservant l’identité du client. PutItem remplacerait l’élément entier à la même clé ; UpdateItem ne modifie que les attributs indiqués. Le champ customer retourné prouve que les autres données de la commande sont conservées.

--return-values ALL_NEW renvoie l'élément mis à jour complet pour vous permettre d'inspecter immédiatement le résultat.

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

Les attributs renvoyés conservent le client Ada, tandis que le montant devient 160 et le statut devient PACKED.

Supprimez uniquement O101 par sa clé exacte, puis relisez cet élément.

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 affiche l'élément supprimé. La lecture suivante renvoie {}, car aucun élément ne reste à cette clé ; il s'agit d'une lecture réussie sans résultat. Dans AWS View, O101 disparaît et O100 conserve ses champs mis à jour. Développez O100 et comparez le montant et le statut.

La commande restante affiche le montant et le statut typés mis à jour.

Nettoyer uniquement la table de l'exercice

Dans cette étape, vous allez supprimer la table de commandes après avoir contrôlé ses données finales. Supprimer une table supprime tous ses éléments et ses index. Confirmez son nom exact avant la suppression ; ne parcourez jamais toutes les tables renvoyées par le service pour les supprimer.

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

Le parcours final renvoie uniquement O100 avec le montant 160 et le statut PACKED. Un scan examine une table plutôt qu'un seul élément identifié par sa clé ; les modes d'accès plus étendus utiliseront Query dans le prochain laboratoire.

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

L'inventaire contient labex-d01-reference et aucune table de commandes. La note de référence reste keep unchanged. Un inventaire et une lecture de référence réussis prouvent que la connexion fonctionne encore ; un échec d'authentification ou de réseau ne prouverait pas la suppression. AWS View affiche maintenant uniquement la référence conservée et Orders table absent. La connexion temporaire prend fin avec cette VM ; ne copiez pas ses identifiants ailleurs.

Résumé

Vous avez créé une table à la demande avec une clé de partition String, écrit des éléments typés, effectué une lecture fortement cohérente par clé, mis à jour certains attributs et supprimé un élément. Vous avez ensuite supprimé uniquement votre table et prouvé que la référence sans rapport restait lisible. Ces opérations constituent la base des requêtes à clé composite et des autres modes d'accès des prochains laboratoires.

Pour approfondir ce sujet, consultez la documentation AWS : Tables, éléments, attributs et clés primaires.