Où va une photo quand tu la téléverses ?
Une application photo ne garde pas ton image sur un seul téléphone. Elle l'envoie à un service de stockage dans le cloud, dépose une note dans une file pour qu'un autre programme la réduise, et l'inscrit dans une table. Ces trois tâches sont celles de S3, SQS et DynamoDB.
À la fin de cette leçon
Remarque
Je peux utiliser la ligne de commande AWS pour stocker, mettre en file et retrouver des données dans un cloud d'entraînement.
Mots-clés
- Bucket (seau) : un conteneur nommé pour des fichiers dans S3.
- Objet : un fichier stocké, retrouvé grâce à sa clé.
- File (queue) : des messages qui attendent d'être traités, dans l'ordre.
- Table : des éléments rangés sous une clé, dans DynamoDB.
- Émulateur : une copie qui se comporte comme un service sans être le vrai.
Pour commencer : ce que tu sais déjà
Remarque
Réponds dans ta tête. 1. À quoi sert un nom de fichier ? 2. À quoi sert une file d'attente à un arrêt de bus ? 3. Qu'est-ce qu'une ligne d'une table de base de données ? Réponses : à retrouver le fichier ; à servir les gens dans l'ordre ; un enregistrement.
Avant de commencer
Remarque
Appuie sur Démarrer le lab dans la barre en haut de la leçon et attends qu'il indique qu'il est en marche. La pile est un service appelé cloud, et le terminal l'atteint par ce nom. Seuls S3, SQS et DynamoDB sont activés ici : demande n'importe quel autre service, Lambda par exemple, et tu obtiens une erreur. Ce que tu crées est conservé quand le lab est arrêté puis relancé. Chaque bouton Exécuter ci-dessous tape sa commande dans le terminal de ton lab, l'une après l'autre, dans la même session. Pour suivre les commandes ou taper les tiennes, appuie sur Ouvrir le terminal (nouvel onglet) dans la barre.
1. Un bucket contient des objets
La première commande donne à la commande aws une clé inventée, la pile n'en vérifiant aucune, la région us-east-1 et l'adresse de ta propre pile, et n'affiche rien. mb crée un bucket et affiche make_bucket: lab-bucket. La suivante lui envoie le texte hello cloud sous la clé hello.txt et n'affiche rien. Copier vers - affiche l'objet : hello cloud. La dernière demande une clé qui n'a jamais été stockée. La réponse est une erreur qui dit NoSuchKey et The specified key does not exist., ce qui est identique sur le vrai AWS.
export AWS_ACCESS_KEY_ID=test AWS_SECRET_ACCESS_KEY=test AWS_DEFAULT_REGION=us-east-1 AWS_ENDPOINT_URL=http://cloud:4566Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
aws s3 mb s3://lab-bucketAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
echo "hello cloud" | aws s3 cp - s3://lab-bucket/hello.txtAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
aws s3 cp s3://lab-bucket/hello.txt -Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
aws s3api get-object --bucket lab-bucket --key nothing.txt /dev/nullAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
2. Une file garde des messages jusqu'à leur suppression
La première commande crée une file et garde son adresse dans Q, pour que tu ne la tapes jamais. La deuxième envoie un message et affiche un MD5OfBody et un MessageId. La troisième le reçoit, l'affiche sous Messages avec son Body, first message, et enregistre la réponse dans reply.json. La quatrième en extrait le ReceiptHandle, la preuve que tu l'as reçu, et le garde dans H. delete-message n'affiche rien. Beaucoup pensent que recevoir retire le message de la file. Cela le cache seulement un moment, et il revient et est traité deux fois si tu ne le supprimes pas.
Q=$(aws sqs create-queue --queue-name lab-queue --query QueueUrl --output text)Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
aws sqs send-message --queue-url $Q --message-body "first message"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
aws sqs receive-message --queue-url $Q | tee reply.jsonAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
H=$(grep -o '"ReceiptHandle": "[^"]*"' reply.json | cut -d'"' -f4)Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
aws sqs delete-message --queue-url $Q --receipt-handle "$H"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
3. Une table range des éléments sous une clé
La première commande crée une table Books, dont la clé est un author et un title, et affiche "ACTIVE". La deuxième ajoute deux éléments en une requête et affiche un UnprocessedItems vide. get-item demande un élément par sa clé complète et l'affiche, chaque valeur enveloppée dans son type : S pour du texte et N pour un nombre. query lit tous les éléments d'un auteur et affiche Count 2 et les deux titres. Demande à get-item une clé jamais ajoutée : il n'affiche rien, un élément absent étant ici une réponse vide, pas une erreur.
aws dynamodb create-table --table-name Books --attribute-definitions AttributeName=author,AttributeType=S AttributeName=title,AttributeType=S --key-schema AttributeName=author,KeyType=HASH AttributeName=title,KeyType=RANGE --billing-mode PAY_PER_REQUEST --query TableDescription.TableStatusAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
aws dynamodb batch-write-item --request-items '{"Books":[{"PutRequest":{"Item":{"author":{"S":"Ada"},"title":{"S":"Notes"},"year":{"N":"1843"}}}},{"PutRequest":{"Item":{"author":{"S":"Ada"},"title":{"S":"Sketch"},"year":{"N":"1842"}}}}]}'Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
aws dynamodb get-item --table-name Books --key '{"author":{"S":"Ada"},"title":{"S":"Notes"}}'Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
aws dynamodb query --table-name Books --key-condition-expression "author = :a" --expression-attribute-values '{":a":{"S":"Ada"}}' --query '{Count:Count,Titles:Items[].title.S}'Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Vérification finale
Astuce
Réponds sans revenir en arrière. 1. Qu'est-ce qui permet de retrouver un objet dans un bucket ? 2. Quelle erreur S3 donne-t-il pour une clé absente ? 3. Que faut-il faire d'un message une fois traité ? 4. Cette pile est-elle le vrai AWS ? Réponses : sa clé ; NoSuchKey ; le supprimer ; non, c'est un émulateur, une copie d'entraînement.
Pour les enseignants
Astuce
Cette leçon est un petit exemple de leçon qui se fait dans un lab : les étapes et les boutons Exécuter sont la leçon, et le lab est la copie de chaque élève. Le lab est un petit service et un volume nommé, et rien ici ne se corrige tout seul : l'élève rend les réponses de sa propre session, un bucket avec un objet envoyé, listé et lu, une file avec un message envoyé, reçu et supprimé, une table avec un élément ajouté, lu et interrogé, et l'erreur pour une clé absente, avec une phrase sur ce que MiniStack n'est pas. Points clés : 1. S3 stocke des objets sous des clés dans un bucket. 2. Une file garde des messages, et un message se termine en le supprimant. 3. DynamoDB stocke des éléments sous une clé, et une requête lit tous les éléments sous une partie de cette clé. 4. Une clé S3 absente est une erreur et un élément DynamoDB absent est une réponse vide. 5. MiniStack est un émulateur, pas AWS. Erreur fréquente : croire que recevoir retire le message. Matériel : le lab et son terminal. Conseil : demandez aux élèves de prédire chaque réponse avant d'appuyer sur Exécuter. Lambda est désactivé exprès, car ses fonctions exécuteraient le code des élèves dans la pile. Les identifiants de message, les poignées de réception, les heures et l'adresse de la file diffèrent du vrai AWS et d'une exécution à l'autre.