Création d'une application pour envoyer des données à DynamoDB - AWS SDK for JavaScript

Le guide de API référence AWS SDK for JavaScript V3 décrit en détail toutes les API opérations de la AWS SDK for JavaScript version 3 (V3).

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Création d'une application pour envoyer des données à DynamoDB

Ce didacticiel Node.js multiservice explique comment créer une application permettant aux utilisateurs de soumettre des données à une table Amazon DynamoDB. Cette application utilise les services suivants :

  • AWS Identity and Access Management(IAM) et Amazon Cognito pour les autorisations et autorisations.

  • Amazon DynamoDB (DynamoDB) pour créer et mettre à jour les tables.

  • Amazon Simple Notification Service (Amazon SNS) pour avertir l'administrateur de l'application lorsqu'un utilisateur met à jour le tableau.

Le scénario

Dans ce didacticiel, une page HTML fournit une application basée sur un navigateur pour envoyer des données à une table Amazon DynamoDB. L'application utilise Amazon SNS pour avertir l'administrateur de l'application lorsqu'un utilisateur met à jour le tableau.

Relation entre l'interface du navigateur, le SDK et les AWS services dans l'application de soumission de données.

Prérequis

Effectuez les tâches préalables suivantes :

  • Configurez l'environnement du projet pour exécuter ces TypeScript exemples de nœuds et installez les modules requis AWS SDK for JavaScript et tiers. Suivez les instructions indiquées sur GitHub.

  • Créez un fichier de configurations partagé avec vos informations d'identification utilisateur. Pour plus d'informations sur la fourniture d'un fichier d'informations d'identification partagé, consultez la section Fichiers de configuration et d'informations d'identification partagés dans le Guide de référence AWS des SDK et des outils.

Créez les AWS ressources

Cette application nécessite les ressources suivantes :

  • AWS Identity and Access Management(IAM) Rôle d'utilisateur Amazon Cognito non authentifié avec les autorisations suivantes :

    • sns:Publish

    • dynamodb : PutItem

  • Une table DynamoDB.

Vous pouvez créer ces ressources manuellement dans la AWS console, mais nous vous recommandons de les approvisionner en suivant les AWS CloudFormation instructions de ce didacticiel.

Créez les AWS ressources en utilisant AWS CloudFormation

AWS CloudFormationvous permet de créer et de provisionner des déploiements AWS d'infrastructure de manière prévisible et répétée. Pour plus d’informations sur AWS CloudFormation, consultez le AWS CloudFormationGuide de l’utilisateur .

Pour créer la AWS CloudFormation pile à l'aide de AWS CLI :

  1. Installez et configurez en AWS CLI suivant les instructions du guide de l'AWS CLIutilisateur.

  2. Créez un fichier nommé setup.yaml dans le répertoire racine du dossier de votre projet et GitHubcopiez-y le contenu.

    Note

    Le AWS CloudFormation modèle a été généré à l'aide du modèle AWS CDK disponible ici GitHub. Pour en savoir plus sur le AWS CDK, veuillez consulter le Guide du développeur AWS Cloud Development Kit (AWS CDK).

  3. Exécutez la commande suivante depuis la ligne de commande, en remplaçant STACK_NAME par un nom unique pour la pile et REGION dans votre région. AWS

    Important

    Le nom de la pile doit être unique au sein d'une AWS région et d'un AWS compte. Vous pouvez spécifier jusqu'à 128 caractères. Les chiffres et les tirets sont autorisés.

    aws cloudformation create-stack --stack-name STACK_NAME --template-body file://setup.yaml --capabilities CAPABILITY_IAM --region REGION

    Pour plus d'informations sur les paramètres de create-stack commande, consultez le guide de référence des AWS CLI commandes et le guide de AWS CloudFormation l'utilisateur.

    Pour afficher les ressources créées, ouvrez AWS CloudFormation dans la console AWS de gestion, choisissez la pile, puis sélectionnez l'onglet Ressources.

  4. Lorsque la pile est créée, utilisez le AWS SDK for JavaScript pour remplir la table DynamoDB, comme décrit dans. Remplissage du tableau

Remplissage du tableau

Pour remplir le tableau, créez d'abord un répertoire nommélibs, puis créez un fichier nommédynamoClient.js, puis collez-y le contenu ci-dessous. Remplacez REGION par votre AWS région et remplacez IDENTITY_POOL_ID par un identifiant de pool d'identités Amazon Cognito. Cela crée l'objet client DynamoDB.

import { CognitoIdentityClient } from "@aws-sdk/client-cognito-identity"; import { fromCognitoIdentityPool } from "@aws-sdk/credential-provider-cognito-identity"; import { DynamoDBClient } from "@aws-sdk/client-dynamodb"; const REGION = "REGION"; const IDENTITY_POOL_ID = "IDENTITY_POOL_ID"; // An Amazon Cognito Identity Pool ID. // Create an Amazon DynaomDB service client object. const dynamoClient = new DynamoDBClient({ region: REGION, credentials: fromCognitoIdentityPool({ client: new CognitoIdentityClient({ region: REGION }), identityPoolId: IDENTITY_POOL_ID, }), }); export { dynamoClient };

Ce code est disponible ici GitHub.

Ensuite, créez un dynamoAppHelperFiles dossier dans le dossier de votre projet, créez-y un fichier update-table.js et GitHubcopiez-y le contenu.

// Import required AWS SDK clients and commands for Node.js import { PutItemCommand } from "@aws-sdk/client-dynamodb"; import { dynamoClient } from "../libs/dynamoClient.js"; // Set the parameters export const params = { TableName: "Items", Item: { id: { N: "1" }, title: { S: "aTitle" }, name: { S: "aName" }, body: { S: "aBody" }, }, }; export const run = async () => { try { const data = await dynamoClient.send(new PutItemCommand(params)); console.log("success"); console.log(data); } catch (err) { console.error(err); } }; run();

