1.2 - Développer avec DynamoDB et API Gateway
L'objectif 1.2 de l'AWS Certified Developer Associate couvre le travail avec les données et les API. Quand une fonction Lambda doit lire une table DynamoDB, la bonne façon d'accorder l'accès est d'attacher un rôle d'exécution avec une permission de lecture DynamoDB, pour que la fonction utilise des identifiants temporaires plutôt que des clés codées en dur. Pour ne lire qu'un sous-ensemble d'attributs et réduire le coût de lecture et la taille de la réponse, une ProjectionExpression nomme exactement les attributs à retourner. Pour construire une API REST qui invoque des fonctions Lambda, Amazon API Gateway gère le routage, la limitation, l'autorisation et les étapes. Tu dois aussi connaître les clés DynamoDB, les index secondaires, query vs scan et les écritures conditionnelles. Attends-toi à des mises en situation demandant le bon mécanisme - rôle d'exécution, ProjectionExpression ou API Gateway.
Lambda lit DynamoDB = attacher un rôle d'exécution (pas de clés). Retourner seulement certains attributs = ProjectionExpression. API REST qui invoque Lambda = API Gateway.
Questions d'entraînement
1. Une fonction Lambda doit lire une table DynamoDB. Quelle est la bonne façon de lui accorder la permission ?
- Mettre des clés d'accès dans une variable d'environnement
- Rendre la table DynamoDB publique
- Attacher un rôle d'exécution avec une politique de lecture DynamoDB (bonne réponse)
- Appeler la table seulement depuis le VPC de la fonction
Une fonction Lambda assume son rôle d'exécution pour les appels d'API AWS. Accordez des permissions de lecture DynamoDB au moindre privilège sur ce rôle ; ne jamais embarquer de clés statiques.
2. Quel service permet de construire un front-end d'API REST qui invoque des fonctions Lambda et gère la limitation et l'autorisation ?
- Amazon Route 53
- AWS Step Functions
- Amazon SNS
- Amazon API Gateway (bonne réponse)
API Gateway est une porte d'entrée gérée pour les API REST/HTTP/WebSocket : elle route vers Lambda ou d'autres back-ends et gère la limitation, l'autorisation, le cache et les étapes.
3. Pour découpler un producteur de consommateurs avec une file en mode pull qui rejoue les messages échoués, quel service un développeur doit-il utiliser ?
- Amazon Kinesis Data Firehose
- Amazon SNS
- Amazon SQS (bonne réponse)
- Amazon MQ
SQS est une file de messages en mode pull : les consommateurs interrogent les messages, et les messages non traités redeviennent visibles après le délai de visibilité, avec une file de lettres mortes pour les échecs répétés.
4. Quelle capacité capture les modifications au niveau des éléments d'une table DynamoDB pour qu'une Lambda réagisse aux insertions et mises à jour ?
- DynamoDB TTL
- Tables globales
- DynamoDB Streams (bonne réponse)
- Sauvegardes à la demande
DynamoDB Streams émettent un enregistrement ordonné des modifications au niveau des éléments ; un déclencheur Lambda peut les traiter pour l'agrégation, la réplication ou les notifications.
5. Une application doit écrire deux éléments DynamoDB de sorte que soit les deux réussissent, soit aucun n'est appliqué. Quelle API réalise cette atomicité ?
- BatchWriteItem sur les deux éléments
- Un Scan suivi de deux appels PutItem
- UpdateItem avec une expression d'incrément
- TransactWriteItems avec les deux écritures (bonne réponse)
TransactWriteItems regroupe jusqu'à 100 écritures en une transaction ACID tout-ou-rien. BatchWriteItem n'est pas atomique : les écritures individuelles peuvent réussir ou échouer indépendamment.
6. Un développeur doit interroger une table DynamoDB par un attribut qui ne fait pas partie de la clé primaire, avec sa propre clé de partition et de tri. Quel type d'index convient ?
- Un index secondaire local créé après la table
- Un index secondaire global avec ses propres clés (bonne réponse)
- Un flux DynamoDB sur la table de base
- Un cluster DAX devant la table
Un index secondaire global (GSI) définit une clé de partition et de tri totalement différente et peut être ajouté à tout moment, avec son propre débit. Un LSI partage la clé de partition de base et doit être créé à la création de la table.