Terraform cheatsheet - handige opdrachten en voorbeelden
De lijst met alle Terraform-opdrachten
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.
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"
- CLI:
- 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
ofTF_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!
Nuttige links
- https://developer.hashicorp.com/terraform
- Docker naslagblad
- Docker Compose naslagblad - meest nuttige opdrachten met voorbeelden
- Kubernetes naslagblad
- Flutter project implementeren met backend naar AWS Amplify
- Hugo gegenereerde website implementeren naar AWS S3
- AWS lambda prestaties: JavaScript vs Python vs Golang
- Gestapelde Lambdas met AWS SAM en Python
- AWS SAM + AWS SQS + Python PowerTools
- Minio als alternatief voor AWS S3. Minio overzicht en installatie