Automatiser votre infrastructure Azure avec Terraform

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

Démarrez une conversation

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *