Passer au contenu principal
Cet article contient l’infrastructure-as-code Terraform et Terragrunt pour gérer la plateforme EKB sur AWS EKS, avec stubs de support pour GKE, AKS et Kubernetes bare-metal. Il inclut tous les déploiements de graphiques Helm et les modèles de configuration d’environnement.

Documentation

DocumentDescription
Guide de déploiement TerragruntGuide étape par étape pour créer et déployer un nouvel environnement
Présentation de l’architecture AWSPrésentation de l’architecture, descriptions des composants et flux de données
Stratégie de récupération après sinistreStratégie de DR, objectifs RTO/RPO, systèmes de sauvegarde et procédures de récupération
Liste de contrôle des prérequisListe de contrôle avant déploiement à compléter avec le client

Structure du référentiel

ekb-terraform/
├── root.hcl                              # Configuration Terragrunt racine (état distant, génération de fournisseur)

├── modules/                              # Modules Terraform réutilisables
│   ├── eks/                              # Cluster EKS AWS, VPC, Karpenter, IAM, versions Helm
│   ├── aws-services/                     # ElastiCache Redis, Amazon MQ RabbitMQ
│   ├── helm/                             # Module de version Helm générique
│   ├── state/                            # Bootstrap du bucket d'état S3
│   ├── aks/                              # Azure AKS (stub)
│   ├── gke/                              # Google GKE (stub)
│   └── baremetal/                        # Kubernetes bare-metal (stub)

├── terragrunt/
│   ├── .gitignore
│   └── environments/
│       ├── STATE_MANAGEMENT_README.md
│       └── env-template-folder/          # Modèle pour les nouveaux environnements — copier et remplir les espaces réservés
│           ├── terragrunt.hcl            # Configuration d'environnement principal (cluster, versions Helm, services AWS)
│           ├── state/
│           │   └── terragrunt.hcl        # Bootstrap du bucket d'état pour cet environnement
│           └── values/                   # Valeurs Helm par graphique (un fichier par graphique)
│               ├── infrastructure.yaml       # Contrôleur AWS Load Balancer
│               ├── aws-ebs-csi-driver.yaml   # Pilote CSI EBS
│               ├── karpenter.yaml            # NodePool Karpenter
│               ├── karpenter-nodeclasses.yaml# Définitions EC2NodeClass
│               ├── karpenter-values.yaml     # Valeurs du contrôleur Karpenter
│               ├── keda.yaml                 # Autoscaler KEDA
│               ├── odin-services.yaml        # Services d'application EKB
│               ├── cloudnative-pg.yaml       # Opérateur CloudNativePG (ENABLE_CNPG)
│               ├── ha-supabase-db.yaml       # Cluster Postgres HA via CNPG (ENABLE_HA_SUPABASE_DB)
│               ├── supabase.yaml             # Pile application Supabase (ENABLE_SUPABASE)
│               ├── signoz.yaml               # Plateforme d'observabilité SigNoz (ENABLE_SIGNOZ)
│               └── signoz-k8s-infra.yaml     # Agent de métriques k8s SigNoz (ENABLE_SIGNOZ)

└── helm-deployment/                      # Graphiques Helm vendorisés / locaux
    ├── infrastructure/                   # Graphique d'enveloppe du contrôleur ALB
    ├── odin-services/odin-services/      # Plateforme EKB (Web, API, Celery, Automator, Ingress)
    ├── cloudnative-pg/                   # Graphique de l'opérateur CloudNativePG
    ├── ha-supabase-db/                   # BD Supabase HA (Cluster CNPG + PgBouncer + sauvegardes barman)
    ├── supabase-kubernetes-ha/           # Pile application Supabase complète
    ├── signoz/                           # Plateforme d'observabilité SigNoz
    └── k8s-infra/                        # Agent de métriques de cluster k8s SigNoz

Démarrage rapide

1. Installer les outils requis

Terraform
# macOS
brew install terraform
 
# Linux
sudo apt update && sudo apt install terraform
Terragrunt
# macOS
brew install terragrunt
 
# Linux / macOS (manuel)
curl -Lo /usr/local/bin/terragrunt \
  https://github.com/gruntwork-io/terragrunt/releases/latest/download/terragrunt_linux_amd64
chmod +x /usr/local/bin/terragrunt
kubectl et Helm
# macOS
brew install kubectl helm
 
# Linux
curl -LO "https://dl.k8s.io/release/$(curl -Ls https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
sudo install -m 0755 kubectl /usr/local/bin/kubectl
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
Vérifier l’installation
terraform --version
terragrunt --version
kubectl version --client
helm version
aws sts get-caller-identity

2. Créer un nouvel environnement

Les nouveaux environnements sont créés en copiant env-template-folder et en remplissant les espaces réservés. Consultez Guide de déploiement Terragrunt pour le processus complet étape par étape. Le flux de haut niveau est :
# 1. Copier le modèle
cp -r terragrunt/environments/env-template-folder terragrunt/environments/your-env-name
 
# 2. Remplir tous les espaces réservés <YOUR_*> dans :
#    - terragrunt/environments/your-env-name/terragrunt.hcl
#    - terragrunt/environments/your-env-name/state/terragrunt.hcl
#    - terragrunt/environments/your-env-name/values/*.yaml
 
# 3. Bootstrap du bucket d'état
cd terragrunt/environments/your-env-name/state
terragrunt apply
 
