Skip to content

Repository files navigation

AWS Terraform DevOps

Infraestructura AWS provisionada con Terraform, ejecutando una app Flask en Amazon EKS con RDS PostgreSQL. Pipeline CI/CD con quality gates obligatorios y seguridad aplicada en cada capa.

CI/CD Quality Gate Terraform License: MIT


Arquitectura

Internet → Load Balancer → EKS (Flask, 2–10 pods, HPA) → RDS PostgreSQL (Multi-AZ ready)
Capa Implementación
IaC Terraform modular, state remoto S3 + DynamoDB lock
Cómputo EKS v1.31, auto-scaling 1–4 nodos
Datos RDS PostgreSQL 15, encriptación en reposo
Redes VPC en 3 AZs, subnets públicas/privadas segregadas
CI/CD GitHub Actions, auth OIDC (sin access keys)
Calidad SonarCloud, quality gate obligatorio

Seguridad — lo que realmente importa aquí

Este proyecto trata la seguridad como código, no como paso posterior:

Control Detalle
Mínimo privilegio Roles IAM dedicados por componente (cluster, nodos) — sin permisos amplios compartidos
Sin credenciales estáticas CI/CD autenticado vía OIDC; trust policy acotada a este repo
Red segmentada RDS solo accesible desde dentro de la VPC (puerto 5432 restringido)
Secrets fuera del código GitHub Secrets — nada hardcodeado en el repositorio
Contenedores endurecidos Usuario no-root, imagen base mínima
Cambios auditables terraform plan automático en CI; el apply es manual y deliberado
Calidad como gate Cobertura > 80% y cero vulnerabilidades críticas bloquean el merge

Quick Start

git clone https://github.com/lra-cloud-ops/aws-terraform-devops.git
cd aws-terraform-devops/terraform

export TF_VAR_db_password="<contraseña-segura>"
terraform init
terraform plan  -var-file=../environments/dev/terraform.tfvars
terraform apply -var-file=../environments/dev/terraform.tfvars

aws eks update-kubeconfig --region eu-west-1 --name dev-cluster
kubectl get nodes

Requiere: Terraform 1.9.8+, AWS CLI 2.x, kubectl 1.31+, credenciales AWS con permisos sobre VPC/EKS/RDS/ECR/IAM/CloudWatch.

Estructura

terraform/      # Orquestación raíz
modules/        # vpc, eks, rds, ecr, iam, cloudwatch, s3_bucket — un módulo por servicio
environments/   # Variables por entorno (dev, prod)
docker/         # App Flask + Dockerfile multi-stage
kubernetes/     # deployment, service, hpa
monitoring/     # Prometheus + Grafana

Pipeline

push a main → SonarCloud → terraform plan → build Docker → push ECR → deploy EKS (solo tags v*)

Gates: cobertura >80%, cero vulnerabilidades críticas, plan limpio.

Multi-cloud (en progreso)

Este repo empieza a extenderse más allá de AWS bajo el mismo state de Terraform:

Recurso Estado
Provider google configurado junto a aws ✅
Módulo modules/gcs_bucket (Cloud Storage, acceso público bloqueado, versionado) ✅ desplegado y verificado
Workload Identity Federation para CI/CD (equivalente a OIDC en AWS) ✅
terraform apply en AWS + GCP ✅ 39 recursos activos en ambas nubes

Roadmap

  • IaC completo, CI/CD, observabilidad, auto-scaling, OIDC
  • Provider GCP + primer módulo (GCS)
  • Autenticación GCP en CI/CD (Workload Identity Federation)
  • Despliegue real verificado (EKS con nodos Ready, RDS available, bucket GCS activo)
  • ArgoCD (GitOps)
  • Escaneo de imágenes (Trivy) + políticas de admisión (Kyverno)

Ruben Liquenson — DevOps/Cloud Engineer | AWS · Terraform · Kubernetes LinkedIn · GitHub · lracloudops.com · Las Palmas de Gran Canaria, España

Licencia: MIT

About

Infraestructura AWS lista para producción con Terraform. IaC modular — EKS, RDS, VPC, IAM, multi-cloud (AWS + GCP). CI/CD vía GitHub Actions con OIDC/Workload Identity Federation. Quality gate con SonarCloud. State remoto en S3 + DynamoDB lock.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages