- Java 94.1%
- TypeScript 1.8%
- Python 1.7%
- Shell 1.1%
- Go 1%
- Other 0.1%
| .github | ||
| .mvn/wrapper | ||
| .understand-anything | ||
| bin | ||
| compatibility-tests | ||
| docker | ||
| docs | ||
| openwiki | ||
| overrides | ||
| scripts | ||
| src | ||
| tools/docs | ||
| .coderabbit.yaml | ||
| .dockerignore | ||
| .gitattributes | ||
| .gitignore | ||
| .no-mistakes.yaml | ||
| .releaserc.json | ||
| AGENTS.md | ||
| biome.json | ||
| CHANGELOG.md | ||
| CODE_OF_CONDUCT.md | ||
| CONTRIBUTING.md | ||
| docker-compose.yml | ||
| Dockerfile | ||
| lefthook.yml | ||
| LICENSE | ||
| Makefile | ||
| mem0.yaml | ||
| mkdocs.yml | ||
| mvnw | ||
| mvnw.cmd | ||
| nginx.conf | ||
| pom.xml | ||
| README.md | ||
| SECURITY.md | ||
☁️ Floci
Floci es un emulador local de servicios en la nube de Amazon Web Services (AWS) ultrarrápido, ligero y de alto rendimiento. Diseñado en Java y preparado para compilación nativa con GraalVM, Floci permite a los desarrolladores simular un entorno AWS completo en su máquina local sin incurrir en costes de infraestructura real y con tiempos de respuesta casi instantáneos.
A diferencia de otras soluciones más pesadas, Floci integra un proxy TLS inteligente capaz de discriminar protocolos mediante first-byte sniffing en un único puerto (4566), ofreciendo compatibilidad nativa tanto para tráfico HTTP como HTTPS, emulación de catálogos de precios de AWS, recarga en caliente (hot reload) para AWS Lambda, y enrutamiento dinámico para servicios como SQS, EC2, RDS y ElastiCache.
🚀 Características Principales
- Emulación Multi-Servicio: Soporte integrado para simular AWS Lambda, Amazon S3, Amazon EC2, Amazon SQS, Amazon RDS (a través de proxy) y Amazon ElastiCache (Redis).
- Puerto Único unificado (
4566): Tráfico HTTP y HTTPS/TLS en el mismo puerto gracias a un proxy de detección de primer byte (ProtocolClaimer). - Compilación Nativa (GraalVM): Configuración lista para generar imágenes nativas ultrarrápidas y de bajo consumo de memoria (configuraciones bajo
META-INF/native-image). - Recarga en Caliente de Lambdas: Ejecuta y prueba tus funciones AWS Lambda locales reflejando los cambios de código al instante (
FLOCI_SERVICES_LAMBDA_HOT_RELOAD_ENABLED). - Catálogo de Precios Local: Incluye instantáneas (snapshots) de precios reales de servicios AWS (S3, Lambda, EC2 en
us-east-1) para simular llamadas a la API de AWS Pricing. - Consola de Control Integrada: Interfaz de usuario web integrada (UI) servida directamente en el arranque para monitorizar los servicios y recursos activos.
🛠️ Tecnologías y Librerías
El core del proyecto está construido utilizando tecnología de vanguardia dentro del ecosistema Java y herramientas de contenedores:
- Lenguaje Base: Java 17+ (con soporte para compilación nativa GraalVM).
- Motor de Plantillas: Apache Velocity (utilizado para procesar respuestas y payloads dinámicos de AWS).
- Formato de Serialización: Soporte nativo para AWS CBOR (
AwsCborContentTypeFilter) y JSON de AWS. - Contenerización y Red: Docker & Docker Compose con soporte para alias de red locales (
localhost.floci.io). - Frontend Integrado: Interfaz web estática sencilla (HTML5) para la visualización del estado del emulador.
📁 Estructura de Carpetas
A continuación se detalla la estructura organizativa de los componentes clave de Floci:
floci/
├── .github/ # Workflows de CI/CD (compatibilidad, testing)
├── src/
│ └── main/
│ ├── java/
│ │ └── io/github/hectorvent/floci/
│ │ ├── core/common/
│ │ │ ├── AwsCborContentTypeFilter.java # Filtro para payloads binarios CBOR de AWS
│ │ │ ├── SqsQueueUrlRouterFilter.java # Enrutador inteligente para colas SQS
│ │ │ └── ProtocolClaimer.java # Sniffer para auto-detectar HTTP/TLS en el puerto 4566
│ │ └── tools/ami/
│ │ └── AmiImageTool.java # Utilidad para emulación de imágenes de máquina Amazon (AMI)
│ └── resources/
│ ├── application.yml # Configuración principal de la aplicación Java
│ ├── default_banner.txt # Banner de inicio en consola
│ ├── certs/ # Certificados raíz para la emulación SSL/TLS (Amazon Root CA)
│ ├── ec2/ # Catálogos simulados de tipos de instancia e imágenes EC2
│ ├── META-INF/native-image/ # Metadatos para compilación con GraalVM Native Image
│ ├── pricing-snapshots/ # Mocks y snapshots de la API de AWS Pricing (S3, Lambda, EC2)
│ └── ui/ # Interfaz gráfica web integrada (index.html, starting.html)
├── Dockerfile # Dockerfile de producción basado en Nginx para la UI / Proxy
├── docker-compose.yml # Configuración del entorno de ejecución multi-servicio de Floci
├── pom.xml # Descriptor del proyecto Maven (dependencias y construcción)
├── lefthook.yml # Orquestador de Git Hooks para validación rápida
└── biome.json # Configuración de linter y formateador de la UI
💻 Instalación y Ejecución Local
Puedes ejecutar Floci de dos formas: de manera nativa con Maven (para desarrollo de la herramienta) o de forma rápida utilizando Docker Compose.
Requisitos Previos
- Java 17 o superior (si deseas compilar el backend).
- Maven instalado o mediante el wrapper
./mvnw. - Docker y Docker Compose instalados en tu sistema.
Opción 1: Ejecución Rápida con Docker Compose (Recomendado)
La forma más rápida de levantar Floci con todos los puertos y redes mapeados es a través de Docker:
# Levantar el contenedor de Floci
docker-compose up -d
Esto expondrá los siguientes puertos en tu máquina local:
4566: Endpoint unificado de AWS (S3, Lambda, SQS, EC2, etc. en HTTP/HTTPS).6379-6399: Emulación de instancias Redis (ElastiCache).7001-7099: Proxies para emulación de bases de datos RDS.9200-9299: Emulación de nodos Elasticsearch / OpenSearch.
Para verificar que está corriendo, abre en tu navegador:
http://localhost:4566
(Verás la interfaz web de inicio de Floci)
Opción 2: Construcción y Ejecución en Desarrollo (Maven)
Si estás realizando modificaciones en el core de Floci, puedes compilarlo y ejecutarlo localmente de la siguiente manera:
-
Compilar el proyecto:
./mvnw clean install -
Ejecutar la aplicación Spring Boot / Java:
./mvnw spring-boot:run -
Compilación Nativa (GraalVM): Si tienes configurado un entorno GraalVM compatible, puedes compilar la imagen nativa ultrarrápida usando el perfil correspondiente de Maven:
./mvnw package -Pnative
⚙️ Gobernanza del Proyecto
Este repositorio sigue unas pautas de calidad estrictas mediante herramientas automatizadas integradas en el ciclo de vida del desarrollo local:
- Validaciones de Git (Hooks): Se utiliza
Lefthookpara orquestar pre-commits rápidos, asegurando que el código no contenga errores estructurales antes de confirmar cambios. - Formateo y Linting: La UI y el código JavaScript/HTML se validan mediante
Biome(biome.json), garantizando la máxima consistencia en el estilo de código del frontend. - Auditoría de Seguridad: El proyecto cuenta con análisis estáticos automatizados mediante scripts internos de seguridad y el motor de auditoría
Bumblebee. - Control de Integración: Un proxy git local (
no-mistakes) previene la subida involuntaria de configuraciones de desarrollo críticas o credenciales expuestas.
Megacore - Automatizando y estandarizando la calidad del software en Megasoft.