Introducción a AWS

Cree una aplicación Web básica

Implemente una aplicación Web y agregue interactividad con una API y una base de datos

Módulo 4: crear una tabla de datos

En este módulo creará una tabla DynamoDB y habilitará la función Lambda para almacenar datos allí.

Introducción

En este módulo crearemos una tabla para conservar los datos utilizando Amazon DynamoDB. DynamoDB es un servicio de base de datos clave-valor, por lo que no es necesario crear un esquema para los datos. Su rendimiento es uniforme en todas las escalas y, cuando se lo utiliza, no hay servidores para administrar.

Además, usaremos el servicio AWS Identity and Access Management (IAM) para concederles a los servicios los permisos necesarios para interactuar entre sí, de forma segura. Específicamente, permitiremos que la función Lambda creada en el módulo dos escriba en la tabla DynamoDB que creamos recientemente mediante una política IAM. Para hacerlo, utilizaremos SDK AWS (Python, JavaScript o Java) de la función Lambda.

Lo que aprenderá

  • crear una tabla DynamoDB con la consola de administración de AWS.
  • crear un rol y administrar permisos con IAM.
  • escribir en la tabla DynamoDB con SDK AWS (Python, JavaScript o Java).

Conceptos clave

Datos persistentes: almacenamiento de datos para que podamos acceder a ellos en el futuro, independientemente de la ejecución de un programa.

Base de datos no relacional: las bases de datos no relacionales no utilizan un esquema tabular de filas y columnas. En lugar de ello, utilizan un modelo de almacenamiento optimizado para los requerimientos específicos de los tipos de datos que se almacenan.

Base de datos clave-valor: es un tipo de base de datos no relacional que almacena datos como un conjunto de pares clave-valor en los que la clave sirve como identificador único.

Clave primaria: se trata del valor que identificará cada elemento de los datos en una tabla DynamoDB. Este valor también servirá para dividir la tabla de modo que sea más escalable.

Esquema: es la organización de los datos que sirve como plano para ver el modo en que se deben construir los datos.

SDK AWS: SDK significa “Kit de desarrollo de software”. Los SDK AWS brindan un conjunto de herramientas, bibliotecas, documentación, muestras de código, procesos y guías que les permiten a los desarrolladores crear aplicaciones de software en una plataforma específica.

Política IAM: se trata de un documento que define a qué recursos de AWS puede acceder una entidad (p. ej., servicio, usuario, grupo).

 Tiempo de realización

10 minutos

 Servicios utilizados

Implementación

  • Cree una tabla de DynamoDB
    1. Inicie sesión en la consola de Amazon DynamoDB.
    2. Asegúrese de verificar en qué región está creando la función. Podrá ver ese detalle en la parte superior de la página, junto al nombre de la cuenta.
    3. Haga clic en el botón azul “Crear tabla”.
    4. Junto a “Nombre de la tabla” escriba HelloWorldDatabase.
    5. En el campo “Clave primaria” escriba ID.
    6. Haga clic en el botón azul “Crear”.
    7. Copie el “Nombre de recurso de Amazon (ARN)” del panel que se encuentra a la derecha (lo necesitará más adelante en el módulo).
  • Cree una Política IAM y agréguela a la función Lambda.
    1. Ahora que ya tenemos la tabla, debemos editar la función Lambda para que pueda escribir datos en ella. En una nueva ventana del navegador, abra la consola de AWS Lambda.
    2. Haga clic en la función que creamos en el módulo dos (si utilizó nuestros ejemplos, se llamará “HelloWorldFunction”).
    3. Agregaremos permisos a la función para que pueda utilizar el servicio de DynamoDB y, para hacerlo, usaremos AWS Identity and Access Management (IAM).
    4. Haga clic en la pestaña “Permisos”.
    5. En el cuadro “Rol de ejecución” haga clic en el rol. Se abrirá una nueva pestaña del navegador.
    6. Haga clic en “Agregar política en línea” a la derecha del cuadro “Políticas de permisos”.
    7. Haga clic en la pestaña “JSON”.
    8. Pegue la siguiente política en el área de texto; asegúrese de reemplazar el ARN de la tabla en el campo “Recurso” en la línea 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. Esta política le permitirá a la función Lambda leer, editar o eliminar elementos, pero solo podrá hacerlo en la tabla que creamos.

    10. Haga clic en el botón azul “Revisar política”.

    11. Junto a “Nombre” escriba HelloWorldDynamoPolicy.

    12. Haga clic en el botón azul “Crear política”.

    13. Ahora puede cerrar esta pestaña del navegador y volver a la pestaña de la función Lambda.


  • Modifique la función Lambda para escribir en la tabla DynamoDB
    • Python
    • JavaScript
    • Java
    • Python
      1. Haga clic en la pestaña “Configuración”
      2. Reemplace el código de la función con lo siguiente:
      # 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. Haga clic en el botón naranja “Guardar” que se encuentra en la parte superior de la página.

    • JavaScript
      1. Haga clic en la pestaña “Configuración”
      2. Reemplace el código de la función con lo siguiente:
      // 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. Haga clic en el botón naranja “Guardar” que se encuentra en la parte superior de la página.

    • Java
      1. Haga clic en la pestaña “Configuración”
      2. Diríjase a “Código de la función” y cargue el siguiente archivo JAR. (Para este tutorial omitiremos la creación del paquete de implementación).
      3. Actualice el “Gestor” a com.example.app.SavePersonHandler::handleRequest.
      4. Haga clic en el botón naranja “Guardar” que se encuentra en la parte superior de la página.
  • Pruebe los cambios
    1. Haga clic en el botón blanco “Probar”.
    2. Verá el mensaje “Resultado de la ejecución: correcta” con fondo verde.
    3. En una nueva pestaña del navegador abra la consola de DynamoDB.
    4. Haga clic en “Tablas” en la barra de navegación a la izquierda.
    5. Haga clic en HelloWorldDatabase que creamos al comienzo en este módulo.
    6. Haga clic en la pestaña “Elementos” a la derecha.
    7. Aquí aparecerán los elementos que coincidan con su evento de prueba. Si usó nuestros ejemplos, la ID del elemento será “Ada Lovelace”.
    8. La tabla DynamoDB se actualizará cada vez que se ejecute la función Lambda. Si se utiliza el mismo nombre, solamente cambiará la marca temporal.

Arquitectura de aplicaciones

Ahora que terminamos el módulo cuatro, veamos la arquitectura actual:

full-stack amplify console arch diagram module 4

en este módulo agregamos dos servicios: DynamoDB (para el almacenamiento) y IAM (para administrar los permisos de forma segura). Ambos están conectados con la función Lambda, lo que les permite escribir en nuestra base de datos. El último paso es agregar el código en el cliente para llamar a la gateway de la API.

¿Este módulo le resultó útil?

Gracias
Indíquenos lo que le gustó.
Cerrar
Lamentamos haberlo decepcionado
¿Hay información desactualizada, confusa o inexacta? Ayúdenos a mejorar este tutorial con sus comentarios.
Cerrar

Agregar interactividad a la aplicación web