Contents

Usar o AWS DynamoDB em um aplicativo Node.js

Key Takeaways

O DynamoDB é uma solução de banco de dados NoSQL excecionalmente robusta e eficiente fornecida pela Amazon Web Services (AWS), capaz de gerenciar volumes substanciais de informações variadas, mantendo níveis ideais de desempenho, resiliência e confiabilidade.

Para iniciar a utilização do serviço de base de dados NoSQL da Amazon, conhecido como DynamoDB, num ambiente Node.js, é necessário obter o módulo client-dynamodb do AWS SDK e estabelecer as definições de autenticação adequadas para aceder à plataforma.

O DynamoDB fornece uma abordagem simples para criar tabelas, manipular dados através das suas várias operações, como escrever, ler, atualizar e eliminar registos, tudo com a utilização de parâmetros definidos pelo utilizador. Esta funcionalidade promove a adaptabilidade e a escalabilidade na conceção de aplicações, melhorando a eficiência global.

A utilização de uma série de linguagens de programação robustas em conjunto com bases de dados potentes é essencial para uma parte substancial da criação de aplicações contemporâneas.

A Amazon Web Services fornece uma solução inovadora conhecida como DynamoDB, que tem o potencial de transformar a gestão de dados ao permitir a criação rápida de bases de dados capazes de lidar eficazmente com conjuntos de dados substanciais e variados.

O que é o DynamoDB?

A Amazon Web Services fornece diversas soluções que respondem a vários requisitos de bases de dados, incluindo o Amazon Relational Database Service (RDS) para bases de dados relacionais tradicionais e o Amazon DocumentDB, que suporta bases de dados de documentos semelhantes ao MongoDB. Além disso, o DynamoDB é um exemplo de uma base de dados não relacional ou NoSQL que armazena dados utilizando um sistema de armazenamento de valores chave.

O DynamoDB é capaz de gerir eficazmente volumes substanciais de informação dispersos por uma rede distribuída, mantendo níveis excepcionais de desempenho, resistência e fiabilidade. O sistema apresenta uma estrutura adaptável que permite o armazenamento e a recuperação simples de dados estruturados e não estruturados.

O DynamoDB é uma solução de base de dados versátil que pode ser utilizada em vários domínios. Pode ser acedido através da Consola de Gestão da AWS e da Interface de Linha de Comandos (CLI) da AWS, bem como integrado em aplicações Web que utilizam o Kit de Desenvolvimento de Software (SDK) da AWS.

Introdução ao DynamoDB no Node.js

O Node.js oferece um conjunto diversificado de opções para a construção de interfaces de programação de aplicativos (APIs) de back-end e oferece aos usuários a flexibilidade de selecionar seu banco de dados preferido para integração nesse contexto.Além disso, o Node.js suporta vários serviços externos, como o DynamoDB da Amazon Web Services, fornecendo aos programadores uma vasta gama de escolhas para acomodar os seus requisitos específicos.

Para utilizar um serviço da Amazon Web Services (AWS) em um aplicativo Node, tudo o que é necessário é o pacote SDK do cliente apropriado específico para esse serviço em particular. Por exemplo, para interagir com o DynamoDB, é necessário obter e instalar o módulo client-dynamodb que reside no pacote aws-sdk .

Para executar um comando no diretório de projeto especificado, siga estes passos:1. Navegue até ao diretório de projeto pretendido utilizando um terminal ou uma linha de comandos.2. Escreva o comando adequado para instalar o pacote pretendido e prima enter.3. O processo de instalação terá início e, uma vez concluído, deverá verificar se o pacote foi instalado com êxito, verificando a sua presença no sistema de ficheiros do projeto.

 npm install @aws-sdk/client-dynamodb

Para utilizar uma tabela DynamoDB no seu projeto Node.js utilizando o pacote aws-sdk/client-dynamodb , é necessário especificar a localização geográfica da tabela incorporando a sua região nas definições de configuração do cliente antes de qualquer interação. Essa atualização de configuração deve ser realizada durante o processo de inicialização do cliente DynamoDB.

Se já instalou e utilizou o AWS CLI no seu dispositivo informático, é muito provável que já tenha estabelecido as credenciais do AWS nas definições ambientais. Nesse caso, o kit de desenvolvimento de software (SDK) associado recuperará sem problemas estes valores do referido ambiente sem qualquer ação adicional da sua parte.

Se ainda não tiver criado um utilizador IAM na consola Amazon Web Services (AWS), pode fazê-lo navegando para o serviço AWS Identity and Access Management (IAM). Depois de estabelecer esta nova conta de utilizador, ser-lhe-á fornecido um identificador de chave de acesso exclusivo e a chave secreta correspondente, que servirão como credenciais individualizadas para aceder a vários recursos no ecossistema AWS.

Para incorporar essas chaves de autenticação no seu espaço de trabalho, você pode executar as seguintes instruções de linha de comando no seu sistema operacional:

No Unix, Linux ou macOS:

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

No Windows (CMD):

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

No Windows (PowerShell):

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

No seu projeto Node.js, crie um novo ficheiro intitulado “dynamodb.js”.Dentro deste ficheiro, utilize as seguintes linhas de código para inicializar uma instância do cliente DynamoDB da Amazon Web Services (AWS):

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

const region = "us-east-1" // your preferred region

const client = new DynamoDB({ region })

A AWS garante que as informações de segurança sensíveis são adequadamente protegidas, impedindo a divulgação de tais dados dentro do próprio código. Consequentemente, ao tentar estabelecer uma ligação de cliente como demonstrado anteriormente, as chaves de acesso e as chaves secretas necessárias são recuperadas de uma fonte ambiental em vez de serem diretamente incorporadas no código.

