Este proyecto implementa un servicio CRUD de productos utilizando AWS Lambda y Spring Boot 3. Las imágenes asociadas a los productos se almacenan en un bucket de S3. Además, se utiliza Terraform para gestionar la infraestructura necesaria en AWS, incluyendo la base de datos PostgreSQL, S3, API Gateway y los permisos necesarios para la ejecución de la Lambda.
- Requisitos Previos
- Arquitectura
- Instalación
- Ejecución
- Flujo de la Aplicación
- Infraestructura con Terraform
- Dependencias
- Contribuciones
- Java: Versión 17 o superior.
- Maven: Para construir el proyecto.
- Terraform: Instalado y configurado.
- AWS CLI: Configurado con credenciales y permisos adecuados.
El proyecto sigue una arquitectura basada en AWS Lambda con los siguientes componentes principales:
- AWS Lambda: Funciones para manejar las operaciones CRUD.
- Amazon API Gateway: Punto de entrada para las solicitudes HTTP.
- Amazon S3: Almacenamiento de imágenes de productos.
- Amazon RDS (PostgreSQL): Base de datos para almacenar los datos de los productos.
- IAM Roles y Policies: Gestión de permisos para los recursos de AWS.
-
Clona el repositorio:
git clone https://github.com/DAVID-DAM/aws-lambda.git cd aws-lambda
-
Construye el proyecto usando Maven:
mvn clean package
-
Configura los recursos de AWS usando Terraform:
cd terraform terraform init terraform apply
Esto creará los recursos necesarios en tu cuenta de AWS.
-
Genera el artefacto
.jar
o.zip
necesario para AWS Lambda:mvn package
-
Despliega la función Lambda utilizando Terraform o manualmente a través de la consola de AWS.
-
Una vez desplegado, utiliza la URL proporcionada por API Gateway para interactuar con el servicio CRUD.
-
Operaciones CRUD:
- Crear, leer, actualizar y eliminar productos.
- Los datos de los productos se almacenan en PostgreSQL.
-
Gestión de Imágenes:
- Al crear o actualizar un producto, las imágenes asociadas se cargan a un bucket de S3.
- Las URLs de las imágenes se almacenan en la base de datos.
-
Respuesta:
- Los endpoints de API Gateway devuelven respuestas JSON con el estado de las operaciones y los datos de los productos.
- Lambda Function: Implementa la lógica del CRUD.
- API Gateway: Exposición de los endpoints HTTP.
- RDS (PostgreSQL): Base de datos para almacenamiento.
- S3 Bucket: Almacenamiento de imágenes.
- IAM Roles y Policies: Gestión de permisos para acceder a los recursos.
- Configura las variables db_username y db_password creando el archivo
terraform/secret.tfvars
. - Aplica los cambios con:
terraform apply
Esto creará y configurará automáticamente todos los recursos.
Las principales dependencias utilizadas en el proyecto son:
- Spring Boot: Para la estructura y lógica de la aplicación.
- Lombok: Reducción de código repetitivo.
- Spring Data JPA: Para la interacción con PostgreSQL.
- AWS SDK: Para interactuar con S3 y otros servicios de AWS.
¡Contribuciones son bienvenidas! Si tienes ideas, mejoras o encuentras algún problema, abre un issue o envía un pull request.