Iniziare con Terraform Windows e Terraform EC2

Nello spazio dell’infrastruttura come codice (IaC), uno degli strumenti più utili emersi negli ultimi anni è HashiCorp’s Terraform Windows. La capacità di versionare l’infrastruttura, automatizzare il provisioning delle risorse e eseguire su diversi fornitori di cloud è enorme per qualsiasi flusso di lavoro DevOps e di automazione.

Un caso d’uso per Terraform è in CI/CD. Terraform ti permette di:

I miei ultimi video

  • creare un ambiente di test
  • implementare un’applicazione
  • eseguire test di integrazione
  • distruggere l’ambiente di test

Tutti i passaggi sono eseguiti automaticamente. E non è richiesto alcun data center!

Prerequisiti

Questo articolo è una guida all’installazione e all’avvio di Terraform Windows. Se desideri seguire, assicurati di avere i seguenti prerequisiti.

  • A Windows 10 device
  • Un account AWS
  • Il CLI AWS installato e configurato su quel dispositivo. Puoi imparare come installarlo qui e come configurarlo qui.
  • (Opzionale) Visual Studio Code con l’estensione Terraform

Installazione dell’applicazione Terraform Windows

Per sfruttare la potenza di Terraform, devi prima installarlo sul tuo sistema operativo preferito. In questo articolo, mi concentrerò su Windows. Ma sappi che Terraform può essere eseguito su altri sistemi operativi. Se non stai utilizzando Windows, dai un’occhiata alla documentazione di installazione.

La strada difficile

Se non puoi utilizzare un gestore di pacchetti o se vuoi capire come funziona il processo di installazione, puoi installare Terraform manualmente. Puoi installare Terraform scaricando l’eseguibile e aggiungendolo al percorso di sistema variabile di ambiente. Se sembra intimidatorio, ti assicuro che c’è un modo più semplice per farlo che imparerai nella prossima sezione.

  1. Scarica la versione appropriata di Terraform dalla pagina di download di HashiCorp. Nel mio caso, è la versione a 64 bit per Windows.
  2. Crea una cartella sul tuo disco C:\ dove puoi inserire l’eseguibile di Terraform. Preferisco mettere gli installer in una sottocartella (ad esempio C:\tools) dove puoi inserire i binari.
  3. Dopo il completamento del download, trovalo in Esplora file. Estrai il file zip nella cartella creata al passaggio 2.
  4. Apri il menu Start e digita “environment” e la prima cosa che compare dovrebbe essere Modifica le variabili di ambiente di sistema. Clicca su quella opzione e dovresti vedere questa finestra.
System Properties

5. Fai clic su Variabili d’ambiente… in basso e vedrai questo:

Windows environment variables

6. Nella sezione inferiore dove si legge Variabili di sistema, trova quella chiamata Path e fai clic su Modifica. Vedrai quindi un elenco dei percorsi in cui trovare i binari di cui Windows potrebbe aver bisogno per qualsiasi motivo.

7. Fai clic su Nuovo e aggiungi il percorso della cartella in cui si trova terraform.exe in fondo all’elenco. Dovrebbe apparire così quando hai finito.

Editing the system path

8. Fai clic su OK su ciascuno dei menu che hai aperto finché non ce ne sono più.

9. Per assicurarti che Windows rilevi il nuovo percorso, apri un nuovo prompt del CMD/PowerShell e digita refreshenv.

10. Verifica che l’installazione sia riuscita inserendo terraform --version. Se restituisce una versione, sei pronto per andare avanti.

Il modo facile

Uff, è stato davvero molto lavoro! Sarebbe terribile doverlo fare ogni volta che devi installare un nuovo software sul tuo dispositivo. Utilizziamo invece un gestore di pacchetti. Ci sono alcuni gestori di pacchetti che puoi utilizzare per installare Terraform su Windows. Per Windows, il mio preferito è Chocolatey. Rende l’installazione, la rimozione e l’aggiornamento del software semplici come un comando di una sola riga, e Terraform non fa eccezione a questo.

Per installare Terraform con Chocolatey, segui i seguenti passaggi:

  1. Apri un prompt del CMD/PowerShell come amministratore e installa Chocolatey utilizzando il comando dalla loro pagina di installazione.
  2. Una volta completato ciò, esegui choco install terraform. Se lo desideri, puoi anche aggiungere -y alla fine per accettare automaticamente l’installazione sul tuo dispositivo.

Dopo l’esecuzione di quel comando, otterrai qualcosa del genere:

Chocolatey v0.10.13
2 validations performed. 1 success(es), 1 warning(s), and 0 error(s).

