Tutoriel : utilisation d’AWS Lambda avec Amazon DocumentDB Streams
Dans ce tutoriel, vous créez une fonction Lambda de base qui consomme des événements à partir d’un flux de modifications Amazon DocumentDB (compatible avec MongoDB). Pour réaliser ce tutoriel, vous passerez par les étapes suivantes :
-
Configurez votre cluster Amazon DocumentDB, connectez-vous-y, et activez les flux de modifications sur ce cluster.
-
Créez votre fonction Lambda, et configurez votre cluster Amazon DocumentDB en tant que source d’événements pour votre fonction.
-
Testez la configuration en insérant des éléments dans votre base de données Amazon DocumentDB.
Créer le cluster Amazon DocumentDB
-
Ouvrez la console Amazon DocumentDB
. Sous Clusters, sélectionnez Créer. -
Créez un cluster avec la configuration suivante :
-
Pour Type de cluster, choisissez Cluster basé sur l’instance. Il s’agit de l’option par défaut.
-
Sous Configuration du cluster, assurez-vous que la Version du moteur 5.0.0 est sélectionnée. Il s’agit de l’option par défaut.
-
Sous Configuration de l’instance :
-
Pour Classe d’instance de base de données, sélectionnez Classes à mémoire optimisée. Il s’agit de l’option par défaut.
-
Pour Nombre d’instances de réplica ordinaire, choisissez 1.
-
Pour Classe de l’instance, utilisez la sélection par défaut.
-
-
Sous Authentification, saisissez un nom d’utilisateur pour l’utilisateur principal, puis choisissez Autogéré. Saisissez un mot de passe, puis confirmez-le.
-
Conservez tous les autres paramètres par défaut.
-
-
Choisissez Créer un cluster.
Création d’un secret dans Secrets Manager
Pendant qu’Amazon DocumentDB crée votre cluster, créez un secret AWS Secrets Manager pour stocker les informations d’identification de votre base de données. Vous fournirez ce secret lors de la création du mappage des sources d’événements Lambda lors d’une étape ultérieure.
Pour créer le secret dans Secrets Manager
-
Ouvrez la console Secrets Manager
et choisissez Stocker un nouveau secret. -
Pour Choisir le type de secret, sélectionnez les options suivantes :
-
Sous Informations de base :
-
Type de secret : informations d’identification pour votre base de données Amazon DocumentDB
-
Sous Informations d’identification, saisissez les mêmes nom d’utilisateur et mot de passe que vous avez utilisés pour créer votre cluster Amazon DocumentDB.
-
Base de données : choisissez votre cluster Amazon DocumentDB.
-
Choisissez Suivant.
-
-
-
Pour Configurer le secret, choisissez les options suivantes :
-
Nom du secret:
DocumentDBSecret -
Choisissez Suivant.
-
-
Choisissez Suivant.
-
Choisissez Stocker.
-
Actualisez la console pour vérifier que vous avez correctement enregistré le secret
DocumentDBSecret.
Notez l’ARN du secret. Vous en aurez besoin dans une étape ultérieure.
Connexion au cluster
Se connecter à votre cluster Amazon DocumentDB avec AWS CloudShell
-
Dans la console de gestion Amazon DocumentDB, sous Clusters, recherchez le cluster que vous avez créé. Sélectionnez votre cluster en cochant la case en regard de celui-ci.
-
Choisissez Se connecter au cluster. L’écran Exécuter la commande de CloudShell s’affiche.
-
Dans le champ Nom du nouvel environnement, saisissez un nom unique, comme « test », puis choisissez Créer et exécuter.
-
Lorsque vous y êtes invité, saisissez votre mot de passe. Lorsque l’invite affiche
rs0 [direct: primary] <env-name>>, vous êtes connecté avec succès à votre cluster Amazon DocumentDB.
Activation des flux de modifications
Pour ce tutoriel, vous allez suivre les modifications apportées à la collection products de la base de données docdbdemo dans votre cluster Amazon DocumentDB. Pour ce faire, vous activez les flux de modifications.
Pour créer une nouvelle base de données dans votre cluster
-
Exécutez la commande suivante pour créer une nouvelle base de données appelée
docdbdemo:use docdbdemo -
Dans la fenêtre de terminal, utilisez la commande suivante pour insérer un enregistrement dans
docdbdemo:db.products.insertOne({"hello":"world"})Elle doit générer une sortie comme suit :
{ acknowledged: true, insertedId: ObjectId('67f85066ca526410fd531d59') } -
Activez ensuite les flux de modifications sur la collection
productsde la base de donnéesdocdbdemoà l’aide de la commande suivante :db.adminCommand({modifyChangeStreams: 1, database: "docdbdemo", collection: "products", enable: true});Vous devriez obtenir un résultat du type suivant :
{ "ok" : 1, "operationTime" : Timestamp(1680126165, 1) }
Création de points de terminaison d’un VPC d’interface
Créez ensuite des points de terminaison d’un VPC d’interface pour vous assurer que Lambda et Secrets Manager (utilisé plus tard pour stocker nos informations d’identification d’accès au cluster) peuvent se connecter à votre VPC par défaut.
Pour créer des points de terminaison d’un VPC d’interface
-
Ouvrez la console VPC
. Dans le menu de gauche, sous Cloud privé virtuel, choisissez Points de terminaison. -
Choisissez Créer un point de terminaison. Créez un point de terminaison avec la configuration suivante :
-
Pour Balise de nom, saisissez
lambda-default-vpc. -
Pour Catégorie de service, choisissez Services AWS.
-
Pour Services, saisissez
lambdadans la zone de recherche. Choisissez le service au formatcom.amazonaws.<region>.lambda. -
Pour VPC, choisissez le VPC dans lequel se trouve votre cluster Amazon DocumentDB. Il s’agit généralement du VPC par défaut.
-
Pour Sous-réseaux, cochez les cases à côté de chaque zone de disponibilité. Choisissez l’ID de sous-réseau correct pour chaque zone de disponibilité.
-
Pour Type d’adresse IP, sélectionnez IPv4.
-
Pour Groupes de sécurité, choisissez le groupe de sécurité utilisé par votre cluster Amazon DocumentDB. Il s’agit généralement du groupe de sécurité
default. -
Conservez tous les autres paramètres par défaut.
-
Choisissez Créer un point de terminaison.
-
-
Choisissez à nouveau Créer un point de terminaison. Créez un point de terminaison avec la configuration suivante :
-
Pour Balise de nom, saisissez
secretsmanager-default-vpc. -
Pour Catégorie de service, choisissez Services AWS.
-
Pour Services, saisissez
secretsmanagerdans la zone de recherche. Choisissez le service au formatcom.amazonaws.<region>.secretsmanager. -
Pour VPC, choisissez le VPC dans lequel se trouve votre cluster Amazon DocumentDB. Il s’agit généralement du VPC par défaut.
-
Pour Sous-réseaux, cochez les cases à côté de chaque zone de disponibilité. Choisissez l’ID de sous-réseau correct pour chaque zone de disponibilité.
-
Pour Type d’adresse IP, sélectionnez IPv4.
-
Pour Groupes de sécurité, choisissez le groupe de sécurité utilisé par votre cluster Amazon DocumentDB. Il s’agit généralement du groupe de sécurité
default. -
Conservez tous les autres paramètres par défaut.
-
Choisissez Créer un point de terminaison.
-
Ceci termine la partie de ce tutoriel concernant la configuration du cluster.
Créer le rôle d’exécution
Dans les étapes suivantes, vous allez créer votre fonction Lambda. Tout d’abord, vous devez créer le rôle d’exécution qui donne à votre fonction l’autorisation d’accéder à votre cluster. Vous faites cela en créant d’abord une politique IAM, puis en associant cette politique à un rôle IAM.
Pour créer une politique IAM
-
Ouvrez la page Politiques
dans la console IAM et choisissez Créer une politique. -
Choisissez l’onglet JSON. Dans la politique suivante, remplacez l'ARN de la ressource Secrets Manager dans la dernière ligne de l'instruction par votre ARN secret précédent et copiez la politique dans l'éditeur.
-
Choisissez Suivant : Balises, puis Suivant : Vérification.
-
Pour Nom, saisissez
AWSDocumentDBLambdaPolicy. -
Sélectionnez Create policy (Créer une politique).
Pour créer le rôle IAM
-
Ouvrez la page Rôles
dans la console IAM et choisissez Créer un rôle. -
Pour Sélectionner une entité de confiance, choisissez les options suivantes :
-
Type d’entité sécurisée – Service AWS
-
Service ou cas d’utilisation : Lambda
-
Choisissez Suivant.
-
-
Pour Ajouter des autorisations, choisissez la politique
AWSDocumentDBLambdaPolicyque vous venez de créer, ainsi que le rôleAWSLambdaBasicExecutionRolepour donner à votre fonction des autorisations d’écriture dans Amazon CloudWatch Logs. -
Choisissez Suivant.
-
Pour le Nom du rôle, saisissez
AWSDocumentDBLambdaExecutionRole. -
Choisissez Créer un rôle.
Créer la fonction Lambda
Ce tutoriel utilise l’environnement d’exécution Python 3.13, mais nous avons également fourni des exemples de fichiers de code pour d’autres exécutions. Vous pouvez sélectionner l’onglet dans la zone suivante pour voir le code d’exécution qui vous intéresse.
Le code reçoit une entrée d’événement Amazon DocumentDB et traite le message qu’elle contient.
Pour créer la fonction Lambda
-
Ouvrez la page Functions
(Fonctions) de la console Lambda. -
Choisissez Créer une fonction.
-
Choisissez Créer à partir de zéro.
-
Sous Basic information (Informations de base), procédez comme suit :
-
Sous Nom de la fonction, saisissez
ProcessDocumentDBRecords. -
Pour Environnement d’exécution, sélectionnez Python 3.13.
-
Pour Architecture, choisissez x86_64.
-
-
Dans l’onglet Modifier le rôle d’exécution par défaut, procédez comme suit :
-
Ouvrez l’onglet, puis choisissez Utiliser un rôle existant.
-
Sélectionnez le
AWSDocumentDBLambdaExecutionRoleque vous avez créé précédemment.
-
-
Choisissez Créer une fonction.
Pour déployer le code de la fonction
-
Choisissez l’onglet Python dans la zone suivante et copiez le code.
-
Dans le volet Code source de la console Lambda, collez le code dans l’éditeur de code, en remplaçant le code créé par Lambda.
-
Dans la section DÉPLOYER, choisissez Déployer pour mettre à jour le code de votre fonction :
Création du mappage des sources d’événements Lambda
Créez le mappage des sources d’événements qui associe votre flux de modifications Amazon DocumentDB à votre fonction Lambda. Après avoir créé ce mappage des sources d’événements, AWS Lambda commence immédiatement à interroger le flux.
Pour créer le mappage des sources d’événements
-
Ouvrez la page Fonctions
de la console Lambda. -
Choisissez la fonction
ProcessDocumentDBRecordsque vous avez créée précédemment. -
Choisissez l’onglet Configuration, puis Déclencheurs dans le menu de gauche.
-
Choisissez Add trigger (Ajouter déclencheur).
-
Sous Configuration du déclencheur, pour la source, sélectionnez Amazon DocumentDB.
-
Créez le mappage des sources d’événements avec la configuration suivante :
-
Cluster Amazon DocumentDB : choisissez le cluster que vous avez créé précédemment.
-
Nom de la base de données : docdbdemo
-
Nom de la collection : products
-
Taille de lot: 1
-
Position de départ : dernière
-
Authentification : BASIC_AUTH
-
Clé Secrets Manager : choisissez le secret de votre cluster Amazon DocumentDB. Son nom ressemblera à
rds!cluster-12345678-a6f0-52c0-b290-db4aga89274f. -
Fenêtre de lot: 1
-
Configuration complète du document : UpdateLookup
-
-
Choisissez Ajouter. La création de votre mappage des sources d’événements peut prendre quelques minutes.
Test de votre fonction
Attendez que le mappage des sources d’événements atteigne l’état Activé. Cela peut prendre plusieurs minutes. Testez ensuite la configuration de bout en bout en insérant, mettant à jour et supprimant des enregistrements de base de données. Avant de commencer :
-
Reconnectez-vous à votre cluster Amazon DocumentDB dans votre environnement CloudShell.
-
Exécutez la commande suivante pour vous assurer que vous utilisez la base de données
docdbdemo:use docdbdemo
Insérez un enregistrement dans la collection products de la base de donnée docdbdemo :
db.products.insertOne({"name":"Pencil", "price": 1.00})
Vérifiez que votre fonction a bien traité cet événement en consultant les journaux CloudWatch Logs. Vous devriez voir une entrée de journal comme celle-ci :
Mettez à jour l’enregistrement que vous venez d’insérer à l’aide de la commande suivante :
db.products.updateOne( { "name": "Pencil" }, { $set: { "price": 0.50 }} )
Vérifiez que votre fonction a bien traité cet événement en consultant les journaux CloudWatch Logs. Vous devriez voir une entrée de journal comme celle-ci :
Supprimez l’enregistrement que vous venez de mettre à jour à l’aide de la commande suivante :
db.products.deleteOne( { "name": "Pencil" } )
Vérifiez que votre fonction a bien traité cet événement en consultant les journaux CloudWatch Logs. Vous devriez voir une entrée de journal comme celle-ci :
Résolution des problèmes
Si vous ne voyez aucun événement de base de données dans les journaux CloudWatch de votre fonction, vérifiez les points suivants :
-
Assurez-vous que le mappage des sources d’événements Lambda (également appelé déclencheur) est à l’état Activé. La création de mappages des sources d’événements peut prendre plusieurs minutes.
-
Si le mappage des sources d’événements est Activé, mais que les événements de base de données ne s’affichent toujours pas dans CloudWatch :
-
Assurez-vous que le Nom de la base de données dans le mappage des sources d’événements est défini sur
docdbdemo.
-
Vérifiez si le champ Résultat du dernier traitement du mappage des sources d'événements contient le message « PROBLEM: Connection error. Your VPC must be able to connect to Lambda and STS, as well as Secrets Manager if authentication is required. » Si cette erreur s’affiche, assurez-vous que vous avez créé les points de terminaison de l’interface VPC de Lambda et Secrets Manager, et que les points de terminaison utilisent le même VPC et les mêmes sous-réseaux que ceux utilisés par votre cluster Amazon DocumentDB.
-
Nettoyage de vos ressources
Vous pouvez maintenant supprimer les ressources que vous avez créées pour ce didacticiel, sauf si vous souhaitez les conserver. En supprimant des ressources AWS que vous n’utilisez plus, vous évitez les frais superflus pour votre Compte AWS.
Pour supprimer la fonction Lambda
-
Ouvrez la page Functions (Fonctions)
de la console Lambda. -
Sélectionnez la fonction que vous avez créée.
-
Choisissez Actions, Delete.
-
Saisissez
confirmdans la zone de saisie de texte et choisissez Delete (Supprimer).
Pour supprimer le rôle d’exécution
-
Ouvrez la page Roles (Rôles)
de la console IAM. -
Sélectionnez le rôle d’exécution que vous avez créé.
-
Sélectionnez Delete (Supprimer).
-
Saisissez le nom du rôle dans le champ de saisie de texte et choisissez Delete (Supprimer).
Pour supprimer les points de terminaison d’un VPC
-
Ouvrez la console VPC
. Dans le menu de gauche, sous Cloud privé virtuel, choisissez Points de terminaison. -
Sélectionnez les points de terminaison que vous avez créés.
-
Choisissez Actions, Delete VPC endpoints (Supprimer le point de terminaison d’un VPC).
-
Saisissez
deletedans le champ de saisie de texte. -
Sélectionnez Delete (Supprimer).
Pour supprimer le cluster Amazon DocumentDB
-
Ouvrez la console Amazon DocumentDB
. -
Sélectionnez le cluster Amazon DocumentDB que vous avez créé pour ce tutoriel et désactivez la protection contre la suppression.
-
Dans la page principale Clusters, choisissez à nouveau votre cluster Amazon DocumentDB.
-
Sélectionnez Actions, Supprimer.
-
Pour Créer un instantané final du cluster, sélectionnez Non.
-
Saisissez
deletedans le champ de saisie de texte. -
Sélectionnez Delete (Supprimer).
Pour supprimer le secret dans Secrets Manager
-
Ouvrez la console Secrets Manager
. -
Sélectionnez le secret que vous avez créé pour ce tutoriel.
-
Choisissez Actions, Supprimer le secret.
-
Choisissez Schedule deletion (Planifier la suppression).