Lambda HTTP Authorizer y función no generan logs en CloudWatch cuando están en warm start

0

Hola comunidad,

Estoy enfrentando un problema con una función Lambda que funciona como HTTP Authorizer (usada en una HTTP API Gateway, no REST API). Todo funciona correctamente a nivel de autenticación: el authorizer devuelve isAuthorized: true, y la lógica de autorización se aplica bien.

El problema es que no se generan logs en CloudWatch cuando el contenedor Lambda está en warm start. Solo en el primer cold start aparecen los logs de print(...), incluso si la función se ejecuta correctamente después.

Este mismo comportamiento también se repite en otra función Lambda "normal" que es llamada después del authorizer, así que no parece un problema del authorizer solamente.

Ya validé lo siguiente:

CloudWatch está habilitado correctamente.

Tengo print(...) explícitos en varios puntos del handler.

El execution role tiene permisos de logs (logs:CreateLogGroup, logs:CreateLogStream, logs:PutLogEvents).

No estoy usando ninguna condición de async que finalice antes de enviar logs.

No hay errores visibles ni timeouts.

¿Es un comportamiento esperado que AWS no registre logs de ejecuciones en caliente si estas terminan muy rápido? ¿Existe alguna forma de forzar la publicación de logs en warm start o registrar siempre trazabilidad, por ejemplo con X-Ray u otra técnica recomendada?

Agradezco mucho cualquier orientación técnica sobre esto. Saludos, Esteban

1 Respuesta
0

Hola Esteban,

Gracias por compartir tu problema en detalle. Basado en la información que proporcionas, parece que estás enfrentando un problema poco común con el registro de logs en CloudWatch para tus funciones Lambda, incluyendo tu HTTP Authorizer.

En primer lugar, es importante aclarar que el comportamiento que describes no es el esperado. AWS Lambda debería registrar logs para cada invocación de la función, independientemente de si está en cold start o warm start.

Dado que has verificado los permisos y la configuración básica, aquí hay algunas sugerencias adicionales para solucionar el problema:

  1. Asegúrate de que estás utilizando el módulo de logging de Python en lugar de print(). El módulo de logging es más confiable para enviar logs a CloudWatch. Puedes configurarlo de la siguiente manera:

    import logging
    logger = logging.getLogger()
    logger.setLevel(logging.INFO)
    
    def lambda_handler(event, context):
        logger.info("Este es un mensaje de log")
  2. Verifica que no haya ninguna configuración en tu código que esté suprimiendo los logs o cambiando el nivel de logging.

  3. Asegúrate de que los logs no se estén enviando a un grupo de logs diferente. Verifica en la consola de CloudWatch si hay otros grupos de logs que puedan contener los mensajes que esperas.

  4. Considera agregar un flush explícito al final de tu función:

    import sys
    
    def lambda_handler(event, context):
        # Tu código aquí
        sys.stdout.flush()
  5. Si el problema persiste, podrías considerar utilizar AWS X-Ray para obtener más información sobre la ejecución de tus funciones. X-Ray puede proporcionar trazas detalladas que podrían ayudar a identificar dónde se está perdiendo la información de logging.

  6. Como último recurso, podrías intentar escribir los logs directamente en un bucket de S3 o enviarlos a otro servicio de monitoreo para ver si el problema está relacionado específicamente con CloudWatch.

Si después de intentar estas soluciones el problema persiste, te recomendaría contactar al soporte de AWS, ya que podría tratarse de un problema más profundo con la configuración de tu cuenta o con el servicio de Lambda.

Espero que estas sugerencias te ayuden a resolver el problema. Si necesitas más ayuda, no dudes en proporcionar más detalles o preguntar sobre aspectos específicos.
Sources
Python logging - AWS Lambda | AWS re:Post
Log and monitor Node.js Lambda functions - AWS Lambda
Frequently asked questions about Lambda - AWS Lambda

profile picture
respondido hace un mes

No has iniciado sesión. Iniciar sesión para publicar una respuesta.

Una buena respuesta responde claramente a la pregunta, proporciona comentarios constructivos y fomenta el crecimiento profesional en la persona que hace la pregunta.

Pautas para responder preguntas