Blog de Amazon Web Services (AWS)
Implementando la ingestión masiva de CSV a Amazon DynamoDB
Por Julia Soscia, Arquitecta de Soluciones en AWS,
Anthony Pasquariello, Arquitecto de Soluciones en AWS y
Nir Ozeri, Arquitecto de Soluciones en AWS
Esta publicación revisa una de las soluciones existentes para ingerir datos en Amazon DynamoDB. También presenta una solución optimizada para la ingestión masiva de archivos CSV a una tabla DynamoDB desde un bucket de Amazon S3 y proporciona una plantilla de AWS CloudFormation de la solución para una fácil implementación en su cuenta de AWS.
Amazon DynamoDB es una base de datos de valores y documentos que ofrece un rendimiento de milisegundos de un solo dígito a cualquier escala. En la actualidad, cientos de miles de clientes de AWS han optado por utilizar DynamoDB para móviles, web, juegos, tecnología de anuncios, IoT y otras aplicaciones que necesitan acceso a datos de baja latencia. Un caso de uso popular es implementar la ingestión masiva de datos en DynamoDB. Estos datos suelen estar en formato CSV y es posible que ya vivan en Amazon S3. Esta ingestión masiva es clave para agilizar los esfuerzos de migración, aliviar la necesidad de configurar los trabajos de canalización de ingestión, reducir el costo general y simplificar la ingestión de datos desde Amazon S3.
Además de DynamoDB, esta publicación utiliza los siguientes servicios de AWS en un nivel 200—300 para crear la solución:
- Amazon S3
- AWS Lambda
- AWS CloudFormation
Prerrequisitos
Para completar la solución en este post, necesita lo siguiente:
- Una cuenta de AWS.
- Un usuario de IAM con acceso a DynamoDB, Amazon S3, Lambda, y AWS CloudFormation.
Soluciones actuales para la inserción de datos en DynamoDB
Existen varias opciones para ingerir datos en Amazon DynamoDB. Los siguientes servicios de AWS ofrecen soluciones, pero cada uno plantea un problema al insertar grandes cantidades de datos:
- AWS Management Console — Puede insertar manualmente datos en una tabla de DynamoDB, a través de AWS Management Console. En Elementos, elija Crear elemento. Debe agregar cada par de calidad-valor a mano. Para la ingestión a granel, este es un proceso que consume mucho tiempo. Por lo tanto, ingerir datos a través de la consola no es una opción viable.
- AWS CLI — Otra opción es utilizar la CLI de AWS para cargar datos en una tabla de DynamoDB. No obstante, este proceso requiere que sus datos estén en formato JSON. Si bien los datos JSON se representan como pares de llave-valor y por lo tanto son ideales para datos no relacionales, los archivos CSV se utilizan más comúnmente para el intercambio de datos. Por lo tanto, si recibe datos masivos en formato CSV, no puede utilizar fácilmente la CLI de AWS para su inserción en DynamoDB.
- AWS Data Pipeline — Puede importar datos de Amazon S3 a DynamoDB utilizando AWS Data Pipeline. No obstante, esta solución requiere varios pasos previos para configurar Amazon S3, AWS Data Pipeline y Amazon EMR para leer y escribir datos entre DynamoDB y Amazon S3. Además, esta solución puede volverse costosa porque incurre en costos adicionales por utilizar estos tres servicios subyacentes de AWS.
Ingestión masiva de CSV desde Amazon S3 en DynamoDB
Ahora existe una solución más eficiente y optimizadas para la ingestión masiva de archivos CSV en DynamoDB. Sigue las instrucciones para descargar la plantilla de CloudFormation para esta solución desde el repositorio de GitHub. La plantilla despliega los siguientes recursos:
- Un bucket privado S3 configurado con un desencadenador de eventos S3 al subir archivos
- Una tabla DynamoDB con bajo demanda para el modo de capacidad de lectura/escritura
- Una función Lambda con un tiempo de espera de 15 minutos, que contiene el código para importar los datos CSV en DynamoDB
- Todos los roles de IAM asociados necesaria para la solución, configurada según el principio de menor privilegio
Para ingerir los datos, complete los siguientes pasos:
- En la consola AWS CloudFormation, elija Crear pila.
- Elegir Con nuevos recursos (estándar).
- En la sección Especificar plantilla, para Fuente de plantilla, elija Cargar un archivo de plantilla.
- Seleccione Elegir Archivo.
- Seleccione el archivo de plantilla de CloudFormation que descargó anteriormente.
- Seleccione Siguiente.
- En la sección Especificar detalles de pila, para Nombre de pila, escriba un nombre para su pila.
- Para Parámetros, ingrese los nombres de parámetros para los siguientes recursos:
- BucketName — S3 bucket name donde cargue su archivo CSV. El nombre del bucket debe ser un valor único en minúscula, o la creación de la pila falla.
- DynamoDBTableName — Nombre de la tabla DynamoDB destino para los datos importados.
- FileName — Nombre de archivo CSV que termina en .csv que subes al bucket S3 para su inserción en la tabla DynamoDB.
- Elegir Siguiente.
- Vuelve a elegir Siguiente.
- Seleccionar reconozco que AWS CloudFormation podría crear recursos de IAM.
- Elige Crear pila.
- Cuando la pila esté completa, navega hasta tu bucket S3 recién creado y sube tu archivo CSV. El subir desencadena la importación de tus datos a DynamoDB. No obstante, debes asegurarte de que tu archivo CSV cumpla con los siguientes requisitos:
- Estructura tus datos de entrada para que la clave de partición se encuentre en la primera columna del archivo CSV. Asegúrate de que la primera columna de tu archivo CSV tenga el nombre uUID. Para obtener más información sobre cómo seleccionar una clave de partición de acuerdo con las mejores prácticas, consulte Elegir la clave de partición de DynamoDB correcta.
- Confirma que tu nombre de archivo CSV coincide con el nombre exacto del archivo, que termina en el sufijo .csv, que ingresaste previamente. Para un archivo de 100,000 filas, esta ejecución debería tardar aproximadamente 80 segundos. El tiempo de espera de la función Lambda puede acomodar alrededor de 1 millón de filas de datos; sin embargo, debe desglosar el archivo CSV en trozos más pequeños. Adicionalmente, esta solución no garantiza el orden de los datos importados a la tabla DynamoDB. Si la ejecución falla, asegúrese de haber creado y establecido correctamente las variables de entorno, como se especificó anteriormente. También puedes comprobar los mensajes de error manejando en la consola de funciones Lambda.
- En la consola DynamoDB, elija Tablas.
- Elija la tabla que ingresó en su plantilla de CloudFormation para
DynamoDbTableName
. Ahora puede ver sus datos importados y los detalles de la tabla asociados.
Conclusión
Este post discutió el caso de uso común de la ingestión de grandes cantidades de datos en Amazon DynamoDB y revisó las opciones de ingestión disponibles a partir de este escrito. El post también proporcionó una solución optimista y rentable para la ingestión masiva de datos CSV en DynamoDB que utiliza una función Lambda escrita en Python.
Descargue la plantilla de CloudFormation del repositorio de GitHub para construir y utilizar esta solución. Esta pila de CloudFormation lanza varios recursos, entre ellos una función Lambda, bucket S3, tabla DynamoDB y varios roles de IAM. Tenga en cuenta que incurre en cargos por el uso de estos servicios como parte del lanzamiento de la plantilla y el uso de esta solución. Estos costos también aumentan a medida que crece el tamaño del archivo de entrada. Para reducir costos, considere seleccionar la capacidad de escritura aprovisionada en lugar de bajo demanda (que esta publicación usó para acelerar la importación de datos) para su tabla DynamoDB.
Ahora puede ingerir fácilmente conjuntos de datos grandes en DynamoDB de una manera más eficiente, rentable y directa. Si tiene alguna pregunta o sugerencia, por favor deje un comentario.
Este artículo fue traducido del Blog de AWS en Inglés.
Sobre los autores
Julia Soscia es Arquitecta de Soluciones de Amazon Web Services, basada en la ciudad de Nueva York. Su principal objetivo es ayudar a los clientes a crear entornos bien diseñados en la plataforma en la nube de AWS. Es una analista de datos con experiencia con un enfoque en Analytics y Machine Learning.
Anthony Pasquariello es Arquitecto de Soluciones en Amazon Web Services, basado en la ciudad de Nueva York. Se centra en proporcionar a los clientes consultas técnicas durante su viaje a la nube, especialmente en torno a las mejores prácticas de seguridad. Tiene una maestría en ingeniería eléctrica e informática de la Universidad de Boston. Fuera de la tecnología, le gusta escribir, estar en la naturaleza y leer filosofía.
Nir Ozeri es Arquitecto de soluciones de Amazon Web Services.
Sobre los traductores
Rodrigo Cabrera es Arquitecto de Soluciones de AWS.
Roberto Luna Rojas es Arquitecto de Soluciones especialista en bases de dato en memoria de AWS