Exécutez la commande suivante depuis la ligne de commande.

node update-table.js

Ce code est disponible ici GitHub.

Création d'une page frontale pour l'application

Vous créez ici la page du navigateur HTML frontal pour l'application.

Créez un DynamoDBApp répertoire, créez un fichier nommé index.html et copiez le code à partir de maintenant GitHub. L'scriptélément ajoute le main.js fichier, qui contient tous les éléments requis JavaScript pour l'exemple. Vous créerez le main.js fichier ultérieurement dans ce didacticiel. Le code restant index.html crée la page du navigateur qui capture les données saisies par les utilisateurs.

Cet exemple de code se trouve ici GitHub.

Créez le script du navigateur

Créez d'abord les objets client de service requis pour l'exemple. Créez un libs répertoiresnsClient.js, créez et collez-y le code ci-dessous. Remplacez REGION et IDENTITY_POOL_ID dans chacun d'eux.

Note

Utilisez l'ID du pool d'identités Amazon Cognito dans lequel vous avez créé. Créez les AWS ressources

import { CognitoIdentityClient } from "@aws-sdk/client-cognito-identity"; import { fromCognitoIdentityPool } from "@aws-sdk/credential-provider-cognito-identity"; import { SNSClient } from "@aws-sdk/client-sns"; const REGION = "REGION"; const IDENTITY_POOL_ID = "IDENTITY_POOL_ID"; // An Amazon Cognito Identity Pool ID. // Create an Amazon Comprehend service client object. const snsClient = new SNSClient({ region: REGION, credentials: fromCognitoIdentityPool({ client: new CognitoIdentityClient({ region: REGION }), identityPoolId: IDENTITY_POOL_ID, }), }); export { snsClient };

Ce code est disponible ici GitHub. .

Pour créer le script de navigateur correspondant à cet exemple, dans un dossier nomméDynamoDBApp, créez un module Node.js portant le nom de fichier add_data.js et collez-y le code ci-dessous. La submitData fonction envoie des données à une table DynamoDB et envoie un SMS à l'administrateur de l'application via Amazon SNS.

Dans la submitData fonction, déclarez les variables pour le numéro de téléphone cible, les valeurs saisies sur l'interface de l'application et pour le nom du compartiment Amazon S3. Créez ensuite un objet de paramètres pour ajouter un élément au tableau. Si aucune des valeurs n'est vide, submitData ajoute l'élément au tableau et envoie le message. N'oubliez pas de mettre la fonction à la disposition du navigateur, avecwindow.submitData = submitData.

// Import required AWS SDK clients and commands for Node.js import { PutItemCommand } from "@aws-sdk/client-dynamodb"; import { PublishCommand } from "@aws-sdk/client-sns"; import { snsClient } from "../libs/snsClient.js"; import { dynamoClient } from "../libs/dynamoClient.js"; export const submitData = async () => { //Set the parameters // Capture the values entered in each field in the browser (by id). const id = document.getElementById("id").value; const title = document.getElementById("title").value; const name = document.getElementById("name").value; const body = document.getElementById("body").value; //Set the table name. const tableName = "Items"; //Set the parameters for the table const params = { TableName: tableName, // Define the attributes and values of the item to be added. Adding ' + "" ' converts a value to // a string. Item: { id: { N: id + "" }, title: { S: title + "" }, name: { S: name + "" }, body: { S: body + "" }, }, }; // Check that all the fields are completed. if (id != "" && title != "" && name != "" && body != "") { try { //Upload the item to the table await dynamoClient.send(new PutItemCommand(params)); alert("Data added to table."); try { // Create the message parameters object. const messageParams = { Message: "A new item with ID value was added to the DynamoDB", PhoneNumber: "PHONE_NUMBER", //PHONE_NUMBER, in the E.164 phone number structure. // For example, ak standard local formatted number, such as (415) 555-2671, is +14155552671 in E.164 // format, where '1' in the country code. }; // Send the SNS message const data = await snsClient.send(new PublishCommand(messageParams)); console.log( "Success, message published. MessageID is " + data.MessageId, ); } catch (err) { // Display error message if error is not sent console.error(err, err.stack); } } catch (err) { // Display error message if item is no added to table console.error( "An error occurred. Check the console for further information", err, ); } // Display alert if all field are not completed. } else { alert("Enter data in each field."); } }; // Expose the function to the browser window.submitData = submitData;

Cet exemple de code se trouve ici GitHub.

Enfin, exécutez la commande suivante à l'invite de commande JavaScript pour regrouper le fichier correspondant à cet exemple dans un fichier nommé main.js :

webpack add_data.js --mode development --target web --devtool false -o main.js
Note

Pour plus d'informations sur l'installation de Webpack, consultezRegroupez des applications avec Webpack.

Pour exécuter l'application, index.html ouvrez-la dans votre navigateur.

Supprimer les ressources

Comme indiqué au début de ce didacticiel, veillez à désactiver toutes les ressources que vous créez pendant que vous suivez ce didacticiel pour vous assurer que vous n'êtes pas débité. Pour ce faire, supprimez la AWS CloudFormation pile que vous avez créée dans la Créez les AWS ressources rubrique de ce didacticiel, comme suit :

  1. Ouvrez le AWS CloudFormationdans la console AWS de gestion.

  2. Ouvrez la page Stacks et sélectionnez la pile.

  3. Sélectionnez Delete (Supprimer).

Pour d'autres exemples AWS interservices, consultez les exemples AWS SDK for JavaScriptinterservices.