Utilisation d’AWS DynamoDB dans une application Node.js

Points clés à retenir

  • DynamoDB est une puissante base de données NoSQL proposée par AWS qui peut gérer de grandes quantités de données diverses sans compromettre les performances, la durabilité ou la fiabilité.
  • Pour démarrer avec DynamoDB dans Node.js, vous devez installer le package client-dynamodb à partir de aws-sdk et configurer vos informations d’identification.
  • DynamoDB vous permet de créer facilement des tables, d’écrire et de lire des données, de mettre à jour et de supprimer des enregistrements à l’aide des méthodes et paramètres du client. Il offre flexibilité et évolutivité pour un développement d’applications efficace.

Une grande partie du développement d’applications modernes nécessite un mélange de langages de programmation robustes et de bases de données puissantes.

L’une des solutions proposées par Amazon Web Services (AWS) est DynamoDB, un outil qui peut révolutionner la gestion de vos données. Grâce à lui, vous pouvez rapidement provisionner une base de données pour gérer de grandes quantités de données diverses.

Qu’est-ce que DynamoDB ?

AWS propose des services pour différents besoins de bases de données, comme Amazon RDS pour les bases de données relationnelles et DocumentDB pour les bases de données de documents telles que MongoDB. DynamoDB est une base de données NoSQL permettant de stocker des données dans un format clé-valeur.

DynamoDB peut gérer de grandes quantités de données sur une infrastructure distribuée sans compromettre les performances, la durabilité ou la fiabilité. Il offre un modèle flexible, vous permettant de stocker et d’interroger facilement des données, qu’elles soient structurées ou non structurées.

Vous pouvez utiliser DynamoDB comme base de données pour différents types d’applications. Vous pouvez y accéder directement depuis la console Web AWS et par programme via AWS-CLI, ou depuis des applications Web utilisant le AWS-SDK.

Premiers pas avec DynamoDB dans Node.js

Il existe de nombreux outils pour créer des API backend dans Node.js et vous êtes libre de choisir la base de données de votre API lorsque vous travaillez avec l’un de ces outils. Node.js offre une large prise en charge des services externes, notamment des bases de données comme AWS DynamoDB.

Tout ce dont vous avez besoin pour accéder à un service AWS à partir de votre application Node est le package client aws-sdk pour ce service. Par exemple, pour accéder à DynamoDB, vous devez installer le package client-dynamodb sous aws-sdk.

Exécutez cette commande dans le répertoire de votre projet pour installer le package :

 npm install @aws-sdk/client-dynamodb

Après avoir installé aws-sdk/client-dynamodb dans votre projet Node.js, vous devez ajouter la région de votre table DynamoDB à la configuration avant d’interagir avec elle. Vous ferez cela lors de l’initialisation du client DynamoDB.

Si vous avez déjà installé et utilisé AWS-CLI sur votre ordinateur, vous avez probablement déjà défini les informations d’identification AWS dans votre environnement et le SDK obtiendra automatiquement vos valeurs de l’environnement.

Mais si ce n’est pas le cas, vous pouvez vous rendre au Gestion de l’accès aux identités AWS (IAM) service dans votre console et créez un nouvel utilisateur. Après avoir créé l’utilisateur, vous pouvez obtenir un identifiant de clé d’accès et une clé secrète, qui sont vos informations d’identification personnelles.

Ajoutez ces informations d’identification à votre environnement en exécutant les commandes de terminal suivantes pour votre plateforme :

Sous Unix, Linux ou macOS :

 export AWS_ACCESS_KEY_ID='your access key ID'
export AWS_SECRET_ACCESS_KEY='you secret access key'

Sous Windows (CMD) :

 set AWS_ACCESS_KEY_ID='your access key ID'
set AWS_SECRET_ACCESS_KEY='you secret access key'

Sous Windows (PowerShell) :

 $env:AWS_ACCESS_KEY_ID='your access key ID'
$env:AWS_SECRET_ACCESS_KEY='you secret access key'

Ensuite, de retour dans votre projet Node.js, créez un nouveau fichier et nommez-le dynamodb.js. Dans ce fichier, instanciez un nouveau client AWS DynamoDB à l’aide du code suivant :

 const { DynamoDB } = require('@aws-sdk/client-dynamodb')

const region = "us-east-1"

const client = new DynamoDB({ region })

Assez simple! AWS s’assure que vous n’exposez aucune de vos informations d’identification de sécurité dans votre code. Ainsi, pendant que le code ci-dessus tente de créer le client, il lit d’abord la clé d’accès et la clé secrète de votre environnement.

Le client nouvellement créé vous permet d’effectuer diverses opérations, comme la création de tables et la lecture et l’écriture de données.

DynamoDB est sans schéma, tout comme les autres bases de données NoSQL, vous pouvez donc toujours ajouter de nouveaux attributs (champs) à une table à tout moment. C’est pourquoi il vous suffit d’ajouter des attributs qui serviront de clés primaires à une table DynamoDB lors de sa création.

Découvrez le code suivant qui crée une nouvelle table (Client) dans DynamoDB :

 const createCustomerTable = async () => {
    const params = {
        TableName: "Customer",
        AttributeDefinitions: [
            {
                AttributeName: "Email",
                AttributeType: "S"
            },
        ],
        KeySchema: [
            {
                AttributeName: "Email",
                KeyType: "HASH"
            }
        ],
        ProvisionedThroughput: {
            ReadCapacityUnits: 5,
            WriteCapacityUnits: 5
        }
    };

    client.createTable(params, (err, data) => {
        if (err) {
           console.log(err);
        } else {
            console.log(data);
        }
    });
}

createCustomerTable();

