hace 2 años
En el mundo de la computación sin servidor, AWS Lambda se presenta como una solución potente y flexible para ejecutar código sin la necesidad de administrar servidores. Al trabajar con funciones Lambda, te encontrarás con dos objetos fundamentales que se pasan a tu función handler: el objeto evento y el objeto contexto. Comprender la diferencia entre estos dos objetos es crucial para desarrollar funciones Lambda eficientes y bien informadas. Este artículo explorará en detalle las características de cada objeto, sus propósitos y cómo puedes utilizarlos para mejorar tus aplicaciones serverless.

- ¿Qué es el Objeto Evento en AWS Lambda?
- ¿Qué es el Objeto Contexto en AWS Lambda?
- Diferencias Clave entre Objeto Evento y Objeto Contexto
- Ejemplo de Código Básico (JavaScript)
- Creación de Eventos en AWS Lambda
- AWS Lambda en Python y Boto3
- El Objeto Contexto en Python
- Preguntas Frecuentes (FAQs)
- Conclusión
¿Qué es el Objeto Evento en AWS Lambda?
El objeto evento es el primer argumento que recibe tu función handler de Lambda. Su propósito principal es proporcionar información sobre el evento que desencadenó la ejecución de tu función. En esencia, contiene los datos que tu función necesita para procesar la solicitud o el evento que la activó. La estructura y el contenido del objeto evento varían significativamente dependiendo del servicio de AWS u otra fuente que haya invocado la función Lambda.
Considera los siguientes ejemplos de eventos y cómo se reflejan en el objeto evento:
- API Gateway: Si tu función Lambda se invoca a través de una solicitud a API Gateway, el objeto evento contendrá información sobre la solicitud HTTP, como el método HTTP (GET, POST, etc.), los encabezados, los parámetros de consulta, el cuerpo de la solicitud y la ruta.
- Amazon S3: Si tu función Lambda se activa cuando se sube un archivo a un bucket de S3, el objeto evento contendrá detalles sobre el evento de S3, incluyendo el nombre del bucket, la clave del objeto (nombre del archivo), el tamaño del archivo y el tipo de evento (creación, eliminación, etc.).
- Amazon CloudWatch Events (EventBridge): Si tu función Lambda se invoca mediante un evento programado de CloudWatch Events o EventBridge, el objeto evento contendrá información sobre el evento programado, como la hora de ejecución y cualquier dato personalizado que hayas configurado en la regla de eventos.
- Amazon DynamoDB Streams: Si tu función Lambda se activa por un cambio en una tabla de DynamoDB, el objeto evento contendrá un registro del cambio en la tabla, incluyendo el tipo de operación (INSERT, MODIFY, REMOVE), las claves primarias y los atributos modificados.
- Amazon SNS (Simple Notification Service): Si tu función Lambda se suscribe a un tema de SNS, el objeto evento contendrá el mensaje publicado en el tema de SNS, junto con metadatos como el tema ARN y el ID del mensaje.
En resumen, el objeto evento es tu ventana a la información específica del evento que pone en marcha tu función Lambda. Es fundamental inspeccionar y comprender la estructura del objeto evento para cada tipo de desencadenador que utilices, ya que te permitirá acceder a los datos relevantes para tu lógica de negocio.
¿Qué es el Objeto Contexto en AWS Lambda?
El objeto contexto, el segundo argumento de tu función handler, proporciona información valiosa sobre la invocación, la función y el entorno de ejecución de Lambda. A diferencia del objeto evento, que se centra en el desencadenante, el objeto contexto ofrece detalles sobre el entorno y el proceso de ejecución en sí.

