Salut !
Aujourd’hui, je vais vous présenter un outil d’infrastructure as code permettant d’automatiser le déploiement de vos infrastructures dans Azure.
Terraform (Mozilla Public License 2.0, soutenu par la société Hashicorp) est outil multi clouds vendors (Azure, Google Cloud, …) qui vous permet d’en décrire leur configuration dans un outil unique. Terraform repose sur le langage HCL.
Les 3 principales commandes de Terraform sont :
- terraform plan : Cette commande permet de visualiser le plan d’exécution (les actions qui seront faites) sans les appliquer (mode Dry Run).
- terraform apply : Permet d’appliquer le plan d’exécution en créant, mettant à jour ou supprimant les éléments de l’infrastructure gérés.
- terraform destroy : Permet de supprimer les éléments d’infrastructure gérés par Terraform.
Ci-dessous un exemple d’un fichier de configuration permettant de faire le déploiement d’une VM : Windows Server 2016 avec SQL Server 2016.
# Configure the Microsoft Azure Provider provider "azurerm" { subscription_id = "your_subscription_id" client_id = "your_client_id" client_secret = "your_client_secret" tenant_id = "your_tenant_id" }
Création d’un compte de stockage:
# Create a storage account resource "azure_storage_service" "storage" { name = "defaultstor1" location = "Central US" description = "Default storage account" account_type = "Standard_LRS" }
Création d’un réseau virtuel:
# Create a virtual network resource "azure_virtual_network" "default" { name = "test-network" address_space = ["10.1.2.0/24"] location = "Central US" subnet { name = "subnet1" address_prefix = "10.1.2.0/25" } }
Création d’une VM : Windows Server 2016 avec SQL Server 2016
# Create a Windows VM with SQL2016 resource "azure_instance" "windows" { depends_on = ["azure_virtual_network.default"] name = "mytf-win-254${count.index}" image = "SQL Server 2016 RTM Developer on Windows Server 2016" size = "Basic_A1" storage_service_name = "${azure_storage_service.storage.name}" location = "Central US" username = "MonSuperUsername" password = "MonSuperMotdePasse_SuperSecure!" time_zone = "Europe/Amsterdam" virtual_network = "${azure_virtual_network.default.name}" count = "1"
Création d’un endpoint : On expose le port RDP : TCP/3389
# Create the endpoint to connect to endpoint { name = "RDP" protocol = "tcp" public_port = 3389 private_port = 3389 } }
On affiche les IPs
# Create IP address outputs output "azure-windows-vips" { value = "${join(",", azure_instance.windows.*.name)}:${join(",", azure_instance.windows.*.vip_address)}" } output "azure-windows-ips" { value = "${join(",", azure_instance.windows.*.name)}:${join(",", azure_instance.windows.*.ip_address)}"