Hay una lista de tablas que se copian de Aurora a un depósito S3 en formato csv.
Para cada evento PUT de S3, se activa una función lambda, que procesa el archivo csv correspondiente.
Si tengo 50 archivos csv, ¿cómo puedo hacer un seguimiento de que todos se hayan procesado correctamente?
La solución conceptual sería tener una lista de los 50 archivos csv, cada uno de ellos asociado con un id de ejecución lambda, y cuando cada función termina, actualiza la entrada correspondiente en ese archivo.
Cuando todos los archivos se procesan correctamente, se activa un activador y se envía un mensaje SNS.
Pero realmente no sé qué herramientas o cuál sería la mejor manera de implementar una solución como esta.
Gracias por tu tiempo.
Hay pocas maneras de hacer esto. Una forma implicaría una segunda lambda (llamada L2) y un SQS .
En esta solución, su primer lambda (L1) sería activado por los eventos S3 y procesaría los archivos csv. El L1 también publicaría un mensaje en una cola de SQS ante la complicación del procesamiento csv con los metadatos del archivo de proceso.
La cola SQS activaría el L2 . El único trabajo de L2 sería verificar si todos los archivos se han procesado y, en caso afirmativo, enviarle una notificación SNS.
Los detalles exactos de "comprobar si se han procesado todos los archivos" son específicos de la aplicación y dependen de cómo marque cada archivo csv como proceso. Puede almacenar los metadatos de la complicación csv en DynamoDB o en S3, como puede estar haciendo ahora.
Para eliminar los problemas de simultaneidad de L2, puede limitar su simultaneidad a 1, de modo que los mensajes de SQS sean procesados por una sola función (no por varias funciones de L2 en paralelo).
Podría ampliar la solución anterior con un segundo SQS, la llamada cola de mensajes fallidos (DLQ) , que contendría información sobre los procesos csv fallidos. De esta manera, su L2 también podría determinar si algo ha fallado, según el DLQ.
Enlaces adicionales: