Automazione con Terraform
Questa guida ti permetterà di distribuire le tue prime istanze sul Cloud di Confianza in meno di 5 minuti.
Prerequisiti
- Aver sottoscritto l'offerta Cloud Temple (sottoscrizione all'offerta IaaS).
- Avere i permessi attivati per il pilotaggio degli oggetti 'IaaS'
Distribuire una macchina virtuale tramite Terraform
In questa sezione, vedremo come distribuire in pochi minuti una macchina virtuale sul Cloud di Confianza tramite il provider Terraform Cloud Temple. Se non hai ancora utilizzato il provider Cloud Temple, segui le istruzioni che si trovano al seguente indirizzo per installarlo e autenticarti al tuo tenant.
Inizieremo creando un file .tf che descrive l'istanza che desideriamo distribuire. Lo script seguente permette di distribuire una macchina virtuale da zero.
data "cloudtemple_compute_virtual_datacenter" "dc" {
name = "DC-EQX6"
}
data "cloudtemple_compute_host_cluster" "flo" {
name = "clu002-ucs01_FLO"
}
data "cloudtemple_compute_datastore_cluster" "koukou" {
name = "sdrs001-LIVE_KOUKOU"
}
resource "cloudtemple_compute_virtual_machine" "scratch" {
name = "from-scratch"
memory = 8 * 1024 * 1024 * 1024
cpu = 2
num_cores_per_socket = 1
cpu_hot_add_enabled = true
cpu_hot_remove_enabled = true
memory_hot_add_enabled = true
datacenter_id = data.cloudtemple_compute_virtual_datacenter.dc.id
host_cluster_id = data.cloudtemple_compute_host_cluster.flo.id
datastore_cluster_id = data.cloudtemple_compute_datastore_cluster.koukou.id
guest_operating_system_moref = "amazonlinux2_64Guest"
tags = {
created_by = "Terraform"
}
}
I parametri utilizzati in questo script sono i seguenti:
- datacenter_id (obbligatorio): datacenter in cui viene distribuita la macchina virtuale
- host_cluster_id (obbligatorio): cluster in cui viene distribuita la macchina virtuale
- name (obbligatorio): nome della macchina
- memory: RAM allocata alla macchina all'avvio
- cpu: numero di vCPU allocate alla macchina all'avvio
- num_cores_per_socket: numero di core per socket
- datastore_cluster_id: datastore a cui è collegata la macchina
- guest_operating_system_moref: sistema operativo della macchina
Altri parametri possono essere applicati a una macchina virtuale durante la sua distribuzione. Puoi trovare l'elenco completo di questi parametri alla seguente pagina della documentazione Terraform
Una volta creato e salvato il file .tf, esegui il seguente comando per verificare il tuo codice:
terraform validate
Quindi, pianifica la distribuzione e verifica che il piano corrisponda a ciò che desideri realizzare:
terraform plan
Infine, distribuisci la macchina virtuale eseguendo il seguente comando:
terraform apply
Utilizzare cloud-init per configurare una macchina virtuale distribuita dal provider Terraform
Lo strumento 'cloud-init' permette di personalizzare una macchina virtuale, o un'istanza cloud, al suo primo avvio. Si tratta di uno standard molto diffuso. Per maggiori informazioni, fare riferimento alla documentazione
Compatibilità
Per poter configurare tramite cloud-init una macchina virtuale distribuita dal provider Terraform Cloud Temple, l'OVF utilizzato per distribuire quest'ultima deve essere compatibile con cloud-init.
Per verificare la compatibilità della tua macchina virtuale con cloud-init, inserisci il seguente comando:
systemctl status cloud-init.service
Se cloud-init è correttamente installato sulla macchina, dovresti vedere una risposta come questa. (Vedi screenshot qui sotto)
Se necessario, puoi trovare immagini compatibili con cloud-init su internet (ad esempio Ubuntu Cloud Image) o installarlo tu stesso sulla tua macchina prima di trasformarla in OVF.
Distribuzione
Ora che sei sicuro che l'OVF distribuito sia compatibile con cloud-init, ecco un esempio di file terraform (.tf) che puoi utilizzare per configurare la tua macchina virtuale. NB: Tutti gli esempi mostrati qui possono essere trovati nella cartella degli esempi del repository del provider Terraform Cloud Temple qui: Esempi
main.tf
resource "cloudtemple_compute_virtual_machine" "ubuntu-cloud-init" {
name = "ubuntu-cloud-init"
memory = 8 * 1024 * 1024 * 1024
cpu = 2
num_cores_per_socket = 1
cpu_hot_add_enabled = true
cpu_hot_remove_enabled = true
memory_hot_add_enabled = true
datacenter_id = data.cloudtemple_compute_virtual_datacenter.TH3S.id
host_cluster_id = data.cloudtemple_compute_host_cluster.CLU001.id
datastore_id = data.cloudtemple_compute_datastore.DS003.id
content_library_id = data.cloudtemple_compute_content_library.local.id
content_library_item_id = data.cloudtemple_compute_content_library_item.ubuntu-cloudimg.id
power_state = "on"
backup_sla_policies = [
data.cloudtemple_backup_sla_policy.sla001-daily-par7s.id,
data.cloudtemple_backup_sla_policy.sla001-weekly-par7s.id,
]
cloud_init = {
network-config = filebase64("./cloud-init/network-config.yml")
user-data = filebase64("./cloud-init/user-data.yml")
}
}
network-config.yml
#cloud-config
network:
version: 2
ethernets:
eth0:
dhcp4: false
addresses:
- 172.16.100.192/24
gateway4: 172.16.100.1
nameservers:
addresses:
- 172.16.11.4
user-data.yml
#cloud-config
users:
- default
- name: terraform
primary_group: users
shell: /bin/bash
sudo: ['ALL=(ALL) NOPASSWD:ALL']
groups: sudo
lock_passwd: false
plain_text_passwd: password
L'elemento interessante qui è la presenza della proprietà cloud-init, puoi notare che è composta da due sottoproprietà: network-config e user-data.
Queste fanno parte di un insieme di 7 proprietà che puoi utilizzare per configurare la tua macchina virtuale con cloud-init.
- user-data: Questo valore deve essere codificato in base64 e contiene in particolare informazioni di configurazione per gli account utente della macchina virtuale. Puoi anche aggiungere script per installare o aggiornare pacchetti.
- network-config: Questo valore deve essere codificato in base64 e contiene in particolare informazioni di configurazione di rete della macchina virtuale.
- public-keys: Indica che l'istanza deve popolare le 'authorized_keys' dell'utente predefinito con questo valore.
- instance-id: Permette di definire un identificatore univoco di istanza per cloud-init.
- password: Se definito, la password dell'utente predefinito sarà impostata su questo valore per consentire una connessione basata su password. La password sarà valida solo per una singola connessione. Se il valore è 'RANDOM', verrà generata una password casuale e visualizzata sulla console.
- hostname: Specifica un nome host per l'istanza distribuita.
- seedfrom: Permette di definire un URL da cui cloud-init andrà a cercare i file di configurazione che deve utilizzare. Per maggiori informazioni sul funzionamento di cloud-init, si prega di fare riferimento alla documentazione ufficiale
Esecuzione
Per verificare la corretta esecuzione di cloud-init, dovresti essere in grado di connetterti con l'utente che hai configurato nel file user-data.yml o il nome host dovrebbe essere cambiato in quello che hai impostato in 'hostname'.
In caso di problemi, puoi controllare i log di cloud-init utilizzando il seguente comando:
sudo cat /var/log/cloud-init-output.log
Dovresti vedere varie informazioni sull'esecuzione di cloud-init. Nello screenshot seguente, si può notare che la configurazione della rete è andata a buon fine.
