Conceitos básicos da AWS

Criar uma aplicação Web básica

Implantar uma aplicação Web e adicionar interatividade com uma API e um banco de dados

Módulo 4: Criar uma tabela de dados

Neste módulo, você criará uma tabela do DynamoDB e habilitará a função do Lambda para armazenar dados nela.

Introdução

Neste módulo, usaremos o Amazon DynamoDB para criar uma tabela na qual manter os dados. O DynamoDB é um serviço de banco de dados de chave-valor, portanto não é necessário criar um esquema para os dados. Ele proporciona uma performance consistente em qualquer escala, e não há servidores para gerenciar ao usá-lo.

Usaremos também o serviço AWS Identity and Access Management (IAM) para conceder aos serviços as permissões necessárias para que eles interajam entre si com segurança. Especificamente, vamos permitir que a função do Lambda criada no módulo 2 grave dados na tabela do DynamoDB recém-criada por meio de uma política do IAM. Para isso, usaremos o AWS SDK (Python, JavaScript ou Java) da nossa função do Lambda.

O que você aprenderá

  • Usar o Console de Gerenciamento da AWS para criar uma tabela do DynamoDB
  • Criar uma função e gerenciar permissões com o IAM
  • Gravar dados em uma tabela do DynamoDB por meio do AWS SDK (Python, JavaScript ou Java)

Principais conceitos

Manter dados Armazenar dados para que possamos acessá-los no futuro sem depender da execução de um programa.

Banco de dados não relacional Esse tipo de banco de dados não usa um esquema tabular de linhas e colunas. Em vez disso, ele usa um modelo de armazenamento otimizado de acordo com os requisitos específicos do tipo de dados que estão sendo armazenados.

Banco de dados de chave-valor Um tipo de banco de dados não relacional que armazena os dados como um conjunto de pares de chave-valor em que uma chave serve como um identificador exclusivo.

Chave primária O valor que identificará os dados em uma tabela do DynamoDB. Esse valor também servirá para particionar a tabela e torná-la escalável.

Esquema A organização dos dados que serve como um plano de como um banco de dados será criado.

AWS SDK SDK significa “Software Development Kit” (Kit de desenvolvimento de software). Os AWS SDKs oferecem um conjunto de ferramentas, bibliotecas, documentação, amostras de código, processos e guias que permitem a desenvolvedores criar aplicativos de software em uma plataforma específica.

Política do IAM Um documento que define a quais recursos da AWS uma entidade (por exemplo, serviço, usuário ou grupo) tem acesso.

 Tempo para a conclusão

10 minutos

 Serviços usados

