Introducción a AWS Lambda
AWS Lambda es un servicio de computación sin servidor que te permite ejecutar código sin aprovisionar ni gestionar servidores. Con Lambda, puedes ejecutar código para casi cualquier tipo de aplicación o servicio backend, todo con cero administración.
Conceptos Clave
- Función Lambda: Es una unidad de ejecución de código en AWS Lambda. Cada función tiene su propio código y configuración.
- Evento: Es una acción que desencadena la ejecución de una función Lambda. Los eventos pueden provenir de otros servicios de AWS, como S3, DynamoDB, o incluso solicitudes HTTP a través de API Gateway.
- Tiempo de ejecución: Es el entorno en el que se ejecuta tu código. AWS Lambda soporta varios lenguajes de programación, incluyendo Node.js, Python, Java, y más.
- Desencadenadores: Son las fuentes de eventos que pueden invocar tu función Lambda.
Ventajas de AWS Lambda
- Sin servidor: No necesitas gestionar servidores ni preocuparte por la infraestructura subyacente.
- Escalabilidad automática: Lambda escala automáticamente en respuesta al número de eventos entrantes.
- Pago por uso: Solo pagas por el tiempo de ejecución de tu código y la cantidad de solicitudes.
Configuración de una Función Lambda
Paso 1: Crear una Función Lambda
-
Accede a la Consola de AWS Lambda:
- Inicia sesión en la consola de administración de AWS.
- Navega a Servicios y selecciona Lambda.
-
Crear una nueva función:
- Haz clic en Crear función.
- Selecciona Crear desde cero.
- Proporciona un nombre para tu función.
- Selecciona el tiempo de ejecución (por ejemplo, Python 3.8).
- Configura un rol de ejecución. Puedes crear un nuevo rol con permisos básicos de Lambda.
-
Escribir el código de la función:
- En la sección de código, puedes escribir tu función directamente en el editor en línea o subir un archivo ZIP con tu código.
- Ejemplo de código en Python:
import json def lambda_handler(event, context): # TODO: write your code here return { 'statusCode': 200, 'body': json.dumps('Hello from Lambda!') }
-
Configurar el desencadenador:
- En la sección de Desencadenadores, puedes agregar una fuente de eventos que invocará tu función Lambda, como un bucket de S3, una tabla de DynamoDB, o una API Gateway.
-
Guardar y probar:
- Haz clic en Guardar.
- Puedes probar tu función Lambda creando un evento de prueba en la consola.
Paso 2: Probar la Función Lambda
-
Crear un evento de prueba:
- En la consola de Lambda, selecciona tu función.
- Haz clic en Probar.
- Configura un evento de prueba con datos de ejemplo.
- Haz clic en Crear y luego en Probar.
-
Ver los resultados:
- La consola mostrará el resultado de la ejecución de tu función Lambda, incluyendo el estado de la respuesta y cualquier salida de registro.
Ejemplo Práctico: Procesamiento de Imágenes con S3 y Lambda
Escenario
Queremos crear una función Lambda que se active cada vez que se suba una imagen a un bucket de S3. La función Lambda procesará la imagen y generará una versión en miniatura.
Paso 1: Configurar el Bucket de S3
- Crear un bucket de S3:
- En la consola de S3, crea un nuevo bucket.
- Configura los permisos y políticas necesarias para permitir que Lambda acceda al bucket.
Paso 2: Crear la Función Lambda
-
Crear la función Lambda:
- Sigue los pasos mencionados anteriormente para crear una nueva función Lambda.
- Selecciona Python 3.8 como tiempo de ejecución.
-
Escribir el código de la función:
- Ejemplo de código para procesar imágenes:
import boto3 from PIL import Image import io s3 = boto3.client('s3') def lambda_handler(event, context): bucket = event['Records'][0]['s3']['bucket']['name'] key = event['Records'][0]['s3']['object']['key'] # Descargar la imagen desde S3 response = s3.get_object(Bucket=bucket, Key=key) image_content = response['Body'].read() # Procesar la imagen image = Image.open(io.BytesIO(image_content)) image.thumbnail((128, 128)) # Guardar la imagen procesada en un nuevo bucket buffer = io.BytesIO() image.save(buffer, 'JPEG') buffer.seek(0) s3.put_object(Bucket='processed-images-bucket', Key=key, Body=buffer, ContentType='image/jpeg') return { 'statusCode': 200, 'body': 'Image processed successfully' }
- Ejemplo de código para procesar imágenes:
-
Configurar el desencadenador de S3:
- En la sección de Desencadenadores, agrega el bucket de S3 que creaste.
- Configura el evento para que se active en la creación de objetos (subida de imágenes).
-
Guardar y probar:
- Guarda la función Lambda.
- Sube una imagen al bucket de S3 y verifica que la función Lambda se ejecute y procese la imagen correctamente.
Ejercicios Prácticos
Ejercicio 1: Crear una Función Lambda Básica
Objetivo: Crear una función Lambda que devuelva un saludo personalizado.
-
Crear una función Lambda:
- Nombre:
HelloLambda
- Tiempo de ejecución: Python 3.8
- Nombre:
-
Escribir el código:
import json def lambda_handler(event, context): name = event.get('name', 'World') return { 'statusCode': 200, 'body': json.dumps(f'Hello, {name}!') }
-
Probar la función:
- Crear un evento de prueba con el siguiente JSON:
{ "name": "Alice" }
- Verificar que la respuesta sea
Hello, Alice!
.
- Crear un evento de prueba con el siguiente JSON:
Ejercicio 2: Procesar Datos de DynamoDB con Lambda
Objetivo: Crear una función Lambda que se active cuando se inserte un nuevo ítem en una tabla de DynamoDB y registre el ítem en CloudWatch Logs.
-
Crear una tabla de DynamoDB:
- Nombre:
MyTable
- Clave de partición:
ID
(String)
- Nombre:
-
Crear una función Lambda:
- Nombre:
LogDynamoDBItem
- Tiempo de ejecución: Python 3.8
- Nombre:
-
Escribir el código:
import json import logging logger = logging.getLogger() logger.setLevel(logging.INFO) def lambda_handler(event, context): for record in event['Records']: if record['eventName'] == 'INSERT': new_image = record['dynamodb']['NewImage'] logger.info(f'New item added: {json.dumps(new_image)}') return { 'statusCode': 200, 'body': 'Success' }
-
Configurar el desencadenador de DynamoDB:
- En la sección de Desencadenadores, agrega la tabla de DynamoDB.
- Configura el evento para que se active en la inserción de nuevos ítems.
-
Probar la función:
- Inserta un nuevo ítem en la tabla de DynamoDB y verifica los registros en CloudWatch Logs.
Conclusión
En esta sección, hemos aprendido sobre AWS Lambda, sus ventajas y cómo crear y configurar funciones Lambda. También hemos explorado ejemplos prácticos y ejercicios para reforzar los conceptos aprendidos. Con AWS Lambda, puedes construir aplicaciones y servicios backend sin preocuparte por la infraestructura subyacente, permitiéndote enfocarte en escribir código y resolver problemas de negocio. En el próximo módulo, exploraremos otros servicios principales de AWS que complementan el uso de Lambda en tus aplicaciones.
Curso de AWS
Módulo 1: Introducción a AWS
- ¿Qué es AWS?
- Configuración de tu cuenta de AWS
- Infraestructura global de AWS
- Consola de administración de AWS