Criar um aplicativo para enviar dados para o DynamoDB - AWS SDK for JavaScript

O Guia de API referência da AWS SDK for JavaScript V3 descreve detalhadamente todas as API operações da AWS SDK for JavaScript versão 3 (V3).

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Criar um aplicativo para enviar dados para o DynamoDB

Este tutorial do Node.js entre serviços mostra como criar um aplicativo que permite que os usuários enviem dados para uma tabela do Amazon DynamoDB. Este aplicativo usa os seguintes serviços:

  • AWS Identity and Access Management (IAM) e Amazon Cognito para autorização e permissões.

  • Amazon DynamoDB (DynamoDB) para criar e atualizar as tabelas.

  • Amazon Simple Notification Service (Amazon SNS) para notificar o administrador do aplicativo quando um usuário atualiza a tabela.

O cenário

Neste tutorial, uma página HTML fornece um aplicativo baseado em navegador para enviar dados para uma tabela do Amazon DynamoDB. O aplicativo usa o Amazon SNS para notificar o administrador do aplicativo quando um usuário atualiza a tabela.

Relação entre a interface do navegador, o SDK e os serviços da AWS no aplicativo de envio de dados.

Pré-requisitos

Conclua as seguintes tarefas de pré-requisito:

  • Configure o ambiente do projeto para executar estes exemplos do Node TypeScript e instale os módulos do AWS SDK for JavaScript e de terceiros necessários. Siga as instruções no GitHub.

  • Crie um arquivo de configurações compartilhado com as credenciais de usuário. Para obter mais informações sobre como fornecer um arquivo de credenciais compartilhado, consulte Arquivos de configuração e credenciais compartilhados no Guia de referência de ferramentas e SDKs da AWS.

Criar os recursos da AWS

Este aplicativo requer os seguintes recursos:

  • Função de usuário não autenticado do Amazon Cognito do AWS Identity and Access Management (IAM) com as seguintes permissões:

    • sns:Publish

    • dynamodb:PutItem

  • Uma tabela do DynamoDB.

Você pode criar esses recursos manualmente no console da AWS, mas recomendamos provisioná-los usando o AWS CloudFormation conforme descrito neste tutorial.

Criar os recursos da AWS usando o AWS CloudFormation

O AWS CloudFormation permite que você crie e provisione implantações de infraestrutura da AWS de maneira previsível e repetida. Para mais informações sobre o AWS CloudFormation, consulte o AWS CloudFormationGuia do usuário do .

Para criar a pilha AWS CloudFormation usando a AWS CLI:

  1. Instale e configure a AWS CLI seguindo as instruções do Guia do usuário da AWS CLI.

  2. Crie um arquivo chamado setup.yaml no diretório raiz da pasta do projeto e copie o conteúdo aqui no GitHub para ele.

    nota

    O modelo AWS CloudFormation foi gerado usando o AWS CDK disponível aqui no GitHub. Para obter mais informações sobre o AWS CDK, consulte o Guia do desenvolvedor do AWS Cloud Development Kit (AWS CDK).

  3. Execute o comando a seguir na linha de comando, substituindo STACK_NAME por um nome exclusivo para a pilha, e REGION na região da AWS.

    Importante

    O nome da pilha deve ser exclusivo em uma Região da AWS e na conta da AWS. Você pode especificar até 128 caracteres, e números e hifens são permitidos.

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

    Para obter mais informações sobre os parâmetros do comando create-stack, consulte o Guia de referência de comandos da AWS CLI e o Guia do usuário do AWS CloudFormation.

    Para visualizar os recursos criados, abra o AWS CloudFormation no console de gerenciamento da AWS, escolha a pilha e selecione a guia Recursos.

  4. Quando a pilha for criada, use o AWS SDK for JavaScript para preencher a tabela do DynamoDB, conforme descrito em Como preencher a tabela.

Como preencher a tabela

Para preencher a tabela, primeiro crie um diretório chamado libs, nele crie um arquivo chamado dynamoClient.js e cole o conteúdo abaixo nesse arquivo. Substitua REGION por sua região da AWS, e substitua IDENTITY_POOL_ID por um ID do banco de identidades do Amazon Cognito. O objeto de cliente do DynamoDB é criado.

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 };

Esse código está disponível aqui no GitHub.

Em seguida, crie uma pasta dynamoAppHelperFiles na pasta do seu projeto, crie um arquivo update-table.js nela e copie o conteúdo aqui no GitHub para ela.

// 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();

Na linha de comando, execute o comando a seguir.

node update-table.js

Esse código está disponível aqui no GitHub.

Criar uma página de front-end para o aplicativo

Aqui você cria a página HTML do navegador front-end para o aplicativo.

Crie um diretório DynamoDBApp, crie um arquivo chamado index.html e copie o código daqui no GitHub. O elemento script adiciona o arquivo main.js, que contém todo o JavaScript necessário para o exemplo. Você criará o arquivo main.js mais adiante neste tutorial. O código restante em index.html cria a página do navegador que captura os dados inseridos pelos usuários.

Esse código de exemplo pode ser encontrado aqui no GitHub.

Criar o script do navegador

Primeiro, crie os objetos de cliente de serviço necessários para o exemplo. Crie um diretório libs, crie snsClient.js e cole o código abaixo nele. Substitua REGION e IDENTITY_POOL_ID em cada um.

nota

Use o ID do banco de identidades do Amazon Cognito que você criou em Criar os recursos da AWS.

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 };

Esse código está disponível aqui no GitHub.

Para criar o script do navegador para este exemplo, em uma pasta chamada DynamoDBApp, crie um módulo Node.js com o nome do arquivo add_data.js e cole o código abaixo nele. A função submitData envia dados para uma tabela do DynamoDB e envia uma mensagem SMS para o administrador do aplicativo usando o Amazon SNS.

Na função submitData, declare variáveis para o número de telefone de destino, os valores inseridos na interface do aplicativo e para o nome do bucket do Amazon S3. Em seguida, crie um objeto de parâmetros para adicionar um item à tabela. Se nenhum dos valores estiver vazio, submitData adiciona o item à tabela e envia a mensagem. Lembre-se de tornar a função disponível para o navegador, com window.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;

Esse código de exemplo pode ser encontrado aqui no GitHub.

Por fim, execute o seguinte na linha de comando para empacotar o JavaScript deste exemplo em um arquivo chamado main.js:

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

Para obter informações sobre como instalar o webpack, consulte Agrupe aplicativos com o webpack.

Para executar o aplicativo, abra index.html no navegador.

Excluir os recursos

Conforme informado no início deste tutorial, certifique-se de encerrar todos os recursos que criar enquanto percorre este tutorial para garantir que você não seja cobrado. Você pode fazer isso excluindo a pilha AWS CloudFormation que criou no tópico Criar os recursos da AWS deste tutorial, da seguinte forma:

  1. Abra o AWS CloudFormation no console de gerenciamento da AWS.

  2. Abra a página Pilhas e selecione a pilha.

  3. Escolha Delete (Excluir).

Para obter mais exemplos entre serviços da AWS, consulte Exemplos entre serviços da AWS SDK for JavaScript.