Environnement de développement avec LocalStack, OpenTofu, et AWS CLI local dans Docker.
- Docker
- Docker Compose
# Cloner le projet
git clone <url-du-repo>
cd terraform-docker
# Build et démarrer le container
docker-compose up -d --build
# Vérifier que le container tourne
docker-compose ps
# Voir les logs
docker-compose logs -f# Entrer dans le container avec zsh (recommandé - terminal amélioré)
docker-compose exec localstack zsh
# Ou avec bash (également disponible)
docker-compose exec localstack bash
# Vérifier les outils installés
tofu --version
tflocal --version
awslocal --version
python3 --versionLes fichiers dans le dossier workspace/ sont automatiquement synchronisés avec le container grâce aux volumes Docker.
Édition des fichiers :
cd workspace/
# Créer/éditer les fichiers Terraform avec votre éditeur préféré
touch main.tf # ou vim, nano, etc.Exécution des commandes :
Option 1 - Directement dans le container :
# Entrer dans le container
docker-compose exec localstack zsh
# Dans le container, vos fichiers sont synchronisés dans /workspace
cd /workspace
tflocal init
tflocal applyOption 2 - Avec des alias (recommandé) :
Ajoutez ces alias à votre fichier de configuration shell (~/.zshrc ou ~/.bashrc) :
# Exécuter tflocal dans le container
alias tflocal='docker-compose exec localstack tflocal'
# Exécuter awslocal dans le container
alias awslocal='docker-compose exec localstack awslocal'Rechargez votre configuration : source ~/.zshrc
Vous pouvez maintenant exécuter les commandes directement depuis votre machine hôte :
cd workspace/
tflocal init
awslocal s3 ls# Créer un bucket S3
awslocal s3 mb s3://test-bucket
# Lister les buckets
awslocal s3 lsCréez vos fichiers .tf dans le dossier workspace/ (synchronisé avec le container).
cd /workspace
tflocal init
tflocal plan
tflocal apply# Arrêter le container (conserve les données)
docker-compose down
# Arrêter et supprimer les données persistantes
docker-compose down -vLe dossier localstack-data/ est monté mais LocalStack gratuit ne l'utilise pas pour la persistance. Pour avoir la persistance, il faut :
- LocalStack Pro (version payante)
- Ou utiliser des snapshots/exports manuels
Conséquence :
# Créer un bucket S3
awslocal s3 mb s3://mon-bucket
# Arrêter le container
docker-compose down
# Redémarrer
docker-compose up -d
# ❌ Le bucket n'existe plus !
awslocal s3 ls # VideSolution de contournement :
Gardez vos fichiers Terraform dans workspace/ et recréez l'infrastructure avec tflocal apply après chaque redémarrage.
.
├── Dockerfile # Image personnalisée avec tous les outils
├── docker-compose.yml # Configuration Docker Compose
├── .gitignore # Fichiers à ignorer par Git
├── README.md # Documentation du projet
├── workspace/ # Fichiers Terraform (synchronisé avec le container)
│ └── *.tf # Vos fichiers de configuration Terraform
└── localstack-data/ # Données persistantes LocalStack (généré automatiquement)
Ce projet utilise deux dépôts Git distincts pour séparer l'environnement de développement du code infrastructure :
Contenu : Configuration de l'environnement de développement
Dockerfiledocker-compose.ymlREADME.md.gitignore(qui ignoreworkspace/etlocalstack-data/)
Objectif : Réutilisable pour plusieurs projets Terraform
Contenu : Configuration infrastructure Terraform
*.tf(provider, resources, etc.).terraform.lock.hcl(versions verrouillées des providers).gitignore(qui ignore.terraform/et*.tfstate)
Objectif : Versionner uniquement le code infrastructure
# 1. Cloner le repo d'environnement
git clone <repo-environnement> terraform-docker
cd terraform-docker
# 2. Initialiser le repo Terraform dans workspace/
cd workspace
git init
git remote add origin <repo-terraform>
git add .
git commit -m "Initial Terraform configuration"
git push -u origin mainAvantages de cette approche :
- ✅ Environnement Docker réutilisable pour plusieurs projets
- ✅ Code Terraform versionné indépendamment
- ✅ Séparation claire entre infrastructure et configuration
- ✅ Plusieurs projets Terraform peuvent utiliser le même environnement Docker
- OpenTofu (v1.11.1) : Alternative open-source à Terraform
- tflocal : Wrapper pour OpenTofu/Terraform avec LocalStack
- awslocal : Wrapper pour AWS CLI avec LocalStack
- LocalStack : Émulation locale des services AWS
- Python 3 : Pour scripts et outils additionnels
- Zsh avec Oh My Zsh et Powerlevel10k : Terminal amélioré avec autocomplétion et suggestions
Par défaut, les services suivants sont activés :
- S3 (stockage)
- DynamoDB (base de données NoSQL)
- Lambda (fonctions serverless)
- SQS (files d'attente)
- SNS (notifications)
- EC2 (machines virtuelles)
Pour modifier les services, éditez la variable SERVICES dans docker-compose.yml.