Implementação

    1. Faça login no Console do Amazon DynamoDB.
    2. Anote a região onde você está criando a função. Você pode ver essa informação na parte superior da página, ao lado do nome da sua conta.
    3. Clique no botão azul “Create table” (Criar tabela).
    4. Ao lado de “Table name” (Nome da tabela), digite HelloWorldDatabase.
    5. No campo “Primary Key” (Chave primária), digite ID.
    6. Clique no botão azul “Create” (Criar).
    7. Copie o “nome de recurso da Amazon (ARN)” da tabela do painel direito. Você precisará dele mais adiante neste módulo.
    1. Agora que temos uma tabela, vamos editar nossa função do Lambda para poder gravar dados nela. Em uma nova janela do navegador, abra o Console do AWS Lambda.
    2. Clique na função criada no módulo 2. Se você usou nossos exemplos, o nome dela é “HelloWorldFunction”.
    3. Adicionaremos permissões à nossa função para que ela possa usar o serviço DynamoDB e usaremos o AWS Identity and Access Management (IAM) para isso.
    4. Clique na guia “Permissions” (Permissões).
    5. Na caixa “Execution role” (Função de execução), clique na função. Uma nova guia do navegador será aberta.
    6. Clique em “Add inline policy” (Adicionar política em linha) à direita da caixa “Permissions policies” (Políticas de permissões).
    7. Clique na guia “JSON”.
    8. Cole a seguinte política na área de texto atentamente para substituir o ARN da sua tabela no campo “Resource” (Recurso) na linha 15:
    {
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "dynamodb:PutItem",
                "dynamodb:DeleteItem",
                "dynamodb:GetItem",
                "dynamodb:Scan",
                "dynamodb:Query",
                "dynamodb:UpdateItem"
            ],
            "Resource": "YOUR-TABLE-ARN"
        }
        ]
    }

    9. Essa política permitirá que nossa função do Lambda leia, edite ou exclua itens, mas a restringe para que faça isso somente na tabela que criamos.

    10. Clique no botão azul “Review Policy” (Revisar política).

    11. Ao lado do “nome”, digite HelloWorldDynamoPolicy.

    12. Clique no botão azul “Create Policy” (Criar política).

    13. Agora você pode fechar esta guia do navegador e voltar para sua função do Lambda.


    • Python
      1. Clique na guia “Configuration” (Configuração)
      2. Substitua o código da sua função pelo seguinte:
      # import the json utility package since we will be working with a JSON object
      import json
      # import the AWS SDK (for Python the package name is boto3)
      import boto3
      # import two packages to help us with dates and date formatting
      from time import gmtime, strftime
      
      # create a DynamoDB object using the AWS SDK
      dynamodb = boto3.resource('dynamodb')
      # use the DynamoDB object to select our table
      table = dynamodb.Table('HelloWorldDatabase')
      # store the current time in a human readable format in a variable
      now = strftime("%a, %d %b %Y %H:%M:%S +0000", gmtime())
      
      # define the handler function that the Lambda service will use as an entry point
      def lambda_handler(event, context):
      # extract values from the event object we got from the Lambda service and store in a variable
          name = event['firstName'] +' '+ event['lastName']
      # write name and time to the DynamoDB table using the object we instantiated and save response in a variable
          response = table.put_item(
              Item={
                  'ID': name,
                  'LatestGreetingTime':now
                  })
      # return a properly formatted JSON object
          return {
              'statusCode': 200,
              'body': json.dumps('Hello from Lambda, ' + name)
          }

      3. Clique no botão laranja “Save” (Salvar) na parte superior da página.

    • JavaScript
      1. Clique na guia “Configuration” (Configuração)
      2. Substitua o código da sua função pelo seguinte:
      // Include the AWS SDK module
      const AWS = require('aws-sdk');
      // Instantiate a DynamoDB document client with the SDK
      let dynamodb = new AWS.DynamoDB.DocumentClient();
      // Use built-in module to get current date & time
      let date = new Date();
      // Store date and time in human-readable format in a variable
      let now = date.toISOString();
      // Define handler function, the entry point to our code for the Lambda service
      // We receive the object that triggers the function as a parameter
      exports.handler = async (event) => {
          // Extract values from event and format as strings
          let name = JSON.stringify(`Hello from Lambda, ${event.firstName} ${event.lastName}`);
          // Create JSON object with parameters for DynamoDB and store in a variable
          let params = {
              TableName:'HelloWorldDatabase',
              Item: {
                  'ID': name,
                  'LatestGreetingTime': now
              }
          };
          // Using await, make sure object writes to DynamoDB table before continuing execution
          await dynamodb.put(params).promise();
          // Create a JSON object with our response and store it in a constant
          const response = {
              statusCode: 200,
              body: name
          };
          // Return the response constant
          return response;
      };

      3. Clique no botão laranja “Save” (Salvar) na parte superior da página.

    • Java
      1. Clique na guia “Configuration” (Configuração)
      2. Vá para “Function code” (Código da função) e faça upload do seguinte arquivo JAR. Para a finalidade deste tutorial, pularemos a criação do pacote de implantação.
      3. Atualize o “Handler” (Manipulador) para com.example.app.SavePersonHandler::handleRequest.
      4. Clique no botão laranja “Save” (Salvar) na parte superior da página.
    1. Clique no botão branco “Test” (Testar).
    2. Você verá uma mensagem “Execution result: succeeded” (Resultado da execução: êxito) com um fundo verde.
    3. Em uma nova guia do navegador, abra o Console do DynamoDB.
    4. Clique em “Tables” (Tabelas) na barra de navegação esquerda.
    5. Clique em HelloWorldDatabase, que criamos anteriormente neste módulo.
    6. Clique na guia “Items” (Itens) à direita.
    7. Os itens que corresponderem ao seu evento de teste aparecerão aqui. Se você usou nossos exemplos, o ID do item é “Ada Lovelace”.
    8. Toda vez que sua função do Lambda for executada, a tabela do DynamoDB será atualizada. Se o mesmo nome for usado, apenas o time stamp será alterado.

Arquitetura da aplicação

Com o módulo 4 concluído, vamos analisar nossa arquitetura atual:

Adicionamos dois serviços neste módulo: DynamoDB (para armazenamento) e IAM (para gerenciamento seguro de permissões). Os dois estão conectados à nossa função do Lambda para que ela possa gravar dados no banco de dados. A etapa final é adicionar o código ao nosso cliente para chamar o API Gateway.

Este módulo foi útil?

Adicionar interatividade ao aplicativo Web