O cliente recentemente estabelecido facilita uma multiplicidade de funcionalidades, como a criação de tabelas e operações de entrada/saída de dados.

O DynamoDB funciona com uma arquitetura sem esquema, semelhante a outras bases de dados NoSQL, o que permite a adição contínua de novos atributos ou campos a uma tabela existente sem incorrer em despesas gerais significativas. Como tal, ao estabelecer uma tabela DynamoDB, é necessário designar atributos específicos que funcionarão como chaves primárias para facilitar a recuperação e o gerenciamento eficientes dos dados.

De facto, vamos analisar um exemplo de código que constrói uma nova tabela intitulada “Customer” no âmbito do serviço DynamoDB da Amazon:

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

O campo AttributeDefinitions serve para especificar as características primárias da estrutura da tabela, definindo os seus atributos essenciais juntamente com os respectivos tipos de dados. Neste caso específico, o atributo Email é designado como tendo um tipo de dados baseado em cadeias de caracteres, denotado pela abreviatura “S”. Os outros tipos de atributos disponíveis incluem valores numéricos representados por “N” e dados binários caracterizados por “B”.

Para recuperar e organizar eficientemente os dados numa tabela DynamoDB, é essencial estabelecer um esquema de chave primária que designe um ou mais atributos como o identificador exclusivo de cada item. Neste caso, uma vez que designámos “Email” como chave primária, este deve ser incluído no KeySchema com o KeyType especificado de “HASH”. Isto permite que o DynamoDB identifique e localize eficazmente registos específicos com base no seu endereço de e-mail.

Outra opção alternativa para o atributo KeyType é o tipo Range, que serve como um mecanismo de classificação quando aplicado a valores de hash não exclusivos dentro de uma tabela de banco de dados. Em situações em que vários registos possuem valores de hash idênticos, a utilização de chaves de intervalo permite o agrupamento desses registos com base em informações adicionais de distinção, como datas ou cores. Ao utilizar este método, é possível organizar eficazmente os dados de uma forma mais estruturada, evitando potenciais conflitos que possam surgir ao utilizar apenas chaves de hash.

O terceiro aspeto essencial no código acima mencionado diz respeito ao ProvisionedThroughput, que estabelece a taxa permitida de operações de leitura e gravação para a tabela DynamoDB especificada por segundo.

Ao executar o código acima mencionado, pode-se esperar obter resultados na forma de:

/pt/images/dynamodb_create_table_console.jpg

Ao navegar para o painel de tabelas DynamoDB dentro da interface web do AWS Management Console, pode-se observar que a tabela está passando pelo processo de provisionamento ou foi criada com sucesso e atualmente exibe um estado de “ativo” ou “provisionado”.

Ao determinar os valores apropriados para ReadCapacityUnits e WriteCapacityUnits, é crucial avaliar cuidadosamente os requisitos específicos da sua aplicação para evitar potenciais problemas de desempenho ou encargos inflacionados na sua conta.

Uma vez estabelecido que a tabela está ativa, é possível realizar uma variedade de operações que envolvem a criação, leitura, atualização e eliminação de dados na referida tabela.

Os exemplos apresentados demonstram o processo de escrita e recuperação de informação da tabela

⭐ Adicionar dados à tabela . Para escrever dados numa tabela, é necessário o método putItem do cliente. O código abaixo adiciona um novo cliente à tabela Customer no 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)

O objeto params contém o TableName, que é a tabela na qual você está gravando, e o campo Item, que contém os dados que você está adicionando com seus tipos específicos. Observe os novos campos que não estavam na tabela inicialmente, é assim que o DynamoDB funciona de forma flexível. Você pode visualizar os dados em seu banco de dados em seu console como este: /pt/images/dynamodb_table_data_screen.jpg

⭐ Ler dados da tabela . O DynamoDB permite que você leia dados de várias maneiras. A função de varredura do SDK lê a tabela inteira, enquanto getItem lê apenas dados específicos. Por exemplo, o código abaixo obtém todos os clientes:

 const getAllCustomers = async () => {
    const params = {
        TableName: "Customer"
    }

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

Enquanto o código a seguir obtém o usuário pelo valor do email:

 const getCustomerByEmail = async (email) => {
    const params = {
        TableName: "Customer",
        Key: {
            Email: { "S": email } // the type is always required
        }
    }

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

getCustomerByEmail("[email protected]")

⭐ Atualizar dados na tabela . Para atualizar os dados existentes em uma tabela, use a função updateItem do SDK. O código a seguir demonstra como atualizar um registro específico:

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

Você também pode optar por tornar sua função dinâmica criando expressões de atualização a partir de seus dados de atualização. A flexibilidade do DynamoDB permite que você lide com cada operação de acordo com suas necessidades.

⭐ Excluir dados da tabela . Para excluir um registro do DynamoDB, você precisa da função deleteItem e da chave do registro específico.Eis como implementá-lo:

 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]")

Criar aplicações eficientes com o DynamoDB

A Amazon Web Services continua a ser um grande sucesso e oferece uma plataforma de fácil utilização para o desenvolvimento de serviços digitais eficazes e fiáveis, assegurando simultaneamente a implementação de medidas de segurança robustas. A solução DynamoDB apresenta-se como uma opção ideal para quem procura uma experiência de base de dados simplificada que requer uma gestão mínima da infraestrutura subjacente ou dos protocolos de proteção.

Adquiriu os conhecimentos e as ferramentas necessárias para começar a utilizar o DynamoDB num projeto Node.js, o que lhe permite tomar uma decisão informada relativamente à sua implementação em empreendimentos futuros.