El objeto contexto expone varios métodos y propiedades que pueden ser útiles dentro de tu función Lambda. Algunas de las propiedades y métodos más importantes incluyen:
context.function_name: Retorna el nombre de tu función Lambda.context.function_version: Retorna la versión de la función Lambda que se está ejecutando. Esto es útil para el control de versiones y el despliegue de actualizaciones.context.invoked_function_arn: Retorna el ARN (Amazon Resource Name) que se utilizó para invocar la función. Puede ser útil para verificar si se invocó una versión o alias específico de la función.context.memory_limit_in_mb: Retorna la cantidad de memoria (en MB) configurada para tu función Lambda. Esto te permite saber los recursos disponibles para tu ejecución.context.aws_request_id: Retorna un ID único para la solicitud de invocación actual. Este ID es útil para el seguimiento y la depuración en los logs de CloudWatch.context.log_group_name: Retorna el nombre del grupo de logs de CloudWatch asociado a tu función Lambda.context.log_stream_name: Retorna el nombre del stream de logs de CloudWatch para la instancia actual de tu función Lambda.context.get_remaining_time_in_millis(): Un método crucial que retorna la cantidad de tiempo restante (en milisegundos) antes de que la ejecución de la función Lambda se agote (timeout). Puedes usar esto para controlar el tiempo de ejecución y tomar decisiones dentro de tu código, por ejemplo, para detener un proceso largo antes de que se produzca un timeout.context.client_contextycontext.identity: Estos objetos están relacionados con la invocación de funciones Lambda desde aplicaciones móviles que utilizan AWS Mobile Hub o Amazon Cognito. Proporcionan información sobre la aplicación cliente y la identidad del usuario autenticado (si aplica).
El objeto contexto es una fuente valiosa de metadatos sobre la ejecución de tu función Lambda. Utilizar sus propiedades y métodos puede ayudarte a instrumentar tu código, monitorear el rendimiento y tomar decisiones basadas en el entorno de ejecución.
Diferencias Clave entre Objeto Evento y Objeto Contexto
Para resumir las diferencias fundamentales entre el objeto evento y el objeto contexto, podemos considerar la siguiente tabla comparativa:
| Característica | Objeto Evento | Objeto Contexto |
|---|---|---|
| Propósito Principal | Proporcionar datos sobre el evento que desencadenó la función. | Proporcionar información sobre la invocación, la función y el entorno de ejecución. |
| Contenido | Varía según el tipo de evento (S3, API Gateway, CloudWatch, etc.). Datos específicos del evento. | Información sobre la configuración de la función, límites de memoria, tiempo de ejecución, logs, etc. Metadatos del entorno y la ejecución. |
| Origen de la Información | El servicio o sistema que desencadena la función Lambda. | El entorno de ejecución de AWS Lambda. |
| Utilidad Principal | Procesar los datos del evento y ejecutar la lógica de negocio basada en ese evento. | Obtener metadatos sobre la ejecución, monitorear el rendimiento, depurar y tomar decisiones basadas en el entorno. |
| Ejemplos de Uso | Extraer el nombre del archivo de un evento de S3, obtener parámetros de una solicitud API Gateway, procesar un mensaje de SNS. | Obtener el tiempo restante de ejecución, registrar el ID de solicitud para depuración, verificar la versión de la función. |
Ejemplo de Código Básico (JavaScript)
El ejemplo de código más simple de una función Lambda en JavaScript (Node.js) ilustra el uso del objeto evento y el objeto contexto en la función handler:
exports.handler = async (event, context) => { console.log('Objeto Evento:', event); console.log('Objeto Contexto:', context); console.log('¡Hola mundo desde Lambda!'); }; En este ejemplo, la función handler recibe dos argumentos: event y context. Las líneas console.log muestran el contenido de ambos objetos en los logs de CloudWatch cuando se ejecuta la función. Este simple ejemplo te permite inspeccionar la estructura de los objetos evento y contexto para cualquier tipo de evento que desencadene tu función.
Creación de Eventos en AWS Lambda
Si bien el objeto evento se genera automáticamente por el servicio que invoca tu función Lambda, a veces necesitas crear eventos de prueba o eventos programados. AWS proporciona varias formas de crear y gestionar eventos para probar y automatizar la ejecución de tus funciones Lambda:
- AWS Management Console: Puedes utilizar la consola de AWS Lambda para invocar manualmente tu función Lambda con un evento de prueba. Al configurar una función en la consola, puedes crear y editar eventos de prueba JSON para simular diferentes escenarios de invocación.
- AWS CLI (Command Line Interface): La CLI de AWS te permite invocar funciones Lambda desde la línea de comandos, pasando un evento JSON como parámetro. Esto es útil para pruebas automatizadas y scripts de despliegue.
- AWS SDKs (Software Development Kits): Los SDKs de AWS, disponibles para varios lenguajes de programación (Python, JavaScript, Java, etc.), te permiten invocar funciones Lambda programáticamente desde tu código. Puedes construir el objeto evento en tu código y utilizar el SDK para invocar la función.
- Amazon CloudWatch Events (EventBridge): Como se mencionó anteriormente, CloudWatch Events (ahora EventBridge) es un servicio poderoso para programar eventos y enrutar eventos desde varios servicios de AWS. Puedes configurar reglas de CloudWatch Events para invocar tu función Lambda en un horario regular (usando expresiones cron) o en respuesta a eventos de otros servicios de AWS.
Para eventos programados, CloudWatch Events es la solución principal. Puedes definir reglas que se ejecuten a intervalos regulares (por ejemplo, cada hora, cada día, cada semana) o utilizando expresiones cron más complejas para programaciones específicas. Estos eventos programados pueden ser utilizados para tareas de mantenimiento, procesamiento por lotes, o cualquier tarea recurrente que necesites ejecutar sin servidores.

