Configuración y uso de DynamoDB Local con Serverless

Clase 13 de 25Curso de Serverless Framework en AWS

Resumen

¿Cómo corregir errores al trabajar con DynamoDB local?

Cometer errores es parte del proceso de aprendizaje. Entender por qué ocurren y cómo solucionarlos fortalece nuestras habilidades. Al intentar ejecutar un cliente de DynamoDB en local, uno puede encontrar errores si el recurso buscado no está disponible. En este caso, el error surgía porque el cliente intentaba conectarse a una base de datos en la nube de Amazon, mientras que la prueba se realizaba localmente. Afortunadamente, existe una solución: usar DynamoDB local.

¿Cómo trabajar con DynamoDB local?

DynamoDB local es un plugin que permite ejecutar las bases de datos en local. Esto es especialmente útil cuando deseas evitar conectarte a la nube mientras desarrollas y pruebas en tu propia máquina. Para trabajar con DynamoDB local, primero necesitas asegurarte de contar con Java Runtime Environment (JRE) instalado, ya que simula la base de datos usando Java. A continuación, sigue estos pasos:

  1. Instalación del plugin: Utiliza npm para instalar DynamoDB local. Este paso es esencial para integrar el plugin a la configuración de serverless.

    npm install serverless-dynamodb-local --save
    
  2. Agregar el plugin a serverless: Edita tu archivo serverless.yaml para incluir el nuevo plugin. Aquí es donde puedes tener múltiples plugins si lo deseas.

    plugins:
      - serverless-dynamodb-local
    
  3. Instalación de la base de datos: Una vez agregado el plugin, debes instalar la base de datos usando un comando específico proporcionado por el plugin.

    serverless dynamodb install
    

¿Cómo configurar el plugin?

Configurar adecuadamente DynamoDB local es clave para que funcione correctamente. La configuración del plugin se realiza en la sección personalizada de serverless.yaml. Aquí defines cómo interactuará el plugin con tu aplicación:

  1. Añadir configuración custom: Copia y pega el siguiente fragmento en tu serverless.yaml:

    custom:
      dynamodb:
        stages: [local]
        start:
          port: 8000
          inMemory: true
          heapInitial: 200m
          heapMax: 1g
          migrate: true
    

Este setup asegura que la base de datos local esté en memoria, prevaleciendo la eficiencia al realizar pruebas.

¿Cómo definir recursos con CloudFormation?

El plugin no actúa como la base de datos en sí, por lo que debes definirla en la sección de recursos del archivo serverless.yaml usando syntaxis de CloudFormation. Este proceso será explorado en cursos avanzados, pero para los propósitos actuales, puedes simplemente copiar el fragmento proporcionado en la documentación:

resources:
  Resources:
    UserStable:
      Type: AWS::DynamoDB::Table
      Properties:
        TableName: UserStable
        AttributeDefinitions:
          - AttributeName: PK
            AttributeType: S
        KeySchema:
          - AttributeName: PK
            KeyType: HASH
        BillingMode: PAY_PER_REQUEST

¿Cómo corregir el error de conexión?

Por último, corrige la configuración del cliente de DynamoDB para que no busque la base de datos en la nube, sino en local:

  1. Configura el cliente: Modifica el cliente de DynamoDB para que apunte a tu propia máquina. Asegúrate de revisar la documentación para obtener el código correcto.

    const client = new AWS.DynamoDB.DocumentClient({
      region: "localhost",
      endpoint: "http://localhost:8000",
      accessKeyId: "fakeMyKeyId",
      secretAccessKey: "fakeSecretAccessKey",
    });
    
  2. Reinicia serverless offline: Vuelve a iniciar serverless offline para probar la aplicación y verifica que el error desapareció.

    serverless offline start
    

Con estos pasos, tu aplicación debería funcionar correctamente en local, interactuando efectivamente con DynamoDB local. ¡Continúa explorando y afianzando tu conocimiento para desplegar tu aplicación en la nube!