Distribuisci macchine virtuali di Azure con Terraform per risparmiare denaro

Contenuti

logo blu

La maggior parte di noi ha: distribuiamo macchine virtuali temporanee in Azure. Qualcosa che molti di noi hanno anche fatto è dimenticare di eliminare le risorse collegate a quelle macchine virtuali durante l'eliminazione. Questo può portare a costi indesiderati che possono raggiungere le centinaia di dollari se non stai attento..

In questo post, impareremo come implementare macchine virtuali in Azure e cancellarne ogni traccia quando avremo finito di usare Terraform.

Prerequisiti

Devi soddisfare alcuni requisiti precedenti per poter seguire questo post:

  • Avere il Azure CLI installato.
  • Diventa un amministratore della sottoscrizione di Azure (o simili), permettendoti di usarlo per creare risorse e gruppi di risorse.

Con questo fuori mano, iniziamo scaricando e installando Terraform.

Installazione Terraform

Terraform può essere installato in diversi modi. In Windows, il modo più semplice è usare choco:

choco install terraform

Installazione Terraform con seppie.

Sul Macintosh, è abilitato tramite Brew:

brew install terraform

Ulteriori informazioni sull'installazione di Terraform sono abilitate nel Documentazione Terraform.

Supponendo che tutto sia andato bene con l'installazione, puoi confermare che funziona eseguendo il comando terraform version.

Conferma che Terraform funzioni eseguendo il comando "versione terraforma".

Ora che hai confermato che terraform funziona sulla tua macchina, tempo per l'autenticazione alla sottoscrizione di Azure tramite l'interfaccia della riga di comando di Azure.

Autenticando

Per autenticare e determinare la sottoscrizione nell'interfaccia della riga di comando di Azure, deve accedere. Apri un terminale e digita:

az login

Poi, dopo l'autenticazione, elenca tutte le tue iscrizioni inserendo:

az account list

Se hai più abbonamenti disponibili, copia l'id di abbonamento di quello corretto ed entra:

az account set --subscription="COPIED_SUBSCRIPTION_ID"

Ora hai configurato l'interfaccia della riga di comando di Azure per usare la tua sottoscrizione. (Questo è l'abbonamento che terraform utilizzerà in aggiunta in seguito). Ora è il momento di creare il modello terraform che useremo per implementare la nostra VM.

Crea il modello Terraform

Il modello Terraform è un semplice file di testo con la fine del file .tf. Ha una sintassi simile a JSON e può essere facilmente letto e generato. Il modello è composto principalmente da due parti: fornitori (che gestiscono la comunicazione con il servizio in cui si desidera implementare) e le risorse che il provider crea.

Iniziamo creando un file chiamato vm.tf in una directory vuota. Terraform avrà bisogno di una directory vuota per poter scrivere lo stato di configurazione in seguito.

Ora, apri quel file con il tuo editor di testo preferito e aggiungi il provider:

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

Questo dirà a Terraform che vuoi usare il provider AzureRM (per creare risorse azzurre) e quale dovrebbe essere la versione 2.11. È essenziale specificare il numero di versione poiché la funzionalità tra le diverse versioni può variare notevolmente..

Dopo averlo scritto nel file di testo, è ora di aggiungere il nostro gruppo di risorse di Azure. Terraform vede anche questo come una risorsa:

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

El código anterior crea un grupo de recursos denominadotest-vmque se encuentra en la región occidental de EE. UU. Aggiungi anche un'etichetta con il nome del progetto.

Per eseguire con successo una macchina virtuale, abbiamo bisogno anche di una rete. E poiché Terraform è fatto per Infrastructure come codice (IaC), è anche abilitato come risorsa:

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
}

Questo crea una rete virtuale. Usa anche una variabile nel Nome parametro. Se guardi da vicino, vedrai che si riferisce al gruppo di risorse che abbiamo definito in precedenza:

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

Ciò significa che alla rete virtuale verrà assegnato il nome test-vm-rete. Facciamo lo stesso anche con la posizione, il nome e i tag del gruppo di risorse.

Prossimo, è il momento di stabilire la sottorete in cui collocheremo la VM, usando gli stessi metodi usando le variabili di prima:

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

Questo crea una sottorete chiamata test-vm-subnet.

Ora, definiamo la NIC che utilizzerà anche la VM:

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
}

Per questo caso, useremo un indirizzo IP statico, riferendosi alla sottorete utilizzando una variabile.

E, finalmente, ma non meno importante, la definizione della macchina virtuale stessa:

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
}

Il codice sopra fornirà una macchina virtuale di Azure che esegue Windows Server 2019, utilizzando le risorse che abbiamo definito in precedenza. Tendrá un administrador con el nombre de usuariodemoadminque tiene la contraseña “$ Om3s3cretPassWord”. Il resto dei parametri è autoesplicativo, e puoi trovarne molti altri in Documentazione di Terraform AzureRM.

Ora, non resta che salvare il .tf-file che implementa questo modello in Azure usando TerraForm!

Inizia e implementa con TerraForm

Ora che abbiamo il modello in ordine, apri un terminale e vai alla directory in cui hai salvato il .tf-file in:

cd c:tempterraform

Ora dobbiamo avviare TerraForm. Questo scaricherà il modulo delle risorse per AzureRM e cercherà errori nel .tf-procedimento:

Inizia Terraform, che scarica il modulo delle risorse e controlla la presenza di errori nel file .tf.

Al termine dell'inizializzazione, sei pronto per applicare il modello eseguendo terraform apply.

terraform apply

TerraForm ora creerà un nuovo gruppo di risorse in Azure, reti, sottoreti e, In sintesi, la macchina virtuale stessa. Lo stato e tutte le risorse che hai creato sono archiviate nel .terraforma cartella dalla directory corrente. Perché, Non eliminare quella cartella se vuoi cancellare le risorse in modo pulito in un secondo momento!!

Una volta che hai finito con la tua macchina virtuale di prova e vuoi distruggerla, corri:

terraform destroy

Questo cancellerà tutti i dischi, nics, sottoreti, gruppi di risorse e così via che hai creato durante l'esecuzione terraform apply, e non devi preoccuparti di dimenticare di eliminare i frammenti che sono rimasti in termini di risorse di Azure.

conclusione

Usare TerraForm solo per compiti minori come questo è incredibilmente pulito. Dimostra che non è necessario avere un'Infrastruttura come codice (IaC) completamente implementato per un uso produttivo. Riduce anche i costi cancellando le risorse inutilizzate in Azure. Auspicabilmente, questo si è dimostrato utile per te, E ha anche iniziato il suo viaggio verso IaC!!

Iscriviti alla nostra Newsletter

Non ti invieremo posta SPAM. Lo odiamo quanto te.