Déployez des machines virtuelles Azure avec Terraform pour économiser de l'argent

Contenu

logo bleu

La plupart d'entre nous ont: nous déployons des machines virtuelles temporaires dans Azure. Quelque chose que beaucoup d'entre nous ont également fait est d'oublier de supprimer les ressources attachées à ces machines virtuelles lors de leur suppression. Cela peut entraîner des coûts indésirables pouvant atteindre des centaines de dollars si vous ne faites pas attention..

Dans ce billet, nous apprendrons à implémenter des machines virtuelles dans Azure et à en effacer toutes les traces lorsque nous aurons fini d'utiliser Terraform.

Conditions préalables

Vous devez remplir certaines conditions préalables pour pouvoir suivre ce post:

  • Avoir le CLI de Azure installée.
  • Être un administrateur d'abonnement Azure (ou similaire), vous permettant de l'utiliser pour créer des ressources et des groupes de ressources.

Avec ça à l'écart, commençons par télécharger et installer Terraform.

Installation Terraform

Terraform peut être installé de différentes manières. En Windows, le moyen le plus simple est d'utiliser choco:

choco install terraform

Installation Terraform à l'aide de seiche.

Sur Macintosh, est activé via Brew:

brew install terraform

Plus d'informations sur l'installation de Terraform sont activées dans le Documentation Terraform.

En supposant que tout s'est bien passé avec l'installation, vous pouvez confirmer que cela fonctionne en exécutant la commande terraform version.

Confirmez que Terraform fonctionne en exécutant la commande "version terraforme".

Maintenant que vous avez confirmé que Terraform fonctionne sur votre machine, le temps de s'authentifier auprès de l'abonnement Azure via Azure CLI.

En s'authentifiant

Pour authentifier et déterminer l'abonnement dans Azure CLI, doit se connecter. Ouvrez un terminal et tapez:

az login

et après, après authentification, listez tous vos abonnements en entrant:

az account list

Si vous avez plusieurs abonnements disponibles, copiez l'identifiant d'abonnement du bon et entrez:

az account set --subscription="COPIED_SUBSCRIPTION_ID"

Vous avez maintenant configuré Azure CLI pour utiliser votre abonnement. (C'est l'abonnement que terraform utilisera plus tard en plus). Il est maintenant temps de créer le modèle terraform que nous utiliserons pour implémenter notre VM.

Créer le modèle Terraform

Le modèle Terraform est un simple fichier texte avec la fin du fichier .tf. Il a une syntaxe de type JSON et peut être facilement lu et généré. Le modèle se compose principalement de deux parties: Fournisseurs (qui gèrent la communication avec le service dans lequel vous souhaitez mettre en œuvre) et les ressources que le fournisseur crée.

Commençons par créer un fichier appelé vm.tf dans un répertoire vide. Terraform aura besoin d'un répertoire vide pour pouvoir écrire l'état de la configuration plus tard.

Maintenant, ouvrez ce fichier avec votre éditeur de texte préféré et ajoutez le fournisseur:

provider "azurerm" {
  version   = "=2.11.0"
	features {}  
}

