Instalación de AWS DynamoDB en un equipo local

Instalación de AWS DynamoDB en un equipo local Créditos de imagen: Unsplash

DynamoDB es la base de datos (DB) nativa que proporciona AWS, la nube de Amazon. Es una DB NoSQL, por lo que no admite el lenguaje SQL. Para trabajar con ella es necesario usar una API propietaria.

En comparación con otros tipos de DB existentes en AWS, su rendimiento, velocidad y precio son mejores a todas las demás. Por contra, su diseño y administración son más complejos.

Instalación de DynamoDB en local

Vamos a instalar DynamoDB en un contenedor de Docker utilizando la imagen que proporciona Amazon. Para ello utilizaremos Docker Compose, que permite organizar de forma más sencilla los procesos para gestionar los contenedores de Docker.

En caso de no tener Docker instalado, este es un tutorial sobre cómo instalarlo en Ubuntu 18.04. Para instalar Docker Compose, puede seguir este otro tutorial.

Configuración de Docker

Crearemos una carpeta donde guardar el fichero de configuración del contenedor Docker, que se llamará docker-compose.yml, y que contendrá lo siguiente:

version: '3.7'
services:
 dynamodb-local:
   image: amazon/dynamodb-local:latest
   container_name: dynamodb-local
   ports:
    - "8000:8000"

Si dejáramos el fichero de configuración así, cuando se ejecutara DynamoDB lo haría usando almacenamiento en memoria, lo que conllevaría que al finalizar el proceso que lo ejecuta, todos los registros almacenados (en este caso sesiones) se perdiesen. Para evitar que esto ocurra vamos a configurar DynamoDB con almacenamiento en disco.

Configuración de DynamoDB con persistencia de datos

Esta funcionalidad se ha implementado siguiendo las indicaciones del artículo How to Persist Data in Local DynamoDB Docker Container.

Para hacer los datos persistentes montaremos un volumen de disco con una carpeta local en el contenedor de Docker. Haremos esto creando, en la misma carpeta donde hemos guardado el fichero docker-compose.yml, el fichero Dockerfile con el siguiente contenido:

FROM amazon/dynamodb-local
WORKDIR /home/dynamodblocal
RUN mkdir ./db && chown -R 1000 ./db
CMD ["-jar", "DynamoDBLocal.jar", "-dbPath", "./db", "-sharedDb"]
VOLUME ["./db"]

Ahora modificaremos el fichero docker-compose.yml con el siguiente contenido:

version: "3.8"
services:
  dynamodb:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: dynamoDbLocalDockerCompose
    ports:
      - "8000:8000"
    volumes:
      - dynamodb-local:/home/dynamodblocal/db
volumes:
  dynamodb-local:
    driver: local

De esta forma ya tenemos preparado Docker para:

  1. Descargar la imagen de DynamoDB de Amazon.
  2. Crear el volumen de disco y la carpeta donde almacenar los datos.
  3. Crear el contenedor Docker con DynamoDB.
  4. Asociar DynamoDB con la carpeta de datos.
  5. Iniciar el contenedor con DynamoDB.

Los cinco pasos anteriores los realizaremos con el siguiente comando de consola, debiendo ejecutarse desde la carpeta donde guardamos los dos ficheros de configuración.

$ docker-compose up

Starting dynamoDbLocalDockerCompose ... done
Attaching to dynamoDbLocalDockerCompose
dynamoDbLocalDockerCompose | Initializing DynamoDB Local with the following configuration:
dynamoDbLocalDockerCompose | Port:  8000
dynamoDbLocalDockerCompose | InMemory:  false
dynamoDbLocalDockerCompose | DbPath:  ./db
dynamoDbLocalDockerCompose | SharedDb:  true
dynamoDbLocalDockerCompose | shouldDelayTransientStatuses:  false
dynamoDbLocalDockerCompose | CorsParams:  *
dynamoDbLocalDockerCompose | 

En esta terminal dejaremos funcionando el contenedor de DynamoDB. Cuando ya no se necesite se podrá parar pulsando la combinación de teclas [Ctrl+C].

En posteriores reinicios del equipo, para volver a iniciar DynamoDB deberemos ejecutar la misma instrucción anterior. En este caso sólamente arrancará el contenedor con DynamoDB.

Caso de uso

Al instalar un servidor HTTP Express (Node.js) en AWS que utilice cuentas de usuario, para hacer las sesiones de éstos persistentes es recomendable almacenarlas en la DB DynamoDB.

Al desarrollar la aplicación será conveniente acceder a la DB en el equipo local, en vez de tener que conectarte a los servidores de AWS. Para poner la aplicación en producción, será sencillo implementar esta DB en tu cuenta de AWS.

Adaptar la aplicación Express a DynamoDB

Una vez preparado DynamoDB en el equipo de desarrollo, puede consultar mi artículo Sesiones persistentes en Express con AWS DynamoDB, donde se muestra el código necesario para hacer las sesiones persistentes.

Anexo

Iniciar el proceso de Docker

Si el proceso de Docker no se iniciar automáticamente al arrancar nuestro equipo, deberemos hacerlo manualmente mediante el siguiente comando:

$ sudo systemctl start docker.service 

Para hacer que este proceso se inicie automáticamente ejecutaremos lo siguiente:

$ sudo systemctl enable docker.service 

Artículos relacionados

Comentarios