# 4. Définir les variables d'environnement et déployer
cd ../
export ENABLE_ALB_CONTROLLER=true
export WEB_DOMAIN="app.example.com"
export WEB_CERTIFICATE_ARN="arn:aws:acm:<region>:<account>:certificate/<id>"
# ... (voir TERRAGRUNT_DEPLOYMENT_GUIDE.md pour la liste complète des variables)
 
terragrunt apply

Drapeaux d’activation/désactivation de service

Tous les services optionnels sont activés via des variables d’environnement. Définissez-les avant d’exécuter terragrunt apply.
VariableDéfautService
ENABLE_ALB_CONTROLLERtrueContrôleur AWS Load Balancer
ENABLE_AWS_SERVICESfalseElastiCache Redis + Amazon MQ RabbitMQ
ENABLE_CNPGfalseOpérateur CloudNativePG
ENABLE_HA_SUPABASE_DBfalseCluster PostgreSQL HA (nécessite ENABLE_CNPG=true)
ENABLE_SUPABASEfalsePile Supabase complète (nécessite ENABLE_HA_SUPABASE_DB=true)
ENABLE_SIGNOZfalseSigNoz observabilité + agent k8s-infra
Ordre de déploiement de Supabase auto-hébergéLes composants Supabase doivent être déployés dans l’ordre :
ENABLE_CNPG=true           terragrunt apply --target='helm_release.local[\"cloudnative-pg\"]'
ENABLE_HA_SUPABASE_DB=true terragrunt apply --target='helm_release.local[\"ha-supabase-db\"]'
ENABLE_SUPABASE=true       terragrunt apply --target='helm_release.local[\"supabase\"]'

Référence des graphiques Helm

Graphique (dans helm-deployment/)Espace de nomsActivé parDescription
infrastructureinfrastructureToujoursContrôleur AWS Load Balancer
odin-services/odin-servicesdefaultToujoursWeb, FastAPI, Celery, Automator, Ingress
aws-ebs-csi-driver (upstream)kube-systemToujoursPilote de volume persistant EBS
keda (upstream)kedaToujoursAutoscaling de pods
cloudnative-pgcnpg-systemENABLE_CNPGOpérateur PostgreSQL
ha-supabase-dbha-supabase-dbENABLE_HA_SUPABASE_DBPostgres HA + PgBouncer + sauvegardes barman
supabase-kubernetes-hasupabaseENABLE_SUPABASEKong, Auth, Storage, Studio, Realtime
signozmonitoringENABLE_SIGNOZTraçage distribué, métriques, journaux
k8s-infra (upstream)monitoringENABLE_SIGNOZAgent DaemonSet de métriques de cluster

Référence des modules

modules/eks

Le module principal. Provisionne :
  • VPC avec subnets publics/privés sur 3 AZs
  • Cluster EKS (Kubernetes 1.33) et groupe de nœuds gérés pour Karpenter
  • Contrôleur Karpenter + NodePool + EC2NodeClass
  • Rôles IAM (cluster, groupe de nœuds, Karpenter, contrôleur ALB, pilote CSI EBS)
  • Toutes les versions Helm via la carte d’entrée helm_releases

modules/aws-services

Provisionne ElastiCache Redis et Amazon MQ RabbitMQ. Actif uniquement lorsque ENABLE_AWS_SERVICES=true.

modules/state

Bootstrap du bucket S3 d’état pour un nouvel environnement (versioning, chiffrement, blocage d’accès public).

modules/helm

Module de version Helm réutilisable supportant les référentiels de graphiques upstream et les graphiques locaux chart_path.

Configuration d’environnement

Espaces réservés

Chaque valeur dans env-template-folder spécifique à l’environnement utilise un espace réservé <YOUR_*>. Exécutez ce qui suit pour vérifier qu’aucun n’a été oublié avant de déployer :
grep -r "<YOUR_" terragrunt/environments/your-env-name/

État distant

L’état est stocké dans S3 par environnement. Le bucket est amorcé par state/terragrunt.hcl et référencé par root.hcl. Le modèle d’appellation est ekb-terraform-state-<env-name>.

Secrets

Les valeurs sensibles (mots de passe, clés API, ARNs de certificats) ne sont jamais validées. Elles sont transmises en tant que variables d’environnement consommées par les appels get_env() dans terragrunt.hcl, ou en tant qu’espaces réservés <YOUR_*> dans les fichiers de valeurs qui doivent être remplis avant le déploiement.

Dépannage

Vérifier les identifiants AWS
aws sts get-caller-identity
Vérifier l’accès au cluster
aws eks update-kubeconfig --region <region> --name <cluster-name>
kubectl get nodes
kubectl get pods -A
Vérifier le contrôleur ALB
kubectl get pods -n infrastructure | grep aws-load-balancer-controller
kubectl get ingress -A
Vérifier Karpenter
kubectl get pods -n kube-system | grep karpenter
kubectl get nodepools
kubectl get nodeclaims
Vérifier le verrouillage d’état
# Forcer le déverrouillage d'un état bloqué (utiliser l'ID de verrouillage du message d'erreur)
cd terragrunt/environments/your-env-name
terragrunt force-unlock <lock-id>
Vérifier l’absence d’espaces réservés restants
grep -r "<YOUR_" terragrunt/environments/your-env-name/
Vérifier l’état de la version Helm
helm list -A
helm status <release-name> -n <namespace>
helm get values <release-name> -n <namespace>

Support multi-cloud (Planifié)

PlateformeStatutModule
AWS EKSActifmodules/eks
Azure AKSStubmodules/aks
Google GKEStubmodules/gke
Bare metalStubmodules/baremetal