Ahorro de costos mediante AWS Lambda y S3 para el procesamiento de archivos
El uso de AWS Lambda y S3 puede significar un gran ahorro en costos para su organización. ¿Por qué? AWS Lambda cobra solo por el tiempo de computación que utilice y no cobra cuando su código no se está ejecutando. Así, en lugar de tener servidores siempre encendidos, pagamos solo por lo que usamos.
AWS S3, por otro lado, es una de las soluciones de almacenamiento más económicas disponibles. En lugar de alquilar o comprar hardware físico, S3 nos permite pagar solo por el almacenamiento que necesitamos.
Procesamiento de archivos subidos a S3 con AWS Lambda
Suponga que queremos procesar un archivo tan pronto como se sube a S3. Esto es lo que debe hacer en la consola AWS para configurar un disparador de AWS Lambda para un evento de carga de S3.
- Paso 1: Vaya a la consola de AWS Lambda.
- Paso 2: Haga clic en 'Crear una función'.
- Paso 3: En el menú de opciones de plantilla, elija 'S3-Get-Object'.
- Paso 4: Configure la función Lambda para responder a eventos de carga de archivos S3 (Por ejemplo, configurando la función para invocarse cuando se carga un objeto en un determinado bucket S3).
exports.handler = async (event, context) => {
// contenido de la función de utilidad para procesar archivo
};
Ahora, cada vez que se cargue un archivo en el bucket S3 especificado, la función Lambda se ejecutará. Esto es especialmente útil en escenarios donde necesitamos procesar archivos tan pronto como se suben, como la transcodificación de archivos de audio o video, análisis de registro en tiempo real, entre otros.
Transformación de un archivo CSV a XLSX utilizando Pandas
Python con su biblioteca Pandas nos proporciona las herramientas necesarias para cargar, manipular y guardar diferentes tipos de archivos de datos, como CSV y XLSX. A continuación, ilustraremos cómo usar Pandas para transformar un archivo CSV a XLSX.
import pandas as pd
# Load the CSV data
csv_data = pd.read_csv("input.csv")
# Save data in XLSX format
csv_data.to_excel("output.xlsx", index=False)
En el ejemplo anterior, primero cargamos los datos del archivo CSV usando la función read_csv()
de pandas. De acuerdo a la ubicación y el nombre de su archivo, podría necesitar cambiar "input.csv" a su ruta y nombre de archivo correspondiente.
Después de cargar los datos, podemos guardarlos en el formato XLSX con la función to_excel()
. Nuevamente, dependiendo de sus necesidades, podría necesitar cambiar "output.xlsx" a un nombre de archivo o ruta diferente.
El argumento index=False
se utiliza para evitar que pandas guarde los índices del DataFrame en el archivo XLSX. Si desea guardar los índices del DataFrame en el archivo final, simplemente puede omitir este argumento.
Conclusión
Como hemos visto, la combinación de AWS Lambda y S3 puede ser poderosa para crear soluciones rentables y eficientes para el procesamiento de archivos. Y con herramientas de Python como Pandas, podemos manipular y salvar fácilmente los datos en diversos formatos, ampliando aún más nuestras posibilidades.
Configurar Eventos de S3
Para configurar eventos de S3 con el fin de trabajar con AWS Lambda, siga estas instrucciones:
- Inicie sesión en la consola de administración de AWS y navegue a S3.
- Seleccione el bucket donde desea habilitar los eventos.
- Haga click en la pestaña 'Propiedades', seguido por 'Eventos'> 'Añadir notificación'.
- Defina un nombre para la notificación y seleccione el evento que desea que dispare la función (por ejemplo, 'Carga de objetos').
- En el campo ‘Prefijo (opcional)’, puede especificar un subdirectorio dentro del bucket S3 para restringir el trigger solo a cambios en esa ubicación.
- En la sección 'Enviar a', elija 'Función Lambda'. Y en el campo 'Lambda' seleccione el nombre de su función.
- Finalmente, haga click en 'Guardar' para implementar la configuración.
Ahora su bucket S3 está listo para disparar las funciones Lambda cada vez que ocurra el evento especificado en este bucket. Este proceso se realiza de manera automática, permitiendo así un flujo de trabajo eficiente y fácilmente gestionable.