- Network (VPC, subnets)
- DNS
- Database
- Redis/Valkey
- Clúster Kubernetes (EKS, GKE o AKS)
Por qué usarlo
Provisionar infraestructura no debería ser lento, inconsistente o propenso a errores. Elmidaz-terraform-foundation te ayuda a moverte rápido mientras te mantienes alineado con las mejores prácticas de Lerian para seguridad, observabilidad y escalabilidad. Así es como se compara con configuraciones manuales o ad-hoc:
Velocidad y estandarización
| Criterio | Con Midaz Terraform | Configuración manual / Scripts ad-hoc |
|---|---|---|
| Velocidad de configuración | Rápido – provisiona todo en minutos con un solo apply. | Lento – toma días configurar y probar. |
| Estándar de arquitectura | Estandarizado – sigue las mejores prácticas de Lerian. | Impredecible – puede ser inconsistente. |
| Reusabilidad | Alta – soporta múltiples entornos con cambios mínimos. | Baja – difícil de reutilizar entre proyectos. |
Seguridad y observabilidad
| Criterio | Con Midaz Terraform | Configuración manual / Scripts ad-hoc |
|---|---|---|
| Seguridad por defecto | Sí – seguro por diseño (VPCs aisladas, IAM, secrets, etc.). | No – depende del equipo, aumentando el riesgo de exposición. |
| Observabilidad incorporada | Incorporada – se integra con Prometheus, Grafana y más. | Manual – requiere configuración separada, a menudo omitida. |
| ¿Listo para producción? | Sí – alta disponibilidad y autoscaling desde el inicio. | Incierto – necesita esfuerzo extra para endurecer. |
Mantenimiento y soporte
| Criterio | Con Midaz Terraform | Configuración manual / Scripts ad-hoc |
|---|---|---|
| Mantenibilidad | Fácil – modular y versionado para actualizaciones sin dolor. | Difícil – los scripts se rompen fácilmente. |
| Soporte de Lerian | Incluido – verificado y soportado por Lerian. | Ninguno – no garantizado. |
| Tiempo estimado de despliegue | 1 día – incluyendo validación. | 1–2 semanas – con mayor riesgo operacional. |
Lo que necesitarás
Antes de comenzar, asegúrate de tener:- Terraform v1.0.0 o superior
- Una cuenta de proveedor de nube (AWS, GCP o Azure).
- Un bucket de almacenamiento para archivos de estado de Terraform.
-
La herramienta CLI para tu proveedor de nube:
awspara AWSgcloudpara GCPazpara Azure
Integración CI/CD
Este repositorio proporciona ejemplos de Terraform para desplegar infraestructura fundamental. No incluye un pipeline CI/CD. Necesitarás crear uno basado en las necesidades de tu proyecto. ¿Ya ejecutas un pipeline CI/CD de Terraform? Esto es lo que debes hacer:Estructura del proyecto
El repositorio está diseñado con una estructura única para cada proveedor de nube. Esto significa que cada componente de la infraestructura está organizado para soportar un enfoque modular y controlado. Tienes la flexibilidad de desplegar solo lo que necesitas, o ir todo incluido con toda la base si lo prefieres.El orden de despliegue importa
Para evitar errores y asegurar que todo se conecte correctamente, recomendamos desplegar componentes en esta secuencia:- VPC / Network
- DNS
- Database
- Redis/Valkey
- Clúster Kubernetes
Creando el almacenamiento de estado
Terraform requiere un backend remoto para gestionar su estado. Para comenzar con estas plantillas, es esencial configurar primero un bucket de almacenamiento para los archivos de estado de Terraform.AWS
No olvides reemplazarREGION y UNIQUE_BUCKET_NAME con tu información.
Crear un bucket S3
Habilitar versionado
Habilitar encriptación
Bloquear acceso público
Google Cloud Platform
Crear un bucket GCS
Habilitar versionado
Azure
Crear un grupo de recursos
Crear una cuenta de almacenamiento
Crear un contenedor
Requisitos de configuración
- Antes de desplegar la infraestructura, asegúrate de haber creado y configurado el archivo de variables para cada componente de nube:
Copiar el archivo de ejemplo
Reemplazar todos los placeholders en el archivo `midaz.tfvars` con tus valores reales
i. Este archivo contiene la configuración clave para tu configuración de infraestructura.
Credenciales de producción y despliegue
Cuando se trata de desplegar infraestructura en entornos de producción, gestionar credenciales con cuidado es crucial para mantener la seguridad. Aquí hay una guía sobre cómo manejar credenciales de manera segura:Autenticación del proveedor de nube
Al usar el script de despliegue localmente, recomendamos encarecidamente utilizar herramientas de autenticación CLI del proveedor de nube en lugar de credenciales en crudo. Este método es significativamente más seguro, ya que gestiona automáticamente la rotación de credenciales, MFA y la renovación de tokens por ti. ¿Por qué adoptar este enfoque?- Los tokens se renuevan automáticamente.
- Integración MFA y SSO lista para usar.
- Las credenciales se rotan y almacenan de manera segura.
- Rastro de auditoría completo para eventos de autenticación.
AWS
Usa AWS CLI para asumir un rol.GCP
Usa autenticación gcloud.Azure
Usa Azure CLI.Mejores prácticas de gestión de credenciales
Mantente seguro y cumple siguiendo la guía oficial de tu proveedor de nube:- AWS: Gestión de claves de acceso AWS.
- GCP: Gestión de claves de cuenta de servicio.
- Azure: Mejores prácticas de gestión de identidad.
Prácticas recomendadas
- Rota credenciales en un cronograma regular.
- Usa control de acceso basado en roles (RBAC) donde sea posible.
- Requiere MFA para cuentas de usuario.
- Prefiere credenciales temporales de corta duración.
- Monitorea y audita cómo se usan las credenciales.
- Nunca envíes credenciales al control de versiones.
Usando el script de despliegue
El scriptdeploy.sh maneja la secuencia de configuración, resalta problemas en el camino y asegura que cada componente se despliegue en el orden correcto.
Lo que hace
- Te permite elegir tu proveedor de nube (AWS, Azure o GCP).
- Ofrece opciones para desplegar o destruir el stack.
- Verifica que todos los placeholders de configuración del backend estén correctamente establecidos.
- Ejecuta comandos de Terraform en el orden correcto para cada componente.
- Produce logs claros y codificados por color para que sepas qué está sucediendo en cada paso.
Cómo usarlo
backend.tf.Hacer el script ejecutable
Ejecutar el script
El script automáticamente
i. Verificará los placeholders restantes.
ii. Ejecutará
terraform init, plan y apply para cada componente. iii. Desplegará en el orden correcto y se detendrá si algo falla.
Manejo de errores
Construimos el script para fallar rápidamente y proporcionar una explicación. Si algo sale mal:- Se detendrá inmediatamente si encuentra placeholders que olvidaste completar.
- Saldrá si algún comando de Terraform falla.
- Te mostrará exactamente qué componente falló y en qué paso.
Instalando Midaz
Después de desplegar la infraestructura fundamental, puedes instalar Midaz usando Helm. Para más información, consulta la página Desplegando usando Helm.Prerequisites
- El clúster Kubernetes está activo y ejecutándose (EKS, GKE o AKS).
kubectlconfigurado para acceder al clúster.- Helm v3.x instalado.
- Acceso al repositorio Helm de Midaz.
Pasos de instalación
Agregar el repositorio Helm de Midaz
Crear un archivo de valores (`values.yaml`) con tu configuración
Instalar Midaz
Consejos de seguridad
Usar la nube trae oportunidades fantásticas, pero también viene con responsabilidades importantes. Para ayudar a mantener tu infraestructura Midaz segura, recomendamos:- Siempre usa clústeres Kubernetes privados para limitar la exposición pública.
- Accede a la API de Kubernetes vía VPN en lugar de permitir acceso público.
- Configura y aplica RBAC (Role-Based Access Control) para gestionar permisos de usuario efectivamente.
- Almacena todos los secretos en el servicio de gestión de secretos del proveedor de nube.
- Da a las cuentas de servicio solo los permisos que realmente necesitan.
Contribuyendo
Antes de hacer cualquier cambio, necesitarás configurar hooks de Git. Esto ayuda a asegurar que cada commit siga nuestros estándares y pase las verificaciones requeridas.Instalar los hooks de Git
Crear una nueva rama de característica
develop.main.Licencia
Midaz es un proyecto open-source licenciado bajo la Licencia Apache 2.0.¿Necesitas ayuda?
- Consulta el README dentro de cada carpeta de componente.
- Busca issues existentes.
- Abre un nuevo issue si es necesario.

