Integrar Lambda con servicios de AWS

Aplicaciones sin servidor con AWS Lambda

Claudio Canales

Senior DevOps Engineer

El bucle de integración

  • Llega un evento.
  • Lógica del handler.
  • Llamada al SDK.

Bucle evento -> handler -> SDK

Aplicaciones sin servidor con AWS Lambda

Triggers vs llamadas al SDK

Trigger

  • Decide cuándo se ejecuta Lambda.

Llamada al SDK (dentro del handler)

  • Lee y escribe en servicios como DynamoDB y S3.

Trigger vs llamada al SDK

Aplicaciones sin servidor con AWS Lambda

Un ejemplo concreto

  • Un archivo llega a S3.
  • Se ejecuta Lambda.
  • Guarda un pequeño registro en DynamoDB.

Subida a S3 -> Lambda -> DynamoDB

Aplicaciones sin servidor con AWS Lambda

Payload del evento: encuentra lo que necesitas

{
  "Records": [{
    "s3": {
      "bucket": {"name": "…"},
      "object": {"key": "…"}
    }
  }]
}

Anotaciones del payload de evento de S3

Aplicaciones sin servidor con AWS Lambda

Dónde encaja el SDK de AWS

  • Tu código llama al SDK (boto3).
  • El SDK llama a las APIs de AWS.
  • IAM es el portero.

Handler -> SDK -> AWS API

Aplicaciones sin servidor con AWS Lambda

Rol de ejecución = credenciales

  • Credenciales temporales del rol de ejecución.
  • Sin access keys en el código.
  • Si el rol no puede llamar una API, falla la llamada del SDK.

El rol de ejecución proporciona credenciales

Aplicaciones sin servidor con AWS Lambda

Mínimo privilegio: acota acciones y recursos

  • Reduce el radio de impacto.
  • Concede solo acciones y recursos necesarios.
  • Evita comodines salvo que sean imprescindibles.

Mínimo privilegio: acciones y recursos

Aplicaciones sin servidor con AWS Lambda

DynamoDB: elige la operación adecuada

  • PutItem escribe.
  • GetItem lee por clave.
  • Query busca ítems relacionados.
  • Prefiere operaciones dirigidas frente a escaneos amplios.

Operaciones de DynamoDB

Aplicaciones sin servidor con AWS Lambda

S3: trabaja con bucket + key

  • Los objetos viven en bucket + key.
  • GetObject obtiene el contenido.
  • PutObject escribe un archivo derivado nuevo.

Bucket y clave de S3

Aplicaciones sin servidor con AWS Lambda

Pon la configuración en variables de entorno

  • Poner nombres fijos es frágil.
  • Usa variables de entorno.
  • Despliega el mismo código en dev y prod.

Configuración con variables de entorno

Aplicaciones sin servidor con AWS Lambda

Código con SDK: pequeño y testeable

import boto3
ddb = boto3.client("dynamodb")
def handler(event, context):
    ddb.put_item(
        TableName="files",
        Item={"pk": {"S": "1"}},
    )
  • Valida entradas, llama al SDK y devuelve.
  • Haz tests unitarios a la lógica pura.

Handler pequeño con llamada al SDK

Aplicaciones sin servidor con AWS Lambda

Maneja errores del SDK con intención

  • Los errores de permisos son comunes al inicio.
  • Si falla una llamada, que se note el porqué.
  • Buenos logs facilitan depurar con seguridad.

Rutas de éxito y fallo

Aplicaciones sin servidor con AWS Lambda

Si IAM está mal, el código parece bien

AccessDeniedException
required action denied
  • Arregla IAM primero y luego la lógica del handler.

Acceso denegado

Aplicaciones sin servidor con AWS Lambda

Idempotencia: reintentos y duplicados seguros

  • Puedes ver el mismo evento dos veces.
  • Las claves de idempotencia evitan duplicados.
  • Escrituras condicionales mantienen seguras las repeticiones.

Patrón de clave de idempotencia

Aplicaciones sin servidor con AWS Lambda

Uniéndolo todo (de extremo a extremo)

  • El evento de S3 trae bucket y key.
  • El handler los parsea.
  • PutItem escribe metadatos en DynamoDB.
  • CloudWatch Logs muestra lo ocurrido.

Resumen de integración de extremo a extremo

Aplicaciones sin servidor con AWS Lambda

Puntos clave

  • Separa disparadores de llamadas al SDK.
  • Mantén permisos estrictos con el rol de ejecución.
  • Haz portátil la config con variables de entorno.

Claves de la integración

Aplicaciones sin servidor con AWS Lambda

¡Vamos a practicar!

Aplicaciones sin servidor con AWS Lambda

Preparing Video For Download...