Remplissage d'une table DynamoDB basée sur un fichier CSV
Nous avons précédemment détaillé les étapes nécessaires à la création d’un calendrier de vacances et avons étudié comment nous pouvons facilement télécharger toutes vos vacances à la fois . Cependant, jusqu’à présent, nous n’avons travaillé qu’avec JSON, un format facile à comprendre pour Node.js, mais pas nécessairement le plus intuitif pour un lecteur humain. Pour éviter les erreurs, vous souhaiterez peut-être utiliser un fichier CSV avec des en-têtes dédiés pour vos éléments. Dans cet article de blog, nous allons vous montrer comment configurer une fonction Lambda capable d'analyser un tableau similaire à la capture d'écran ci-dessous.
1.Prerequisites
Pour commencer, vous devrez déployer la plupart des conditions préalables détaillées dans deux articles de blog liés en haut de cet article. Nous ne verrons pas comment créer une DynamoDB ou configurer une fonction Lambda capable de la lire. Ces deux étapes sont nécessaires au bon fonctionnement de la solution de calendrier de vacances.
Vous devrez également préparer un package de déploiement pour. Lambda. Nous devrons le faire car malheureusement, Node.js ne dispose pas d’un moyen simple d’analyser les fichiers CSV. Nous allons donc utiliser un logiciel externe pour nous aider. Pour ce billet de blog, j’ai choisi d’utiliser csvtojson, mais de nombreux autres modules sont disponibles et les étapes pour tout configurer seront très similaires.
Si vous êtes déjà familiarisé avec l’installation d’un paquet de nœuds, n'hésitez pas. passez à la section de code ci-dessous, sinon veuillez suivre.
Pour commencer, installez Node.js sur votre ordinateur local. Vous pouvez trouver les instructions pour le faire ici. Il suffit de saisir la version la plus récente et d’exécuter le programme d’installation. Cela installera également npm, ce dont nous avons besoin pour configurer le paquet csvtojson. Une fois le noeud installé, ouvrez un terminal en ligne de commande et tapez npm -v. Vous devriez voir la version de npm que vous avez installée.
Cela signifie que tout ce dont nous avons besoin est installé et que nous pouvons continuer. Si vous obtenez un message d'erreur, essayez de suivre à nouveau les étapes de l'installation.
Une fois que tout fonctionne, accédez à un nouveau dossier et exécutez la commande suivante: npm init -y. Vous devriez voir quelque chose de similaire à l'écran suivant.
Cela va tout configurer pour que vous puissiez exécuter la commande suivante qui téléchargera réellement le paquet csvtojson. Il suffit de lancer: npm install csvtojson
Ceci téléchargera le package csvtojson et vous pourrez désormais utiliser l'explorateur de fichiers pour accéder au dossier que vous avez précédemment configuré. Vous devriez maintenant voir un dossier nommé node_modules, allez-y, créez un nouveau fichier et nommez-le index.js.
Sélectionnez tout sauf le dossier .bin et archivez-le dans un fichier zip. Ce sera votre package de déploiement et il devrait maintenant être prêt à être téléchargé sur Lambda.
2.Téléchargement d'un fichier CSV de S3
Maintenant que toutes les étapes de base sont en place, accédez à AWS Lambda et sélectionnez «créer une nouvelle fonction». Donnez-lui un nom, sélectionnez Node.js 6.10 et utilisez un rôle ayant accès à S3 et à DynamoDB. Si vous avez besoin d’aide pour créer un tel rôle, consultez notre article sur la gestion de votre calendrier de vacances .
Lorsque tout est en ordre, créez la fonction et sous Type d’entrée de code, sélectionnez télécharger un. fichier zip. Téléchargez le package de déploiement contenant le package csvtojson et votre fichier index.js vide.
Une fois le package chargé, vous pouvez ouvrir le fichier index.js et commencer à ajouter du code. Pour la plupart, nous allons réutiliser le code que nous avons précédemment écrit pour télécharger des données à partir d'un fichier JSON. Cependant, quelques petites modifications nous permettent de diffuser chaque ligne du fichier CSV et de le convertir au format JSON afin que nous puissions le transférer dans DynamoDB.
Nous avions précédemment utilisé la méthode S3 getObject pour sélectionner des entrées dans notre compartiment S3. . Cette fois-ci, nous allons utiliser getObject et créer un flux de lecture. Cela nous permettra de diffuser des données brutes vers l’objet csvtojson qui analysera chaque ligne au format JSON. Enfin, nous utiliserons la même fonction addData que celle utilisée précédemment pour mettre à jour notre table DynamoDB.
Voici le code dans son intégralité. Collez-le simplement dans le fichier d'index, enregistrez la fonction et vous devriez être prêt à tester le téléchargement d'un fichier CSV.
const AWS = require ('aws-sdk'); const s3 = new AWS.S3 (); const docClient = new AWS.DynamoDB.DocumentClient ({région: 'us-east-1'}); exports.handler = (event, context) => { const bucketName = process.env.bucketName; const keyName = process.env.key; const params = {Bucket: bucketName, clé: keyName}; const csv = require ('csvtojson'); // récupère le fichier csv de s3 const s3Stream = s3.getObject (params) .createReadStream () csv (). fromStream (s3Stream) .on ('data', (row) => { // lit chaque ligne let jsonContent = JSON.parse (ligne); console.log (JSON.stringify (jsonContent)); // insère chaque ligne dans DynamoDB laissez paramsToPush = { TableName: process.env.tableName, Article:{ "dateStart": nouvelle date (jsonContent.holidayStart) .getTime (), "dateEnd": nouvelle date (jsonContent.holidayEnd) .getTime (), "raison": jsonContent.reason, "holidayStart": jsonContent.holidayStart, "holidayEnd": jsonContent.holidayEnd } }; addData (paramsToPush); }); }; fonction addData (params) { console.log ("Ajout d'un nouvel élément basé sur:"); docClient.put (paramètres, fonction (err, données) { si (err) { console.error ("Impossible d'ajouter un élément. Erreur JSON:", JSON.stringify (err, null, 2)); } autre { console.log ("Article ajouté:", JSON.stringify (params.Item, null, 2)); } }); }
Une fois que vous avez enregistré ce code dans votre fonction, assurez-vous de créer les 3 variables ci-dessous et de les orienter vers les bonnes ressources. Vous devriez maintenant être prêt à télécharger votre fichier JSON dans S3. Vous pouvez bien sûr configurer un déclencheur sur le compartiment pour tout nouvel objet ou simplement exécuter cette fonction avec un événement test vide.
Nous espérons que cela vous aidera à mieux gérer votre calendrier de vacances DynamoDB et à importer facilement les modifications. Pour obtenir de l'aide sur la configuration de cette solution ou sur une rubrique associée à Amazon Connect, veuillez appeler Demandez une démonstration Amazon Connect.
Source link