Terraform cheatsheet - handige opdrachten en voorbeelden

De lijst met alle Terraform-opdrachten

Inhoud

Hier is een uitgebreide Terraform naslagblad
met essentiële opdrachten, configuratieelementen, resourcebeheer, modules, variabelen, statebeheer en best practices.

Terraform is een open-source infrastructure-as-code (IaC) tool ontwikkeld door
HashiCorp,
die gebruikers in staat stelt om infrastructuur over meerdere cloudproviders (bijvoorbeeld AWS, Azure, GCP) te definiëren en in te richten met behulp van declaratieve configuratiebestanden.
Het hoofddoel van Terraform is de automatisering van infrastructuurinrichting, het waarborgen van consistentie en het verminderen van handmatige fouten.
Terraform ondersteunt multi-cloud, modulaire en stategedreven workflows, waardoor het een kernstuk is van moderne DevOps-praktijken.

student using terraform

Belangrijkste voordelen van Terraform:

  • Declaratieve syntaxis: Definieer gewenste infrastructuurstatus in code.
  • Provider-onafhankelijkheid: Werkt met AWS, Azure, GCP, Kubernetes en meer.
  • Statebeheer: Volg infrastructuurveranderingen om conflicten te vermijden.

Installatie- en instelhandleiding

https://developer.hashicorp.com/terraform/tutorials#get-started

De installatieproces van Terraform is vrij eenvoudig.

  • Linux (Ubuntu/Debian):

    wget -O - https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
    echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(grep -oP '(?<=UBUNTU_CODENAME=).*' /etc/os-release || lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
    sudo apt update && sudo apt install terraform
    
  • Windows (WSL):

    wget -O terraform.zip https://releases.hashicorp.com/terraform/1.5.5/terraform_1.5.5_windows_amd64.zip
    unzip terraform.zip
    
  • macOS (Homebrew):

    brew install terraform
    

Verificatie

terraform --version

Terraform CLI-opdrachten

Hieronder vind je een lijst met alle Terraform-opdrachten:

Opdracht Beschrijving
terraform init Initialiseer een nieuw of bestaand Terraform configuratiebestand
terraform validate Controleer of de configuratie geldig is
terraform plan Toon uitvoerplan zonder wijzigingen te maken
terraform apply Pas wijzigingen toe die nodig zijn om de gewenste staat te bereiken
terraform destroy Vernietig Terraform-beheerde infrastructuur
terraform fmt Herformateer configuratiebestanden in de standaardstijl
terraform show Toon huidige staat of plan
terraform refresh Werk staat bij met reële infrastructuur
terraform providers Toon providers die in de configuratie worden gebruikt
terraform graph Visualiseer bronafhankelijkheden als een grafiek
terraform workspace list Toon alle beschikbare workspaces
terraform workspace new Maak een nieuwe workspace aan
terraform workspace select Schakel over naar een opgegeven workspace
terraform workspace show Toon de naam van de huidige workspace
terraform workspace delete Verwijder een opgegeven workspace
terraform output Toon uitvoerwaarden uit het statebestand
terraform import Importeer bestaande bron in Terraform
terraform taint Markeer een bron voor opnieuw aanmaken bij de volgende apply
terraform untaint Markeer een bron niet als getaait
terraform state list Toon bronnen in het statebestand
terraform state show Toon kenmerken van een enkele bron in de staat

Configuratieessentieel

Bestandsextensies

  • .tf: Hoofdconfiguratiebestanden (HCL syntaxis)
  • .tfvars: Waarden van variabelen

Terraform Blocktypes

  • Providervoorbeeld
    provider "aws" {
      region = "us-east-1"
    }
    
  • Resourcevoorbeeld
    resource "aws_instance" "web" {
      ami           = "ami-0abcdef"
      instance_type = "t2.micro"
    }
    
  • Variabelevoorbeeld
    variable "instance_count" {
      type    = number
      default = 2
    }
    
  • Uitvoervoorbeeld
    output "instance_ip" {
      value = aws_instance.web.public_ip
    }
    
  • Modulevoorbeeld
    module "vpc" {
      source = "./modules/vpc"
      cidr_block = var.vpc_cidr
    }
    

Werken met variabelen

  • Variabelen declareren
    variable "region" {
      description = "AWS regio"
      default     = "us-east-1"
    }
    
  • Waarden toekennen
    • CLI: terraform apply -var="region=us-west-2"
    • tfvars-bestand: terraform apply -var-file="prod.tfvars"
  • Typen: string, number, bool, list, map, object

Statebeheer

  • Statebestand: terraform.tfstate
  • Remote state (S3-voorbeeld)
    backend "s3" {
      bucket = "my-tf-state"
      key    = "state.tfstate"
      region = "us-east-1"
    }
    
  • State bekijken:
    terraform show
    terraform state list

Lussen en voorwaarden

  • Count
    resource "aws_instance" "web" {
      count = 3
      ...
    }
    
  • For_each
    resource "aws_s3_bucket" "b" {
      for_each = var.bucket_names
      bucket   = each.value
    }
    
  • Voorwaarden
    instance_type = var.env == "prod" ? "t2.large" : "t2.micro"
    

Functies

  • String interpolatie:
    resource "aws_s3_bucket" "example" { bucket = "my-bucket-${var.env}" }
  • Lijst, mapvoorbeelden:
    locals {
      my_map = { a = 1, b = 2 }
    }
    

Provisioners

Gebbruikt voor het opzetten van bronnen. Voorbeeld:

resource "aws_instance" "web" {
  ...
  provisioner "local-exec" {
    command = "echo Instance created"
  }
}

Best practices

  • Controleer alle .tf bestanden met versiebeheer
  • Vaste providerversies vastleggen om consistente implementaties te waarborgen
  • Remote backend gebruiken voor statebeheer (S3, Azure Blob, enz.)
  • Statebestanden versleutelen in remote backends
  • Modulariseer infrastructuur met herbruikbare modules
  • Documenteer je configuraties
  • Test in staging voordat je naar productie gaat

Aanvullende verwijzingen

  • Help: terraform --help of [opdracht] --help voor opdracht-specifieke help
  • Debuggen: Stel TF_LOG=INFO of TF_LOG=DEBUG in voor gedetailleerde logboeken
  • Opmaak: terraform fmt

Dit naslagblad biedt een snelle toegang tot verwijzingen voor de meest voorkomende en geavanceerde aspecten van Terraform-gebruik - van opdrachten tot best practices - waardoor het praktisch is voor zowel beginners als geavanceerde gebruikers. Veel plezier!