This is an old revision of the document!


Laboratorul 4 - Terraform

Ce este Terraform?

Instalare Terraform

Folosim site-ul oficial al Terraform pentru a instala tool-ul. Găsiți toate detaliile necesare aici: https://www.terraform.io/downloads

Pentru a instala Terraform pe o mașinp cu un sistem de operare Ubuntu / Debian, folosim următoarele comenzi:

wget -O- https://apt.releases.hashicorp.com/gpg | gpg --dearmor | sudo tee /usr/share/keyrings/hashicorp-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
sudo apt update && sudo apt install terraform

Pentru a verifica dacă instalarea fost efectuată cu succes, încercăm să obținem versiunea de Terraform instalată: terraform -version

Terraform autocomplete

Pentru a putea utiliza funcția de autocomplete cu Terraform: terraform -install-autocomplete

Terraform + Docker

În laboratorul curent o să folosim Terraform împreună cu Docker, cu care suntem deja familiari. Începem prin a crea un director nou pentru configuratia noastră:

mkdir lab4cc
cd lab4cc 

Creăm un fișier cu numele main.tf și introducem următorul cod:

terraform {
 required_providers {
   docker = {
     source = "kreuzwerker/docker"
     version = "~> 2.13.0"
   }
 }
}
 
provider "docker" {}
 
resource "docker_image" "nginx" {
 name         = "nginx:latest"
 keep_locally = false
}
 
resource "docker_container" "nginx" {
 image = docker_image.nginx.latest
 name  = "tutorial"
 ports {
   internal = 80
   external = 8000
 }
}

Să analizăm pe rând fiecare bloc de cod introdus:

  • terraform {} - conține setarile de Terraform, inclusiv provider-ul pe care urmează să îl folosim. Pentru fiecare provider, câmpul source definește numele provider-ului. By default, Terraform folosește Terraform Registry pentru a instala un provider. Astfel, în exemplul nostru, kreuzwerker/docker este un provider care se găsește în registrul Terraform la path-ul registry.terraform.io/kreuzwerker/docker. Câmpul version este opțional, dacă nu îl folosim, Terraform o să descarce by default ultima versiune disponibilă.
  • provider {} - un block de tipul provider conține configurările necesare pentru ca acel provider să poată fi folosit. În cazul nostru, am folosit docker. Un provider este doar un plugin pe care Terraform îl folosește pentru a crea și pentru a gestiona resursele.
  • Blocurile de tip resource - un astfel de bloc, așa cum sugerează și numele, este folosit pentru a defini resurse ale infrastructurii noastre. Așa cum putem observa, un bloc de tip resursă are 2 labels: resource “docker_image” “nginx”. În acest exemplu, docker_image este tipul de resursă, iar nginx este numele resursei. Fiecare astfel de bloc are mai multe proprietăți, acestea diferă de la resursă la resursă. Exemplu: în laboratorul viitor o sa configurăm o mașină virtuală într-un provider de cloud unde o să folosim parametrii ca tipul de masină, hard disk, dimensiune hard disk, regiunea în care să fie deployed masina, etc.

Recapitulare cod:

  1. Am populat block-ul terraform cu config-ul unde am specificat providerul docker și versiunea dorită.
  2. Am inițializat providerul docker.
  3. Am creat o resursă de tipul docker_image cu numele nginx (numele variabilei).
  4. Am creat o resursă de tipul docker_container cu numele nginx. În această resursă, pentru imagine am folosit imaginea definită mai sus, iar numele container-ului este dat de câmpul name.

Pentru a pune in picioare infrastructura:

  1. Initializare: terraform init. Urmăriți output-ul comenzii pentru a înțelege ce face această comandă.
  2. Formatarea codului. Acest pas este opțional, dar foarte util: terraform fmt
  3. Validarea configurării (și acest pas este optional, în cazul în care mergem mai departe cu o configurare invalidă, o să primim eroare): terraform validate
  4. Rulăm comanda terraform plan. Această comandă este un dry-run, deci putem observa cum o să arate infrastructura noastră după ce o să aplicăm configurarea creată anterior. Atenție, această comandă nu modifică infrastructura.
  5. Aplicăm configurația: terraform apply

Task: urmati instrucțiunile din shell-ul interactiv și faceți deploy la infrastructură. Observați output-ul comenzii.

Pentru a observa state-ul: terraform show

Task: modificarea unei infrastructuri existente - modificati fișierul anterior, astfel încât container-ul să folosească portul 8080, nu 8000

Rulați comanda pentru a vedea planul. Modificarea este facută in-place?

Ștergere infrastructură - rulați comanda terraform destroy

Variabile în Terraform

Avem următorul fișier outputs.tf, unde avem acest bloc:

output "Lab" {
  value="lab4 first output"
}

Am creat primul output în Terraform. Pentru a observa comportamentul, urmați pașii din exercițiul anterior pentru a “aplica” infrastructura.

Avem acest bloc cu următorul cod:

variable "LabCCTerraform" {
  description = "primul lab in terraform"
  default = "valoare default a primului lab in terraform"
}

Aplicați planul și observați comportamentul.

cc/temp.1667122599.txt.gz · Last modified: 2022/10/30 11:36 by florin.mihalache
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0