Installing the following packages:
terraform
By installing you accept licenses for the packages.
Progress: Downloading terraform 0.12.6... 100%

terraform v0.12.6 [Approved]
Downloading terraform 64 bit
  from 'https://releases.hashicorp.com/terraform/0.12.6/terraform_0.12.6_windows
Download of terraform_0.12.6_windows_amd64.zip (15.32 MB) completed.
--SNIP--

3.   Verifica che l’installazione sia stata eseguita correttamente inserendo terraform --version.

La via Linux

I can almost hear what you’re thinking. Wait a minute Chris, didn’t you say this was going to cover installing Terraform on Windows?

Sì, ed è ancora così. Ma una delle funzionalità di Windows 10 è il Sottosistema Windows per Linux, o WSL. Questo ti permette di eseguire comandi Linux su Windows.

  1. Installa WSL. Non andrò in dettaglio su come installare e configurare WSL qui, ma se vuoi seguire e non l’hai ancora configurato, puoi trovare un tutorial TechSnips sul tema qui di seguito.

2.   Nella tua shell WSL, esegui apt-get install unzip. Ti servirà per estrarre i binari di Terraform successivamente.

3.   Scarica Terraform eseguendo wget https://releases.hashicorp.com/terraform/0.12.6/terraform_0.12.6_linux_amd64.zip. Ricorda di sostituire la versione e l’architettura con quelle più adatte al tuo dispositivo. Puoi trovare l’elenco completo delle versioni di Terraform qui.

4. Esegui unzip terraform_0.12.6_linux_amd64.zip terraform per decomprimere i contenuti dello zip in una cartella chiamata terraform.

5. Una volta che il file ZIP è stato decompresso, sarà necessario spostarlo in una posizione accessibile dal percorso di sistema. Fortunatamente, Linux ha una cartella a cui gli utenti possono aggiungere binari di default. Sposta il binario di Terraform lì eseguendo mv terraform /usr/local/bin/. La cartella /usr/local/bin è già impostata nel tuo percorso di sistema.

6. Verifica che l’installazione sia stata eseguita correttamente eseguendo terraform --version.

Automazione di un’istanza EC2 di Terraform di AWS

Ora che hai installato Terraform, puoi iniziare a usarlo. In questo post, mostrerò come creare una semplice istanza EC2 di Terraform di AWS. Tieni presente che Terraform può creare centinaia di diversi tipi di infrastrutture.

Per iniziare, avrai bisogno di una directory in cui eseguire gli script di Terraform EC2. È importante avere una directory separata per ogni ambiente. Al momento in cui sto scrivendo, Terraform non ha un modo per filtrare cosa viene eseguito. Eseguirà tutti gli script nella tua directory di lavoro corrente.

Configurazione di uno script TF

  1. Nella tua console cmd o PowerShell eseguita come amministratore, esegui mkdir hello-terraform e poi cd ./hello-terraform
  2. Una volta che hai una directory, avrai bisogno di uno script Terraform. Di seguito è riportato un esempio di quello che puoi utilizzare. Questo è uno script Terraform tipico che utilizza il provider AWS per creare una risorsa istanza AWS .

Se desideri l’intero script, copialo di seguito. Se vuoi capire cosa fa questo script, continua a leggere di seguito.

# Terraform HCL

provider "aws" {
  region = "us-east-1"
  shared_credentials_file = "~/.aws/credentials"
  profile = "default"
}

resource "aws_instance" "ubuntu" {
  ami           = "ami-07d0cf3af28718ef8"
  instance_type = "t2.micro"

  tags = {
    Name = "HelloTerraform"
  }
}

# Terraform HCL

3. Salva lo script sopra come main.tf nella tua directory di lavoro.

Comprensione degli script TF

#Terraform HCL

provider "aws" {
  region = "us-east-1"
  shared_credentials_file = "~/.aws/credentials"
  profile = "default"
}

Prima di procedere ulteriormente, guarda il blocco sottostante e ciò che sta dichiarando.

# Terraform HCL

Questo blocco indica a Terraform EC2 quale provider utilizzare. Ci sono provider per tutti i principali fornitori di cloud, nonché alcuni fornitori on-premise. Se sei più esperto e sai come scrivere in Golang, puoi anche scrivere il tuo provider.

Questo blocco indica a Terraform di utilizzare il provider AWS e le chiavi di accesso nel file ~/.aws/credentials con il nome del profilo default. Questo file viene creato quando si configura AWS CLI con il comando aws config come indicato nei prerequisiti.

