Mi Arquitectura Serverless 'Go-To' en AWS para Proyectos Rápidos y Escalables

Publicado el 17 de diciembre de 2023 en Cloud

Diagrama de una arquitectura serverless en AWS con API Gateway, Lambda y DynamoDB.

Cuando necesito lanzar un backend rápido para un proyecto personal o una Prueba de Concepto (PoC), no pierdo tiempo configurando servidores, balanceadores de carga o gestionando conexiones a bases de datos. Tengo una arquitectura “Go-To” en AWS que me permite tener una API funcionando en minutos, no en días.

En este artículo, quiero compartir esta plantilla serverless que he refinado con el tiempo. Es una combinación de tres servicios clave de AWS que, juntos, ofrecen una velocidad de desarrollo, una escalabilidad automática y una eficiencia en costos que son difíciles de superar. Es la base que uso para validar ideas rápidamente y construir cimientos sólidos para aplicaciones más grandes.

El Trío Serverless: API Gateway, Lambda y DynamoDB

Mi stack se basa en tres servicios que se integran a la perfección:

  1. API Gateway: El Recepcionista. Es la puerta de entrada pública y segura a nuestra lógica de negocio. Se encarga de recibir las peticiones HTTP, gestionar la seguridad (API Keys, autenticación), controlar el tráfico y dirigir cada petición a la función correcta.
  2. AWS Lambda: El Trabajador. Aquí es donde vive nuestro código (en mi caso, generalmente Python). Son funciones que se ejecutan bajo demanda, sin que tengamos que preocuparnos por el servidor subyacente. Si llegan 10 peticiones, AWS ejecuta 10 instancias; si llegan 10,000, escala automáticamente. Pagas solo por los milisegundos que tu código se está ejecutando.
  3. DynamoDB: El Archivador. Como las funciones Lambda no tienen estado, necesitamos un lugar para guardar los datos. DynamoDB es una base de datos NoSQL ultra-rápida, con latencia de un solo dígito de milisegundo, ideal para el acceso rápido que requieren las funciones serverless.

Viéndolo en Acción: Un Flujo Típico

La belleza de esta arquitectura es su simplicidad. Un flujo de datos para una petición común, como crear un nuevo usuario, se vería así:

Diagrama de Arquitectura Serverless en AWS

  1. Un cliente (una app web o móvil) envía una petición POST a api.misitio.com/usuarios.
  2. API Gateway recibe la petición en esa ruta y la dirige a la función Lambda crearUsuario.
  3. La función Lambda se ejecuta, valida los datos del cuerpo de la petición (nombre, email, etc.) y los escribe en la tabla Usuarios de DynamoDB.
  4. La función devuelve un 201 Created, que API Gateway transforma en una respuesta HTTP y la envía de vuelta al cliente.

Un ejemplo conceptual de cómo se vería la función Lambda en Python es sorprendentemente simple:

# fragmento de una función Lambda para crear un usuario
import boto3
import json

dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('Usuarios')

def handler(event, context):
    try:
        # 1. Obtener los datos del cuerpo de la petición
        body = json.loads(event['body'])
        user_id = body['user_id']
        email = body['email']

        # 2. Escribir en DynamoDB
        table.put_item(
            Item={
                'user_id': user_id,
                'email': email,
                'status': 'activo'
            }
        )
        
        # 3. Devolver una respuesta de éxito
        return {
            'statusCode': 201,
            'body': json.dumps({'message': 'Usuario creado con éxito'})
        }

    except Exception as e:
        # Manejo de errores
        return {
            'statusCode': 500,
            'body': json.dumps({'error': str(e)})
        }

Bonus: Infraestructura como Código (IaC)

Lo mejor de todo es que esta arquitectura completa (la API, la función, la tabla y los permisos entre ellos) se puede definir en un único archivo de configuración usando herramientas como Terraform o AWS SAM. Esto significa que puedes desplegar todo el backend con un solo comando, de forma repetible y segura.

Conclusión

Este stack serverless es mi receta para la velocidad y la escalabilidad. Me permite concentrarme en la lógica de negocio en lugar de en la gestión de infraestructura, reduce drásticamente los costos iniciales y me da la tranquilidad de que la aplicación puede crecer sin problemas.

Si buscas una forma eficiente de construir tus próximos proyectos, te recomiendo encarecidamente que pruebes esta combinación.

También te podría interesar


Foto de Osvaldo Trujillo

Escrito por

Osvaldo Trujillo

Ingeniero de Machine Learning, Arquitecto AWS y desarrollador. Apasionado por la tecnología y la creación de soluciones que aportan valor a través de los datos.

GitHub LinkedIn Contáctame