Le champ AttributeDefinitions est l’endroit où vous définissez les attributs clés de la table et leurs types. L’attribut Email ici est de type S, ce qui signifie que le champ attend une chaîne comme valeur. Les trois types d’attributs disponibles sont S, N et B (Chaîne, Nombre et Binaire).

Vous avez besoin du KeySchema pour définir des clés primaires qui permettent de rechercher et d’organiser rapidement les éléments. DynamoDB s’attend à ce que les attributs que vous ajoutez lors de la création de la table soient des attributs clés, donc Email est la clé primaire ici. Vous devez l’ajouter au KeySchema et spécifier son KeyType (HASH).

L’autre valeur KeyType disponible est RANGE qui est utilisée pour les clés de tri. Les clés de tri sont utiles dans les cas où vous pourriez avoir des données avec les mêmes clés HASH dans un tableau et que vous souhaitez les regrouper en fonction de données supplémentaires telles que la date ou la couleur, vous pouvez faire des données supplémentaires une clé RANGE.

Le troisième paramètre important dans le code ci-dessus est le ProvisionedThroughput. C’est ici que vous définissez le nombre de lectures et d’écritures que vous souhaitez que DynamoDb autorise sur la table par seconde.

Lorsque vous exécutez le code ci-dessus, vous devriez obtenir un résultat qui ressemble à ceci :

Si vous consultez le tableau de bord de vos tables DynamoDB dans la console Web, vous verrez la table soit toujours en cours de provisionnement, soit avec un statut déjà actif.

Tenez toujours compte des besoins de votre application lorsque vous spécifiez ReadCapacityUnits et WriteCapacityUnits, car une valeur inappropriée peut entraîner des problèmes de performances ou des coûts de facturation élevés sur votre compte.

Une fois que vous êtes sûr que la table est déjà active, vous pouvez y effectuer des opérations CRUD.

Voici quelques exemples de code qui vous montrent comment écrire et lire des données à partir de la table Customer.

  • Ajoutez des données au tableau. Pour écrire des données dans une table, vous avez besoin de la méthode putItem du client. Le code ci-dessous ajoute un nouveau client à la table Customer dans DynamoDB.
     const createCustomer = async (customer) => {
        const params = {
            TableName: "Customer",
            Item: customer
        }

        client.putItem(params, (err, data) => {
            if (err) {
               console.error(err)
            } else {
                console.log(data)
            }
        })
    }

    const customerData = {
        Name: { "S": "Timilehin O." },
        Email: { "S": "[email protected]" },
        Age: { "N": "18"},
        Country: { "S": "Nigeria" }
    }

    createCustomer(customerData)

    L’objet params contient le TableName qui est la table dans laquelle vous écrivez et le champ Item qui contient les données que vous ajoutez avec leurs types spécifiques. Notez les nouveaux champs qui n’étaient pas initialement dans le tableau. C’est ainsi que DynamoDB fonctionne de manière flexible. Vous pouvez afficher les données de votre base de données dans votre console comme ceci :

  • Lisez les données du tableau. DynamoDB vous permet de lire les données de différentes manières. La fonction d’analyse du SDK lit la table entière, tandis que getItem ne lit que des données spécifiques. Par exemple, le code ci-dessous récupère tous les clients :
     const getAllCustomers = async () => {
        const params = {
            TableName: "Customer"
        }

        const customers = await client.scan(params)
        console.log(customers)
    }

    Alors que le code suivant obtient l’utilisateur par la valeur email :

     const getCustomerByEmail = async (email) => {
        const params = {
            TableName: "Customer",
            Key: {
                Email: { "S": email }
            }
        }

        const customer = await client.getItem(params)
        console.log(customer)
    }

    getCustomerByEmail("[email protected]")

  • Mettez à jour les données dans le tableau. Pour mettre à jour les données existantes dans une table, utilisez la fonction updateItem du SDK. Le code suivant montre comment mettre à jour un enregistrement spécifique :
      const updateCustomerLocation = async (email, age) => {
         const params = {
             TableName: "Customer",
             Key: {
                 Email: { "S": email }
             },
             UpdateExpression: "SET Age = :newAge",
             ExpressionAttributeValues: {
                 ':newAge': { "N": age }
             },
             ReturnValues: "ALL_NEW"
         }

         const updatedCustomer = await client.updateItem(params)
         console.log(updatedCustomer.Attributes)
     }

    Vous pouvez également choisir de rendre votre fonction dynamique en créant des expressions de mise à jour à partir de vos données de mise à jour. La flexibilité de DynamoDB vous permet de gérer chaque opération en fonction de vos besoins.

  • Supprimez les données du tableau. Pour supprimer un enregistrement de DynamoDB, vous avez besoin de la fonction deleteItem et de la clé de l’enregistrement particulier. Voici comment le mettre en œuvre :
     const deleteCustomer = async (email) => {
        const params = {
            TableName: "Customer",
            Key: {
                Email: { "S": email }
            }
        }

        client.deleteItem(params, (err, data) => {
            if (err) {
               console.error(err)
            } else {
                console.log("Customer deleted successfully")
            }
        })
    }

    deleteCustomer("[email protected]")

  • Créer des applications efficaces avec DynamoDB

    Amazon Web Services continue de prospérer. Il fournit une plate-forme accessible que vous pouvez utiliser pour fournir des solutions numériques efficaces et sécurisées. DynamoDB est le choix idéal si vous recherchez une base de données à exécuter sans vous soucier de l’infrastructure ou de la sécurité.

    Vous disposez désormais de tout ce dont vous avez besoin pour démarrer avec DynamoDB dans Node.js, et vous pouvez choisir en toute confiance DynamoDB pour votre prochaine application Node.js.