Repositorio de infraestructura como código (IaC) para el proyecto EcommerceCoZam usando Terraform con arquitectura híbrida Azure-GCP.
graph TB
subgraph "Google Cloud Platform"
GCS["GCS Bucket<br/>(Terraform State)"]
GAR["Artifact Registry<br/>(Container Images)"]
VM["DevOps VM<br/>(CI/CD Tools)"]
end
subgraph "Microsoft Azure"
subgraph "Dev Environment"
RG_DEV["Resource Group Dev"]
AKS_DEV["AKS Cluster Dev<br/>(2-4 nodes)"]
end
subgraph "Stage Environment"
RG_STAGE["Resource Group Stage"]
AKS_STAGE["AKS Cluster Stage<br/>(2-4 nodes)"]
end
subgraph "Prod Environment"
RG_PROD["Resource Group Prod"]
AKS_PROD["AKS Cluster Prod<br/>(2-5 nodes)"]
end
end
DEV[Developer] --> VM
VM --> GAR
VM --> AKS_DEV
VM --> AKS_STAGE
VM --> AKS_PROD
GCS -.-> AKS_DEV
GCS -.-> AKS_STAGE
GCS -.-> AKS_PROD
GAR --> AKS_DEV
GAR --> AKS_STAGE
GAR --> AKS_PROD
| Componente | Proveedor | Propósito | Estado |
|---|---|---|---|
| GCS Bucket | GCP | Backend Terraform State | ✅ |
| Artifact Registry | GCP | Container Registry | ✅ |
| DevOps VM | GCP | CI/CD Tools | ✅ |
| AKS Dev | Azure | Desarrollo | ✅ |
| AKS Stage | Azure | Staging | ✅ |
| AKS Prod | Azure | Producción | ✅ |
infrastructure/
├── 📘 README.md # Esta documentación
├── 📂 shared/ # Recursos compartidos
│ ├── 📂 gcp-bucket/ # Backend Terraform State
│ ├── 📂 gcp-registry/ # Container Registry
│ └── 📂 vm-devops/ # VM para herramientas DevOps
├── 📂 environments/ # Ambientes por separado
│ ├── 📂 dev/ # Ambiente desarrollo
│ ├── 📂 stage/ # Ambiente staging
│ └── 📂 prod/ # Ambiente producción
├── 📂 modules/ # Módulos reutilizables
│ ├── 📂 aks/ # Módulo AKS
│ └── 📂 vm-devops/ # Módulo VM DevOps
├── 📂 helm/ # Charts Kubernetes
└── 📂 scripts/ # Scripts de automatización
# Verificar herramientas instaladas
terraform --version # >= 1.0
az --version # Azure CLI
gcloud --version # Google Cloud SDK
kubectl version # Kubernetes CLI
helm version # Helm >= 3.0# Azure
az login
az account set --subscription <subscription-id>
# Google Cloud
gcloud auth login
gcloud config set project certain-perigee-459722-b4
gcloud auth application-default login# Usar script de despliegue rápido
./scripts/quick-deploy.sh
# O paso a paso:
cd shared/gcp-bucket && terraform apply
cd ../gcp-registry && terraform apply
cd ../vm-devops && terraform apply
cd ../../environments/dev && terraform apply
cd ../stage && terraform apply
cd ../prod && terraform apply./scripts/quick-status.shsequenceDiagram
participant D as Developer
participant VM as DevOps VM
participant GCS as GCS Bucket
participant GAR as Artifact Registry
participant AKS as AKS Clusters
D->>VM: 1. Deploy infrastructure
VM->>GCS: 2. Store Terraform state
D->>VM: 3. Build & push images
VM->>GAR: 4. Store container images
VM->>AKS: 5. Deploy applications
AKS->>GAR: 6. Pull container images
| Ambiente | Nodos | VM Size | Propósito |
|---|---|---|---|
| Dev | 2-4 | Standard_B2s | Desarrollo y pruebas |
| Stage | 2-4 | Standard_B2s | Testing pre-producción |
| Prod | 2-5 | Standard_DS2_v2 | Aplicaciones en vivo |
# Desarrollo
http://ecommerce-dev.local
# Staging
http://ecommerce-stage.local
# Producción
http://ecommerce.example.com| Componente | Dev | Stage | Prod | Total |
|---|---|---|---|---|
| AKS Clusters | $60 | $60 | $150 | $270 |
| DevOps VM | $120 | - | - | $120 |
| Storage (GCS) | <$5 | - | - | $5 |
| Registry | <$10 | - | - | $10 |
| Total | $195 | $60 | $150 | $405 |
- RBAC: Configurado en todos los clusters AKS
- Network Security: Firewall rules en GCP
- Secrets: Gestión nativa de Kubernetes
- TLS: Configurado para servicios públicos
# Conectar a AKS
az aks get-credentials --resource-group <rg-name> --name <cluster-name>
# Verificar acceso
kubectl get nodes- Prometheus: Métricas
- Grafana: Dashboards
- Zipkin: Distributed tracing
- ELK Stack: Logs centralizados
- Liveness Probes:
/actuator/health - Readiness Probes:
/actuator/health - Startup Probes: Configurado por servicio
| Herramienta | Puerto | Propósito |
|---|---|---|
| Jenkins | 8080 | CI/CD Pipeline |
| SonarQube | 9000 | Code Quality |
| Grafana | 3000 | Monitoring |
| Prometheus | 9090 | Metrics |
| ArgoCD | 8090 | GitOps |
graph LR
A[Code Push] --> B[Jenkins]
B --> C[Build & Test]
C --> D[SonarQube Scan]
D --> E[Build Image]
E --> F[Push to Registry]
F --> G[Deploy to Dev]
G --> H[Integration Tests]
H --> I[Deploy to Stage]
I --> J[E2E Tests]
J --> K[Deploy to Prod]
# Ver estado completo
./scripts/quick-status.sh
# Planificar cambios
cd environments/dev && terraform plan
# Destruir todo
./scripts/quick-destroy.sh# Cambiar contexto
kubectl config use-context <cluster-name>
# Ver recursos por namespace
kubectl get all -n microservices
# Port forward para debugging
kubectl port-forward svc/api-gateway 8080:8222 -n microservices# Ver aplicaciones desplegadas
helm list -A
# Estado de un release
helm status ecommerce-app-dev -n ecommerce
# Ver logs
./helm/logs.sh dev api-gateway- Shared Resources: GCS, Registry, DevOps VM
- Environments: Dev, Stage, Prod
- Modules: Componentes reutilizables
- Helm Charts: Despliegue de aplicaciones
Error: Terraform state locked
terraform force-unlock <LOCK_ID>Error: AKS cluster unreachable
az aks get-credentials --resource-group <rg> --name <cluster> --overwrite-existingError: Container images not found
# Verificar registry
gcloud auth configure-docker us-central1-docker.pkg.dev# Terraform debugging
export TF_LOG=DEBUG
# Kubernetes events
kubectl get events --sort-by='.lastTimestamp' -A
# Pod logs
kubectl logs -f <pod-name> -n <namespace>- Fork el repositorio
- Crear rama feature:
git checkout -b feature/nueva-funcionalidad - Commit cambios:
git commit -am 'Agregar nueva funcionalidad' - Push rama:
git push origin feature/nueva-funcionalidad - Crear Pull Request
⚠️ Los archivosterraform.tfvarsNO están versionados (contienen datos sensibles)- 🔒 El bucket GCS debe crearse ANTES que los clusters AKS
- 💰 Revisar costos periódicamente en Azure y GCP
- 🔄 Usar backend remoto para estado de Terraform en equipo
Mantenido por: EstebanCoZam
Última actualización: Junio 2025
Versión: 3.0