Nubify es una plataforma desarrollada en Python que simplifica la gestión de servicios cloud, ahora mismo cuenta únicamente con uso por CLI tanto de la herramienta completa como de un chatbot técnico inteligente pero en un futuro se planea la creación de una interfaz web accesible y la incorporación de nuevos aspectos 🚀.
Nubify está diseñado para usuarios que quieren comenzar en AWS pero encuentran muy complicada su UI y tienen miedo de crear algo mal configurado que incurra en altos costes.
- ✅ Inicio de sesión con variables de entorno
- ✅ Mostrar recursos disponibles en AWS
- ✅ Comandos con --help para recursos a desplegar
- ✅ Estimación de costes realista con AWS Pricing API
- ✅ Despliegue y eliminación de stacks
- ✅ Gestión de plantillas CloudFormation
- ✅ Chatbot que recomiende servicios
- ✅ Explicación de la estimación de costes
- ✅ Explicación y recomendación de servicios
- ✅ Creación de plantillas personalizadas
- ✅ Asistencia interactiva con IA (Gemini)
- AWS Pricing API integrada - Precios reales y actualizados
- Estimaciones por servicio - EC2, S3, Lambda con precios específicos
- Parámetros personalizables - InstanceType, MemorySize, etc.
- Fallback robusto - Estimaciones estáticas si API no está disponible
- Unidades correctas - /mes para servicios, /GB-mes para S3
- Modo verbose - Información detallada de la estimación con
-v
- Despliegue simplificado - Un comando para crear recursos
- Eliminación segura - Confirmación antes de eliminar
- Monitoreo en tiempo real - Estado de despliegue con progress bars
- Manejo de errores - Timeouts y fallbacks automáticos
- Configuración segura - Sin misconfiguraciones
- Parámetros validados - Verificación antes del despliegue
- Documentación integrada - Descripción y detalles de cada plantilla
# Instalar nubify globalmente desde GitHub
pipx install git+https://github.com/danibarranqueroo/nubify.git
# Configurar variables de entorno
export AWS_ACCESS_KEY_ID=tu_access_key
export AWS_SECRET_ACCESS_KEY=tu_secret_key
export AWS_DEFAULT_REGION=us-east-1
export GEMINI_API_KEY=tu_gemini_api_key
# ¡Listo! Ya puedes usar nubify
nubify --help- Python 3.9 o superior
- Poetry
- Credenciales de AWS configuradas
# Clonar el repositorio
git clone <repository-url>
cd nubify
# Instalar Poetry si no está instalado
curl -sSL https://install.python-poetry.org | python3 -
# Instalar dependencias y configurar el entorno
poetry install
# Activar el entorno virtual
poetry env activate
source $(poetry env info --path)/bin/activate
# Crear archivo de configuración
cp env.example .env
# Editar .env con tus credenciales de AWS- Crear archivo
.envcon tus credenciales AWS:
AWS_ACCESS_KEY_ID=tu_access_key
AWS_SECRET_ACCESS_KEY=tu_secret_key
AWS_DEFAULT_REGION=us-east-1
GEMINI_API_KEY=tu_gemini_api_key- Asegúrate de tener permisos adecuados en AWS para los servicios que vas a usar.
# Ver ayuda general
nubify --help
# Ver ayuda detallada de todos los comandos
nubify help
# Probar conexión con AWS
nubify test
# Listar recursos disponibles en AWS
nubify list-resources
# Ver plantillas disponibles
nubify list-templates
# Ver detalles de una plantilla
nubify template-details s3-bucket
# Estimación de costes con precios reales
nubify estimate-costs ec2-basic-no-key -p InstanceType=t3.micro
# Estimación de costes con información detallada
nubify estimate-costs ec2-basic-no-key -p InstanceType=t3.micro -v
# Desplegar un recurso
nubify deploy s3-bucket my-stack -p BucketName=mi-bucket-unico
# Desplegar con estimación detallada de costes
nubify deploy s3-bucket my-stack -p BucketName=mi-bucket-unico -v
# Listar stacks desplegados
nubify list-stacks
# Ver recursos de un stack
nubify stack-resources my-stack
# Eliminar un stack
nubify delete-stack my-stack
# Iniciar chatbot interactivo
nubify chat# Estimación de costes para EC2 (modo normal)
nubify estimate-costs ec2-basic-no-key -p InstanceType=t3.small
# Estimación de costes para EC2 (modo verbose)
nubify estimate-costs ec2-basic-no-key -p InstanceType=t3.small -v
# Estimación de costes para S3
nubify estimate-costs s3-bucket -p Versioning=Suspended
# Estimación de costes para Lambda
nubify estimate-costs lambda-function -p MemorySize=512
# Estimación de costes para RDS
nubify estimate-costs rds-basic -p DBInstanceClass=db.t3.small
# Desplegar con confirmación de costes
nubify deploy s3-bucket my-s3-stack -p BucketName=mi-bucket-unico
# Desplegar con estimación detallada de costes
nubify deploy s3-bucket my-s3-stack -p BucketName=mi-bucket-unico -v
# Chatbot para asistencia inteligente
nubify chatNubify incluye un chatbot interactivo que utiliza IA (Gemini) para ayudarte con:
- Explicación de servicios AWS - Qué es cada servicio y para qué sirve
- Creación de plantillas - Genera plantillas CloudFormation personalizadas
- Ayuda con comandos - Explica cómo usar nubify correctamente
- Resolución de problemas - Ayuda con errores comunes
- Recomendaciones - Sugiere servicios según tus necesidades
- Obtén una API key de Gemini en Google AI Studio
- Añade la variable de entorno:
GEMINI_API_KEY=tu_gemini_api_key# Iniciar chat interactivo
nubify chat
# Ejemplos de preguntas que puedes hacer:
# - "¿Qué es EC2 y para qué sirve?"
# - "Crea una plantilla para un bucket S3 con versionado"
# - "¿Cómo uso el comando deploy?"
# - "Tengo un error al desplegar, ¿qué hago?"
# - "¿Qué servicios AWS me recomiendas para una aplicación web?"# Instalar dependencias de desarrollo
poetry install --with dev
# Activar el entorno virtual
poetry env activate
source $(poetry env info --path)/bin/activate
# Ejecutar tests
poetry run pytest
# Ejecutar tests con cobertura
poetry run pytest --cov=src
# Formatear código
poetry run black src/
poetry run isort src/
# Verificar tipos
poetry run mypy src/
# Linting
poetry run flake8 src/nubify/
├── src/ # Código fuente
│ ├── __init__.py
│ ├── main.py # CLI principal
│ ├── config.py # Configuración AWS
│ ├── aws_client.py # Cliente AWS
│ ├── templates.py # Gestión de plantillas y Pricing API
│ ├── deployer.py # Despliegue con waiters mejorados
│ └── chat.py # Chatbot inteligente con IA
├── templates/ # Plantillas de CloudFormation
│ ├── ec2-basic.yaml
│ ├── ec2-basic-no-key.yaml
│ ├── s3-bucket.yaml
│ ├── lambda-function.yaml
│ └── rds-basic.yaml
├── tests/ # Tests unitarios
│ ├── __init__.py
│ ├── test_main.py # Tests para CLI principal
│ ├── test_config.py # Tests para configuración
│ ├── test_aws_client.py # Tests para cliente AWS
│ ├── test_templates.py # Tests para gestión de plantillas
│ ├── test_deployer.py # Tests para despliegue
│ └── test_chat.py # Tests para chatbot
├── pyproject.toml # Configuración Poetry
├── env.example # Variables de entorno de ejemplo
└── README.md # Este archivo
- Python 3.9+: Lenguaje principal
- Poetry: Gestión de dependencias y empaquetado
- boto3: SDK de AWS para Python
- AWS Pricing API: Estimación de costes reales
- Click: Framework para CLI
- Rich: Librería para interfaces de terminal bonitas
- CloudFormation: Para plantillas de infraestructura
- Google Generative AI: Chatbot inteligente con Gemini
- pytest: Framework de testing
- Black: Formateador de código
- mypy: Verificación de tipos
- PyYAML: Manejo de archivos YAML
- python-dotenv: Gestión de variables de entorno
- Instancia EC2 con configuración segura
- Security Group con puertos 22, 80, 443 abiertos
- Requiere KeyPair - Para acceso SSH
- Parámetros: InstanceType, KeyName
- Instancia EC2 con configuración segura
- Security Group con puertos 22, 80, 443 abiertos
- Sin requerimiento de KeyPair - Más fácil de usar
- Parámetros: InstanceType
- Bucket S3 con configuración segura
- Encriptación AES256 habilitada
- Bloqueo de acceso público
- Sin BucketPolicy problemática - Despliegue confiable
- Parámetros: BucketName, Versioning
- Función Lambda con configuración básica
- IAM Role con permisos mínimos
- CloudWatch Logs configurado
- Parámetros: FunctionName, Runtime, MemorySize, Timeout
- Instancia RDS MySQL con configuración segura
- Security Group con puerto 3306 abierto
- Encriptación habilitada y backups automáticos
- Parámetros: DBInstanceClass, DBName, DBUsername, DBPassword, AllocatedStorage
- Precios reales de AWS - Obtenidos via Pricing API
- Estimaciones por parámetro - Basadas en InstanceType, MemorySize, etc.
- Unidades correctas - /mes para servicios, /GB-mes para S3
- Fallback automático - Estimaciones estáticas si API no está disponible
- Debug transparente - Muestra qué productos se obtienen de la API
- Modo verbose - Información detallada con flag
-v
$ nubify estimate-costs ec2-basic-no-key -p InstanceType=t3.micro
🔍 Consultando AWS Pricing API para AmazonEC2...
✅ Respuesta recibida de Pricing API (1 productos)
💰 Precio EC2 (t3.micro): $0.010900/hora
Coste Total Estimado: $7.85/mes$ nubify estimate-costs ec2-basic-no-key -p InstanceType=t3.micro -v
🔍 Consultando AWS Pricing API para AmazonEC2...
✅ Respuesta recibida de Pricing API (1 productos)
🔍 Buscando precio de EC2 (t3.micro)...
💰 Precio EC2 (t3.micro): $0.010900/hora
📊 Cálculo: $0.010900 × 24 × 30.44 = $7.85/mes
Coste Total Estimado: $7.85/mesEste es un proyecto de Trabajo Fin de Grado. Para contribuir, por favor contacta con el autor.
Este proyecto está bajo la licencia MIT.
pipx upgrade git+https://github.com/danibarranqueroo/nubify.gitpipx uninstall nubifynubify --versionEn caso de continuar con el desarrollo de este proyecto a futuro, se planea lo siguiente:
- Mejora de la inteligencia artifical del chatbot
- Posibilidad de uso desde telegram
- Añadir más servicios de AWS
- Añadir más plantillas de CloudFormation
- Añadir integración con trivy para escaneo de vulnerabilidades en las plantillas
- Añadir integración con prowler para escaneo de vulnerabilidades en la infraestructura desplegada
- Estudiar la viabilidad de hacer la herramienta multicloud