Lambda es el servicio mas evaluado en el examen DVA-C02. Para quienes son nuevos en Lambda, comencemos con lo basico. Lambda es un servicio que te permite ejecutar codigo sin gestionar servidores por ti mismo. Piensalo como una "maquina expendedora de codigo" — asi como insertas una moneda (ocurre un evento) y obtienes la bebida que quieres (se ejecuta el codigo), simplemente escribes tu funcion sin preocuparte por los servidores. Este articulo explica, de manera accesible para principiantes, lo que necesitas saber cuando realmente desarrollas y configuras Lambda.
Configuracion principal de Lambda
Variables de entorno — Separar el codigo de la configuracion
Es muy peligroso codificar informacion sensible como contrasenas de base de datos o claves API directamente en el codigo. Las variables de entorno son una forma de inyectar estos valores de configuracion desde fuera del codigo. Piensalo como mantener separados el menu de un restaurante y la receta — el codigo (la receta) permanece igual, pero puedes cambiar los valores de configuracion (informacion del proveedor) de forma independiente. Usando KMS (Key Management Service), puedes cifrar las variables de entorno para un almacenamiento aun mas seguro.
Lambda Layers — Compartir bibliotecas comunes
Imagina que multiples funciones Lambda usan la misma biblioteca (por ejemplo, una biblioteca de procesamiento de imagenes o utilidades comunes). Incluir la misma biblioteca en cada funcion crea duplicacion y dificulta la gestion. Lambda Layers empaqueta las bibliotecas de uso comun como una capa separada que multiples funciones pueden compartir. Es como la sala de suministros compartidos de una empresa: los equipos no necesitan comprar sus propios suministros, todos usan recursos compartidos.
Memoria y Timeout
Al ejecutar una funcion Lambda, estableces dos limites.
La memoria se puede configurar de 128MB a 10,240MB (alrededor de 10GB). Un punto importante: aumentar la memoria aumenta proporcionalmente el rendimiento de la CPU tambien. Si una funcion es lenta, una opcion es aumentar la asignacion de memoria.
El timeout es el tiempo maximo que puede ejecutarse una funcion, hasta 15 minutos. Las tareas que tardan mas de 15 minutos no pueden manejarse solo con Lambda, por lo que necesitaras usar Step Functions u otro servicio.
Modelos de concurrencia — Como se manejan multiples solicitudes simultaneamente
Cuando llegan solicitudes, Lambda crea automaticamente nuevos entornos de ejecucion para manejarlos en paralelo. Esto es la concurrencia.
Concurrencia reservada
Esta es una forma de pre-asignar un numero fijo de ejecuciones simultaneas a una funcion especifica. Por ejemplo, si estableces Concurrencia reservada en 100 para una funcion de pago, esa funcion siempre tiene garantizados 100 entornos de ejecucion incluso cuando otras funciones estan muy ocupadas. Establecerla en 0 deshabilita la funcion completamente, lo cual es util para detener una funcion especifica durante el mantenimiento.
Concurrencia provisionada
Para entender esto, primero necesitas conocer los cold starts. Lambda no mantiene entornos de ejecucion listos cuando no hay solicitudes. Cuando llega una solicitud repentinamente, necesita crear un nuevo entorno, y este tiempo de preparacion (el cold start) hace que la respuesta inicial sea mas lenta. La Concurrencia provisionada pre-calienta los entornos de ejecucion para que los cold starts se eliminen. Cuesta mas, pero es apropiada para servicios donde la latencia importa (por ejemplo, transacciones financieras en tiempo real o juegos).
!Reserved vs Provisioned Concurrency
Cold Start vs Warm Start
Un cold start es el proceso de preparacion por el que pasa Lambda cuando se ejecuta por primera vez. Crea un nuevo entorno de ejecucion, descarga el paquete de codigo, inicializa el runtime (Python, Java, etc.) y solo entonces ejecuta el codigo real (el handler). Es como el tiempo de arranque cuando enciendes una PC por primera vez.
Un warm start ocurre cuando se reutiliza un entorno de ejecucion ya preparado. Solo se ejecuta el handler, por lo que es muy rapido. Es como lanzar un programa inmediatamente en una PC que ya esta encendida.
Hay tres formas de reducir los cold starts. Primero, usa Concurrencia provisionada. Segundo, coloca el codigo de conexion a la base de datos e inicializacion fuera de la funcion handler — esto permite reutilizar la conexion en los warm starts. Tercero, mantén pequeno el paquete de despliegue. Cuanto menos codigo haya que descargar, mas rapido inicia la funcion.
Ejecutar Lambda en una VPC
Una VPC (Virtual Private Cloud) es una red privada virtual que creas dentro de AWS. Si Lambda necesita acceder a una base de datos (como RDS) en una subred privada que no es directamente accesible desde el exterior, necesitas conectar Lambda a la VPC.
Un Lambda conectado a una VPC crea una ENI (Elastic Network Interface), una tarjeta de red virtual, en la subred de la VPC. Esto le permite acceder a los recursos dentro de la misma VPC.
Una nota importante: un Lambda conectado a una VPC no puede acceder a internet de forma predeterminada. Si se necesita acceso a internet, necesitaras enrutar a traves de una subred publica que tenga un NAT Gateway, o usar un VPC Endpoint.
Manejo de errores — Que sucede cuando las cosas fallan
DLQ (Dead Letter Queue)
Cuando una funcion Lambda que fue invocada de forma asincrona falla, puedes enviar ese evento de fallo a una cola SQS o un topico SNS. Esto te permite analizar o reprocesar el evento de fallo posteriormente.
Lambda Destinations
Este es un enfoque mas potente que la DLQ. Puedes especificar destinos separados (SQS, SNS, Lambda, EventBridge) para cuando la funcion tiene exito y cuando falla. Por ejemplo, puedes configurarlo para que en caso de exito se invoque el siguiente Lambda, y en caso de fallo se envie una alerta a SNS, dandote un control flexible y granular.
Puntos clave para el examen
"Compartir bibliotecas comunes entre multiples funciones" -- Lambda Layers
"Eliminar cold starts" -- Concurrencia provisionada
"Fijar ejecuciones simultaneas para una funcion especifica" -- Concurrencia reservada
"Deshabilitar una funcion" -- Establecer Concurrencia reservada en 0
"Acceder a RDS en VPC" -- Conectar Lambda a VPC (necesita ENI)
"Lambda en VPC necesita acceso a internet" -- Se necesita NAT Gateway
"Manejar fallos de invocacion asincrona" -- DLQ o Lambda Destinations
"Diferentes destinos para exito vs fallo" -- Lambda Destinations
Colocar el codigo de inicializacion fuera del handler para reutilizar conexiones, lo que mejora el rendimiento