Vale anche la pena notare che ~/ è una scorciatoia per la directory dell’utente corrente. Se provieni da un ambiente Windows, questo è equivalente a $env:USERPROFILE o %USERPROFILE%. Ma Terraform non supporta questa notazione al momento della scrittura.

#Terraform HCL

resource "aws_instance" "ubuntu" {
  ami           = "ami-07d0cf3af28718ef8"
  instance_type = "t2.micro"

  tags = {
    Name = "HelloTerraform"
  }
}

Il blocco successivo descrive un’istanza EC2 di Terraform e come crearla. Se si consulta la documentazione di Terraform per aws_instance, si possono vedere alcuni parametri obbligatori e alcuni opzionali. In questo caso, i parametri obbligatori sono l’ID AMI (ami-07d0cf3af28718ef8) per Ubuntu 18.04 LTS e t2.micro per il tipo di istanza.

Passando un blocco di tag con la chiave Name e il valore HelloTerraform, questo tag verrà assegnato anche all’istanza che viene creata. Questo è opzionale.

terraform init

#Terraform HCL

Refreshing Terraform state in-memory prior to plan...
The refreshed state will be used to calculate this plan, but will not be
persisted to local or remote state storage.

------------------------------------------------------------------------

An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  Creazione dell'istanza AWS Terraform EC2: Testing
  + resource "aws_instance" "ubuntu" {
      + ami                          = "ami-07d0cf3af28718ef8"
      + arn                          = (known after apply)
      + associate_public_ip_address  = (known after apply)
      + availability_zone            = (known after apply)
      + cpu_core_count               = (known after apply)
      + cpu_threads_per_core         = (known after apply)
      + get_password_data            = false
...
--SNIP--

Plan: 1 to add, 0 to change, 0 to destroy.

------------------------------------------------------------------------

Note: You didn't specify an "-out" parameter to save this plan, so Terraform
can't guarantee that exactly these actions will be performed if
"terraform apply" is subsequently run.

Ora che lo script è configurato, chiamarlo eseguendo terraform init dalla directory di lavoro. Questo scaricherà tutte le dipendenze e il provider in una cartella chiamata .terraform. Se tutto va bene, dovresti ottenere qualcosa del genere:

Prima di apportare modifiche, Terraform EC2 ti consente di vedere cosa verrà creato eseguendo terraform plan. Ecco cosa verrà visualizzato:

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value:    

# aws_instance.ubuntu verrà creato

aws_instance.ubuntu: Creating...
aws_instance.ubuntu: Still creating... [10s elapsed]
aws_instance.ubuntu: Still creating... [20s elapsed]
aws_instance.ubuntu: Still creating... [30s elapsed]
aws_instance.ubuntu: Creation complete after 33s [id=i-07cefd2a426a179b5]

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

Creazione dell’istanza AWS EC2: Creazione

Ora sei pronto per eseguirlo da solo eseguendo terraform apply. Di seguito vedrai un output simile a quello di terraform plan, ma con un prompt aggiuntivo per confermare che desideri effettivamente applicare queste modifiche.

Una volta digitato ‘sì’, Terraform EC2 inizierà la fornitura dell’istanza Terraform EC2 chiamando le API AWS con la chiave di accesso nel tuo file delle credenziali. Questo potrebbe richiedere del tempo. Una volta completato, vedrai qualcosa come segue:

Plan: 0 to add, 0 to change, 1 to destroy.

Do you really want to destroy all resources?
  Terraform will destroy all your managed infrastructure, as shown above.
  There is no undo. Only 'yes' will be accepted to confirm.

  Enter a value: 

Distruzione dell’istanza AWS EC2

aws_instance.ubuntu: Destroying... [id=i-07cefd2a426a179b5]
aws_instance.ubuntu: Still destroying... [id=i-07cefd2a426a179b5, 10s elapsed]
aws_instance.ubuntu: Still destroying... [id=i-07cefd2a426a179b5, 20s elapsed]
aws_instance.ubuntu: Still destroying... [id=i-07cefd2a426a179b5, 30s elapsed]
aws_instance.ubuntu: Destruction complete after 30s

Destroy complete! Resources: 1 destroyed.

Una volta terminato l’ambiente di test, puoi distruggere l’istanza.

Nella tua console cmd/PowerShell, digita terraform destroy. Come il comando apply, vedrai un elenco di risorse che Terraform sta per distruggere, quindi un prompt prima di distruggerle effettivamente.

Una volta digitato ‘sì’, Terraform EC2 inizierà a distruggere l’istanza e confermerà quando avrà finito.

Source:
https://adamtheautomator.com/terraform-windows/