Cela indiquera à Terraform que vous souhaitez utiliser le fournisseur AzureRM (pour créer des ressources d'azur) et quelle devrait être la version 2.11. Il est essentiel de spécifier le numéro de version car la fonctionnalité entre les différentes versions peut varier considérablement..

Une fois que vous avez écrit cela dans le fichier texte, il est temps d'ajouter notre groupe de ressources Azure. Terraform voit aussi cela comme une ressource:

resource "azurerm_resource_group" "resourcegroup" {
        name = "test-vm"
        location = "westus"
        tags = {
            project = "some_test_project"
        }
}

Le code ci-dessus crée un groupe de ressources nommé “test-vm” situé dans la région ouest des États-Unis. UU. Ajoutez également une étiquette avec le nom du projet.

Pour exécuter une machine virtuelle avec succès, nous avons aussi besoin d'un réseau. Et parce que Terraform est conçu pour l'infrastructure en tant que code (IaC), il est également activé en tant que ressource:

resource "azurerm_virtual_network" "network" {
    name                = "${azurerm_resource_group.resourcegroup.name}-network"
    address_space       = ["10.0.0.0/16"]
    location            = azurerm_resource_group.resourcegroup.location
    resource_group_name = azurerm_resource_group.resourcegroup.name

    tags = azurerm_resource_group.resourcegroup.tags
}

Cela crée un réseau virtuel. Il utilise également une variable dans le nom paramètre. Si tu regardes de près, vous verrez qu'il fait référence au groupe de ressources que nous avons précédemment défini:

"${azurerm_resource_group.resourcegroup.name}-network"

Cela signifie que le réseau virtuel recevra le nom test-vm-réseau. Nous faisons également la même chose avec l'emplacement, le nom et les balises du groupe de ressources.

Ensuite, il est temps d'établir le sous-réseau dans lequel nous allons placer la VM, en utilisant les mêmes méthodes en utilisant des variables que précédemment:

resource "azurerm_subnet" "subnet" {
    name                 = "${azurerm_resource_group.resourcegroup.name}-subnet"
    resource_group_name  = azurerm_resource_group.resourcegroup.name
    virtual_network_name = azurerm_virtual_network.network.name
    address_prefix       = "10.0.2.0/24"
}

Cela crée un sous-réseau appelé test-vm-sous-réseau.

Maintenant, définissons la carte réseau que la VM utilisera également:

resource "azurerm_network_interface" "vm1-nic" {
    name                        = "vm1-NIC"
    location                    = azurerm_resource_group.resourcegroup.location
    resource_group_name         = azurerm_resource_group.resourcegroup.name

    ip_configuration {
        name                          = "vm1-NicConfiguration"
        subnet_id                     = "${azurerm_subnet.subnet.id}"
        private_ip_address_allocation = "static"
        private_ip_address            = "10.0.2.4"
    }

    tags = azurerm_resource_group.resourcegroup.tags
}

Pour ce cas, nous utiliserons une adresse IP statique, référence au sous-réseau à l'aide d'une variable.

ET, finalement, mais pas moins important, la définition de la machine virtuelle elle-même:

resource "azurerm_virtual_machine" "vm-1" {
  name                  = "vm1"
  location              = "${azurerm_resource_group.resourcegroup.location}"
  resource_group_name   = "${azurerm_resource_group.resourcegroup.name}"
  network_interface_ids = ["${azurerm_network_interface.vm1-nic.id}"]
  vm_size               = "Standard_B1ms"

  delete_os_disk_on_termination = true

  storage_image_reference {
    publisher = "MicrosoftWindowsServer"
    offer     = "WindowsServer"
    sku       = "2019-Datacenter"
    version   = "latest"
  }
  storage_os_disk {
    name              = "vm1-osdisk"
    caching           = "ReadWrite"
    create_option     = "FromImage"
    managed_disk_type = "Standard_LRS"
  }
  os_profile {
    computer_name  = "vm-1"
    admin_username = "demoadmin"
    admin_password = "$om3s3cretPassWord"
  }

  os_profile_windows_config {
      enable_automatic_upgrades = "true"
      provision_vm_agent = "true"
  }

  tags = azurerm_resource_group.resourcegroup.tags
}

Le code ci-dessus fournira une machine virtuelle Azure exécutant Windows Server 2019, en utilisant les ressources que nous avons définies précédemment. Vous aurez un administrateur avec le nom d'utilisateur “démoadmin” qui a le mot de passe "$ Om3s3cretPassWord". Le reste des paramètres sont explicites, et vous pouvez en trouver bien d'autres dans le Documentation Terraform AzureRM.

Maintenant, il ne reste plus qu'à sauver le .tf-fichier implémentant ce modèle dans Azure à l'aide de TerraForm!

Démarrer et mettre en œuvre avec TerraForm

Maintenant que nous avons le modèle dans l'ordre, ouvrez un terminal et allez dans le répertoire où vous avez enregistré le .tf-fichier à:

cd c:tempterraform

Maintenant, nous devons démarrer TerraForm. Cela téléchargera le module de ressources pour AzureRM et recherchera les erreurs dans le .tf-Record:

Démarrer Terraform, qui télécharge le module de ressources et vérifie le fichier .tf pour les erreurs.

Une fois l'initialisation terminée, vous êtes prêt à appliquer le modèle en exécutant terraform apply.

terraform apply

TerraForm va maintenant créer un nouveau groupe de ressources dans Azure, réseaux, sous-réseaux et, en résumé, la machine virtuelle elle-même. L'état et toutes les ressources que vous avez créées sont stockés dans le .terraformer dossier de votre répertoire actuel. Pour cela, Ne supprimez pas ce dossier si vous souhaitez effacer les ressources proprement plus tard !!

Une fois que vous avez terminé avec votre machine virtuelle de test et que vous souhaitez la détruire, juste courir:

terraform destroy

Cela supprimera tous les disques, nic, sous-réseaux, groupes de ressources et ainsi de suite que vous avez créés lorsque vous avez exécuté terraform apply, et vous n'avez pas à vous soucier d'oublier de supprimer les fragments qui restent en termes de ressources Azure.

conclusion

Utiliser TerraForm uniquement pour des tâches mineures comme celle-ci est incroyablement soigné. Cela montre qu'il n'est pas nécessaire d'avoir une infrastructure en tant que code (IaC) entièrement mis en œuvre pour une utilisation productive. Réduit également les coûts en effaçant les ressources inutilisées dans Azure. Avec chance, cela s'est avéré utile pour vous, Et il a même commencé son voyage vers IaC !!

Abonnez-vous à notre newsletter

Nous ne vous enverrons pas de courrier SPAM. Nous le détestons autant que vous.