AWS Lambda en Python y Boto3
Python es un lenguaje de programación popular para desarrollar funciones AWS Lambda, en gran parte debido a la facilidad de uso del SDK de AWS para Python, conocido como Boto3. Boto3 simplifica la interacción con los servicios de AWS desde tu código Python, incluyendo la invocación de otras funciones Lambda, el acceso a bases de datos como DynamoDB, el almacenamiento de datos en S3, y mucho más.
Cuando trabajas con Python en AWS Lambda, el objeto evento y el objeto contexto siguen siendo los dos argumentos principales de tu función handler. La estructura de estos objetos es similar a la de otros lenguajes, aunque el acceso a los datos puede variar ligeramente según las convenciones de Python.
Boto3 te permite interactuar con los servicios de AWS de manera eficiente dentro de tu función Lambda en Python. Por ejemplo, si tu función necesita leer datos de una tabla de DynamoDB, puedes utilizar Boto3 para crear un cliente de DynamoDB y realizar operaciones de lectura y escritura. De manera similar, puedes utilizar Boto3 para enviar mensajes a SNS, interactuar con SQS (Simple Queue Service), y acceder a otros servicios de AWS según las necesidades de tu aplicación serverless.

El Objeto Contexto en Python
En Python, el objeto contexto en AWS Lambda ofrece las mismas propiedades y métodos que en otros lenguajes. Puedes acceder a la información sobre la función, la invocación y el entorno de ejecución utilizando las propiedades y métodos del objeto contexto. El siguiente ejemplo en Python muestra cómo acceder a algunas propiedades del objeto contexto:
import time def lambda_handler(event, context): print("ARN de la función Lambda:", context.invoked_function_arn) print("Nombre del stream de logs de CloudWatch:", context.log_stream_name) print("Nombre del grupo de logs de CloudWatch:", context.log_group_name) print("ID de solicitud de Lambda:", context.aws_request_id) print("Límite de memoria de la función Lambda (MB):", context.memory_limit_in_mb) time.sleep(1) # Simulación de tiempo de procesamiento print("Tiempo restante de Lambda (MS):", context.get_remaining_time_in_millis()) return { 'statusCode': 200, 'body': '¡Función Lambda ejecutada con éxito!' } Este código Python demuestra cómo puedes utilizar el objeto contexto para obtener información como el ARN de la función, los nombres de los logs de CloudWatch, el ID de solicitud, el límite de memoria y el tiempo restante de ejecución. Esta información puede ser muy útil para el monitoreo, la depuración y la optimización de tus funciones Lambda en Python.
Preguntas Frecuentes (FAQs)
- ¿Es obligatorio utilizar el objeto evento y el objeto contexto en mi función Lambda?
No es estrictamente obligatorio *utilizar* ambos objetos en tu código, pero sí son argumentos *requeridos* en la definición de tu función handler. Incluso si no necesitas la información del evento o del contexto en una función Lambda específica, tu handler debe aceptar ambos argumentos (aunque puedas ignorarlos en tu código). - ¿Cómo puedo inspeccionar el contenido del objeto evento y el objeto contexto?
La forma más sencilla de inspeccionar estos objetos es utilizarconsole.log()(en JavaScript/Node.js) oprint()(en Python) para imprimir los objetos en los logs de CloudWatch. Cuando ejecutes tu función Lambda, los logs mostrarán la estructura y el contenido de los objetos evento y contexto, lo que te permitirá comprender qué información está disponible. - ¿El objeto contexto es el mismo para todos los lenguajes de programación en AWS Lambda?
Sí, el objeto contexto proporciona un conjunto consistente de propiedades y métodos, independientemente del lenguaje de programación que utilices para tu función Lambda (Node.js, Python, Java, Go, etc.). Las propiedades y métodos básicos comofunction_name,memory_limit_in_mb,get_remaining_time_in_millis(), etc., estarán disponibles y funcionarán de manera similar en todos los entornos de ejecución de Lambda. - ¿Puedo modificar el objeto evento o el objeto contexto dentro de mi función Lambda?
No debes modificar ni intentar modificar el objeto evento o el objeto contexto dentro de tu función Lambda. Estos objetos son proporcionados por el entorno de ejecución de Lambda y representan información de entrada y metadatos del entorno. Modificarlos no tendrá ningún efecto en la invocación o el entorno, y podría llevar a comportamientos inesperados o errores. - ¿Dónde puedo encontrar la documentación completa del objeto contexto?
La documentación oficial de AWS Lambda proporciona detalles completos sobre el objeto contexto para cada lenguaje de programación compatible. Busca en la documentación de AWS Lambda la sección correspondiente a "Context Object" o "Lambda Context" para el lenguaje que estés utilizando (por ejemplo, "Python Lambda Context", "Node.js Lambda Context").
Conclusión
Comprender la diferencia entre el objeto evento y el objeto contexto es fundamental para desarrollar funciones AWS Lambda efectivas y robustas. El objeto evento te proporciona los datos necesarios para procesar el evento que desencadenó tu función, mientras que el objeto contexto te ofrece información valiosa sobre el entorno de ejecución y la invocación. Al dominar el uso de ambos objetos, podrás crear aplicaciones serverless más informadas, eficientes y fáciles de depurar. Dedica tiempo a explorar la estructura de estos objetos para los diferentes tipos de eventos que utilices y aprovecha la información del contexto para optimizar el rendimiento y la gestión de tus funciones Lambda.
