[Azure] Exécutez des commandes dans une VM via Terraform
Après mes 2 premiers articles sur le déploiement de ressources dans Azure et l’utilisation d’un keyvault pour stocker les mots de passes, nous allons voir comment exécuter des commandes directement au moment du déploiement de la ressource.
Pour faire de la configuration de VM, vous pouvez par exemple utiliser des outils comme Ansible, DSC, etc. Avec Terraform, vous pouvez utiliser des Provisioners: https://www.terraform.io/docs/provisioners/index.html
Des exemples sont disponibles ici: https://github.com/terraform-providers/terraform-provider-azurerm/tree/master/examples/virtual-machines/provisioners/windows
Pour commencer, créez un dossier Files avec 2 fichiers à l’intérieur, FirstLogonCommands.xml et winrm.ps1. Ces 2 fichiers vont s’exécuter lors du premier lancement de la machine, pour configurer le WinRM, pour pouvoir s’y connecter à distance, via le Provider.
Il faut ensuite modifier le fichier 1-virtual-machine.tf et modifier la section os_profile_windows_config en ajoutant la partie winrm:
winrm {
protocol = "http"
}
# Auto-Login's required to configure WinRM
additional_unattend_config {
pass = "oobeSystem"
component = "Microsoft-Windows-Shell-Setup"
setting_name = "AutoLogon"
content = "<AutoLogon><Password><Value>${var.admin_password}</Value></Password><Enabled>true</Enabled><LogonCount>1</LogonCount><Username>${var.admin_username}</Username></AutoLogon>"
}
additional_unattend_config {
pass = "oobeSystem"
component = "Microsoft-Windows-Shell-Setup"
setting_name = "FirstLogonCommands"
content = "${file("./files/FirstLogonCommands.xml")}"
}
Il faut ensuite ajouter le provisioner remote-exec pour exécuter à distance un script ou des commandes. Ici, en PowerShell, je vais installer le rôle Server Web:
provisioner "remote-exec" {
connection {
host = "${azurerm_public_ip.windows_pip.ip_address}"
type = "winrm"
port = 5985
https = false
timeout = "5m"
user = "${var.admin_username}"
password = "${var.admin_password}"
}
inline = [
"powershell.exe -ExecutionPolicy Unrestricted -Command {Install-WindowsFeature -name Web-Server -IncludeManagementTools}",
]
}
Exécutez votre Terraform, et une fois que la VM est déployée, les scripts de démarrage exécutés, le provider réussi à se connecter et à exécuter la commande PowerShell:
Si vous accédez à l’IP de l’output de Terraform, vous devriez voir votre serveur Web IIS:
Le code complet se trouve ici:
https://github.com/Flodu31/Terraform/tree/master/Deploy_New_Environment_Provisioners
C’est ainsi que se termine ces quelques articles sur Terraform, si vous avez des questions, n’hésitez pas :)
Laisser un commentaire