Descripción
Este proyecto despliega una API RESTful segura y sin servidor en AWS utilizando CloudFormation. La API recibe datos a través de un endpoint POST, los procesa con una función Lambda y los almacena en una tabla de DynamoDB.
Problema resuelto
Muchas aplicaciones necesitan una forma rápida, escalable y segura de capturar y almacenar datos desde clientes web o móviles. Esta solución proporciona un endpoint de API robusto que escala automáticamente con la demanda y sigue las mejores prácticas de seguridad, sin necesidad de gestionar servidores.
Arquitectura
La arquitectura es 100% sin servidor y se compone de los siguientes servicios:
- Amazon API Gateway: Proporciona un endpoint RESTful (POST /items) para recibir los datos.
- AWS Lambda: Una función escrita en Python que contiene la lógica de negocio para procesar y validar los datos de entrada.
- Amazon DynamoDB: Una base de datos NoSQL totalmente gestionada para almacenar los datos de forma persistente.
- AWS IAM: Define roles y políticas con privilegios mínimos para que los servicios interactúen de forma segura.
- Amazon CloudWatch: Recopila logs y métricas para monitoreo y auditoría.
+-----------------+ +---------------------+ +-----------------+
| Cliente |----->| API Gateway |----->| AWS Lambda |
| (Web/M
vil/App) | | (Endpoint POST) | | (Python) |
+-----------------+ +---------------------+ +-------+---------+
|
|
v
+-------+---------+
| Amazon |
| DynamoDB |
+-----------------+
Prerrequisitos
- Cuenta de AWS con permisos para crear los recursos mencionados.
- AWS CLI configurado localmente.
- Python 3.9+ (para empaquetar la función Lambda si se modifica).
- Un cliente de API como Postman o
curlpara probar el endpoint.
Pasos de Despliegue
-
Clonar el repositorio (si aplica)
# Este paso es un placeholder si el código estuviera en un repo # git clone <url-del-repositorio> # cd <directorio-del-proyecto> -
Empaquetar la función Lambda
Este proyecto no requiere dependencias externas para la función Lambda, por lo que no es necesario empaquetar nada. El código se incluye directamente en la plantilla de CloudFormation.
-
Desplegar la pila de CloudFormation
Utiliza la AWS CLI para desplegar la plantilla
template.yaml:aws cloudformation create-stack \ --stack-name secure-serverless-api \ --template-body file://template.yaml \ --capabilities CAPABILITY_IAM \ --region us-east-1 # Reemplaza con tu región -
Verificar el despliegue
Puedes verificar el estado de la pila en la consola de AWS CloudFormation. Una vez que el estado sea
CREATE_COMPLETE, ve a la pestaña "Outputs" para encontrar la URL de la API (ApiEndpointUrl).
Instrucciones de uso
Puedes enviar una solicitud POST al endpoint de la API para crear un nuevo ítem.
-
Obtén la URL del API de los outputs de la pila de CloudFormation.
-
Usa
curlpara enviar una solicitud:curl -X POST \ <ApiEndpointUrl>/items \ -H "Content-Type: application/json" \ -d '{ "id": "12345", "nombre": "Mi Producto", "descripcion": "Descripci
n de prueba", "precio": 99.99 }' ```
-
Respuesta exitosa:
Si la solicitud es exitosa, recibir
s una respuesta con el código de estado 200 OK y un cuerpo JSON:
```json
{
"message": "
tem creado exitosamente" } ```
-
Verifica en DynamoDB:
Puedes ir a la consola de Amazon DynamoDB, seleccionar la tabla
ItemsTabley verificar que el nuevo ítem ha sido creado.
Pasos de limpieza
Para eliminar todos los recursos creados y evitar costos adicionales, elimina la pila de CloudFormation:
aws cloudformation delete-stack \
--stack-name secure-serverless-api \
--region us-east-1 # Reemplaza con tu región
Consideraciones de seguridad
- IAM (Least Privilege): La función Lambda tiene un rol de ejecución con permisos estrictamente limitados para escribir en la tabla de DynamoDB y crear logs en CloudWatch.
API Gateway: No se ha configurado autorización en la API para simplificar el ejemplo, pero en un entorno de producción se recomienda habilitar un autorizador (e.g.,
AWS_IAMo un autorizador de Cognito). - Variables de Entorno: No se almacenan secretos en el código. La plantilla de CloudFormation pasa el nombre de la tabla de DynamoDB a la función Lambda como una variable de entorno.
- Logs: Todas las invocaciones y logs son capturados en CloudWatch para auditoría.
Revisión Well-Architected
- Excelencia Operativa: La infraestructura como código (IaC) con CloudFormation permite despliegues automatizados y consistentes. El monitoreo se centraliza en CloudWatch.
- Seguridad: Se aplican los principios de privilegios mínimos y se separan los componentes.
- Fiabilidad: El uso de servicios gestionados por AWS (API Gateway, Lambda, DynamoDB) proporciona alta disponibilidad y resiliencia.
- Eficiencia de Rendimiento: La arquitectura sin servidor escala automáticamente para manejar la carga de trabajo sin intervención manual.
- Optimización de Costos: El modelo de pago por uso de los servicios sin servidor asegura que solo se paga por los recursos consumidos. No hay costos de inactividad.
Mejoras futuras
- Autorización de API: Integrar Amazon Cognito para autenticar y autorizar a los usuarios.
- Validación de Entrada: Añadir un modelo de solicitud en API Gateway para validar el esquema del JSON de entrada antes de invocar la Lambda.
- Manejo de Errores: Implementar un manejo de errores más robusto en la función Lambda y devolver códigos de estado HTTP apropiados.
- CI/CD: Crear un pipeline con AWS CodePipeline para automatizar el despliegue de cambios.