Skip to content

PernotYlan/TP-Azure

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🚀 Déploiement d'une VM Azure avec Terraform

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).


📋 Informations souscription

Champ Valeur
Souscription Azure for Students
Tenant limayrac.fr
Établissement Institut Limayrac
Outils Terraform, Azure CLI, macOS

📁 Structure du projet

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 :

image

⚙️ Prérequis

# Installation Azure CLI
brew install azure-cli

# Installation Terraform
brew tap hashicorp/tap
brew install hashicorp/tap/terraform

🔐 Connexion à Azure

az login
az account show --output table

🚀 Déploiement étape par étape

Étape 1 — Initialiser Terraform

terraform init

Terraform télécharge le provider azurerm et prépare l'environnement de travail.


Étape 2 — Vérifier le plan

terraform plan

Cette 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 :

image image image

Étape 3 — Déployer la VM

terraform apply

Terraform crée toutes les ressources Azure dans l'ordre : Resource Group → VNet → Subnet → NSG → IP publique → NIC → VM.

Résultat du terraform apply :

image

Étape 4 — Se connecter en SSH à la VM

ssh azureuser@20.203.186.196

Une 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 :

image

Étape 5 — Installer Apache2 sur la VM

sudo apt update
sudo apt install apache2 -y
sudo systemctl start apache2
sudo systemctl enable apache2

Installation du serveur web Apache2 pour prouver que la VM est fonctionnelle et accessible depuis internet.

Serveur web Apache2 accessible depuis le navigateur :

image

Étape 6 — Détruire les ressources

terraform destroy

Une fois le TP terminé, on détruit toutes les ressources pour ne pas consommer le crédit Azure inutilement.

Résultat du terraform destroy :

image image

❌ Erreurs rencontrées et solutions

Erreur 1 — Azure CLI non installé

zsh: command not found: az

Cause : Azure CLI n'était pas installé sur le Mac.
Solution : Installation via Homebrew :

brew install azure-cli

Erreur 2 — Clé SSH introuvable

Invalid 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 = false

Erreur 3 — Région bloquée par politique Azure (403 Forbidden)

RequestDisallowedByAzure: 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_network
  • azurerm_public_ip
  • azurerm_network_security_group

Solution : Utilisation de la région switzerlandnorth qui était autorisée sur cette souscription.

location = "switzerlandnorth"

Erreur 4 — Limite d'IP publique Basic SKU dépassée

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"
}

🔒 Sécurité

⚠️ Le fichier terraform.tfvars contient le mot de passe et est exclu du dépôt Git via .gitignore.
Ne jamais commiter les fichiers *.tfstate ni le dossier .terraform/.


✅ Résultat final

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

About

Expérimentation et apprentissage de l'outil azure et autre

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages