Projet de démonstration cloud combinant :
- un backend Flask pour gérer une petite API de voitures ;
- une infrastructure Azure provisionnée avec Terraform ;
- un script shell simple pour installer/lancer un backend sur une machine Linux.
- backend/app.py : API Flask.
- terraform/main.tf : ressources Azure.
- terraform/provider.tf : provider
azurerm. - terraform/variables.tf : variables par défaut.
- terraform/outputs.tf : sorties Terraform.
- scripts/install_backend.sh : script d’installation rapide.
- requirements.txt : dépendances Python.
L’API définie dans backend/app.py expose les routes suivantes :
GET /: retourne un message de statut.GET /cars: retourne la liste des voitures en mémoire.POST /cars: ajoute une voiture.DELETE /cars/<id>: supprime une voiture par identifiant.
Exemple de payload pour POST /cars :
{
"brand": "Renault",
"model": "Clio"
}Les données sont stockées en mémoire. Elles sont perdues au redémarrage de l’application.
La configuration Terraform crée :
- un Resource Group Azure ;
- un Virtual Network et un Subnet ;
- une IP publique ;
- une interface réseau ;
- une machine virtuelle Linux Ubuntu ;
- un compte de stockage ;
- un conteneur Blob Storage privé.
Les sorties disponibles sont définies dans terraform/outputs.tf :
- IP publique de la VM ;
- nom du compte de stockage.
- Python 3
pip
- Terraform
- Un compte Azure
- Azure CLI authentifié, ou variables d’environnement Azure configurées
Depuis la racine du projet :
- Créer un environnement virtuel :
- Windows :
python -m venv .venv - Linux/macOS :
python3 -m venv .venv
- Windows :
- Activer l’environnement virtuel :
- Windows :
.venv\\Scripts\\activate - Linux/macOS :
source .venv/bin/activate
- Windows :
- Installer les dépendances :
pip install -r requirements.txt
- Lancer l’application :
python backend/app.py
L’API sera accessible sur http://localhost:5000.
GET http://localhost:5000/
curl -X POST http://localhost:5000/cars \
-H "Content-Type: application/json" \
-d '{"brand":"Peugeot","model":"208"}'curl http://localhost:5000/carscurl -X DELETE http://localhost:5000/cars/1Se placer dans le dossier terraform puis exécuter :
terraform initterraform planterraform apply
Pour afficher les sorties :
terraform output
Pour détruire l’infrastructure :
terraform destroy
Valeurs par défaut actuelles dans terraform/variables.tf :
location:francecentralresource_group_name:efrei2vm_name:efreimachine2storage_account_name:mateoefreistorage2
Ces valeurs peuvent être surchargées via un fichier terraform.tfvars ou via la ligne de commande.
Le script scripts/install_backend.sh :
- met à jour les paquets ;
- installe
python3-pip; - installe Flask ;
- génère une application Flask minimale ;
- lance cette application sur le port 5000.
Remarque : ce script déploie une application Flask simplifiée, différente de l’API complète présente dans backend/app.py.
- Le mot de passe administrateur de la VM est actuellement écrit en dur dans terraform/main.tf. Il faut le remplacer par une variable sensible.
- Le fichier d’état Terraform terraform/terraform.tfstate est présent dans le dépôt. En pratique, il vaut mieux utiliser un backend distant sécurisé.
- Le package
azure-storage-blobest listé dans requirements.txt, mais n’est pas encore utilisé dans backend/app.py.
- connecter l’API au stockage Azure Blob ;
- ajouter une base de données persistante ;
- sécuriser la VM avec clés SSH et NSG ;
- conteneuriser le backend avec Docker ;
- ajouter des tests automatisés et un pipeline CI/CD.