Estoy tratando de unir funciones lambda. La primera función lambda está en un temporizador de 30 minutos para extraer y colocar los datos en un depósito S3, la siguiente función lambda recupera y analiza esos datos y los coloca en un depósito S3 separado, y la última función realiza un análisis de esos datos y los envía el usuario (en este caso yo mismo) un correo electrónico de los resultados a través del módulo smtplib de pythons.
En lugar de tener las dos últimas funciones lambda ejecutándose en temporizadores, quiero que la segunda función se active cuando se complete la primera función y que la última función se active cuando finalice la segunda función. Además, eliminar las dos carpetas en el primer depósito S3 y el contenido en el segundo depósito S3 para ahorrar memoria y tiempo de procesamiento.
¿Hay alguna manera de hacer esto totalmente en la interfaz web de AWS en lugar de volver a escribir el código de Python que ya tengo?
Parece que tiene un caso de uso que puede cumplirse con funciones de paso .
Agregaría un flujo que tiene el primer Lambda llamado, luego, si tiene éxito, llame a la segunda función Lambda pasando la entrada/salida entre ellos.
Actualizaría su acción programada para ejecutar la función de paso en lugar de la primera Lambda.
Se puede hacer usando S3 Put Event como disparador de Lambda.
La segunda y tercera lambda pueden tener S3 Put Event Trigger.
Timer Put Event Put Event -------Lambda_1 -> S3 ------------> Lambda_2 --> S3 ------------> Lambda_3 ---> EmailConsulte el siguiente enlace para obtener más información:
Otra solución que implicaría reescribir su código python, pero solo un poco, es:
import boto3 lambda_client = boto3.client('lambda') payload = b'{"a": 1, "b": 2, "c": 3}' response = lambda_client.invoke( FunctionName="my-second-function", InvocationType='Event', Payload=payload )Por el contrario, encuentro que las funciones escalonadas son mucho más complicadas.