Projet réalisé dans le cadre d'un TP à l'Institut Limayrac.
L'objectif est de déployer une machine virtuelle Linux Ubuntu sur Microsoft Azure en utilisant Terraform (Infrastructure as Code).
| Champ | Valeur |
|---|---|
| Souscription | Azure for Students |
| Tenant | limayrac.fr |
| Établissement | Institut Limayrac |
| Outils | Terraform, Azure CLI, macOS |
terraform-azure-vm/
├── main.tf # Ressources Azure (VNet, Subnet, NSG, IP, NIC, VM)
├── variables.tf # Déclaration des variables
├── outputs.tf # Sorties : IP publique, commande SSH
├── terraform.tfvars # Valeurs des variables (non pushé, contient le mdp)
└── .gitignore # Exclusion des fichiers sensibles
Ensemble des fichiers du dépôt :
# Installation Azure CLI
brew install azure-cli
# Installation Terraform
brew tap hashicorp/tap
brew install hashicorp/tap/terraformaz login
az account show --output tableterraform initTerraform télécharge le provider
azurermet prépare l'environnement de travail.
terraform planCette commande affiche toutes les ressources qui vont être créées sans les créer. Permet de vérifier avant d'appliquer.
Résultat du terraform plan :
terraform applyTerraform crée toutes les ressources Azure dans l'ordre : Resource Group → VNet → Subnet → NSG → IP publique → NIC → VM.
Résultat du terraform apply :
ssh azureuser@20.203.186.196Une fois la VM créée, Terraform affiche l'IP publique dans les outputs. On se connecte ensuite en SSH avec le mot de passe défini dans
terraform.tfvars.
Connexion SSH réussie :
sudo apt update
sudo apt install apache2 -y
sudo systemctl start apache2
sudo systemctl enable apache2Installation du serveur web Apache2 pour prouver que la VM est fonctionnelle et accessible depuis internet.
Serveur web Apache2 accessible depuis le navigateur :
terraform destroyUne fois le TP terminé, on détruit toutes les ressources pour ne pas consommer le crédit Azure inutilement.
Résultat du terraform destroy :
zsh: command not found: az
Cause : Azure CLI n'était pas installé sur le Mac.
Solution : Installation via Homebrew :
brew install azure-cliInvalid function argument: no file exists at "~/.ssh/id_rsa.pub"
Cause : Terraform ne résolvait pas le caractère ~ dans le chemin et aucune clé SSH n'était générée sur le Mac.
Solution : Remplacement de l'authentification par clé SSH par un mot de passe dans main.tf :
admin_password = var.admin_password
disable_password_authentication = falseRequestDisallowedByAzure: Resource 'vnet-ma-vm' was disallowed by Azure.
This policy maintains a set of best available regions where your
subscription can deploy resources.
Cause : La souscription Azure for Students de l'Institut Limayrac applique une politique système sys.regionrestriction qui restreint les régions de déploiement. Cette politique est gérée par l'établissement et ne peut pas être modifiée par l'étudiant.
Régions testées et refusées : westeurope, francecentral
Ressources bloquées :
azurerm_virtual_networkazurerm_public_ipazurerm_network_security_group
Solution : Utilisation de la région switzerlandnorth qui était autorisée sur cette souscription.
location = "switzerlandnorth"IPv4BasicSkuPublicIpCountLimitReached: Cannot create more than 0 IPv4
Basic SKU public IP addresses for this subscription in this region.
Cause : Le SKU Basic des IP publiques est limité à 0 sur cette souscription étudiante dans la région switzerlandnorth.
Solution : Passage en SKU Standard dans main.tf :
resource "azurerm_public_ip" "public_ip" {
name = "pip-${var.vm_name}"
location = azurerm_resource_group.rg.location
resource_group_name = azurerm_resource_group.rg.name
allocation_method = "Static"
sku = "Standard"
}
⚠️ Le fichierterraform.tfvarscontient le mot de passe et est exclu du dépôt Git via.gitignore.
Ne jamais commiter les fichiers*.tfstateni le dossier.terraform/.
| Ressource | Statut |
|---|---|
| Resource Group | ✅ Créé |
| Virtual Network | ✅ Créé |
| Subnet | ✅ Créé |
| Network Security Group | ✅ Créé |
| IP Publique | ✅ Créée (20.203.186.196) |
| Network Interface | ✅ Créée |
| VM Linux Ubuntu 18.04 | ✅ Créée |
| Connexion SSH | ✅ Réussie |
| Serveur Apache2 | ✅ Fonctionnel |
| Terraform Destroy | ✅ Toutes les ressources supprimées |