Terraform-Cheatsheet – nützliche Befehle und Beispiele
Die Liste aller Terraform-Befehle
Hier ist eine umfassende Terraform-Cheat-Sheet mit wesentlichen Befehlen, Konfigurationselementen, Ressourcenverwaltung, Modulen, Variablen, Zustandsverwaltung und Best Practices.
Terraform ist ein Open-Source-Infrastructure-as-Code-(IaC)-Tool, das von HashiCorp entwickelt wurde und es Nutzern ermöglicht, Infrastruktur über mehrere Cloud-Anbieter (z. B. AWS, Azure, GCP) hinweg mithilfe deklarativer Konfigurationsdateien zu definieren und bereitzustellen. Sein Hauptzweck besteht darin, die Infrastrukturbereitstellung zu automatisieren, Konsistenz zu gewährleisten und manuelle Fehler zu reduzieren. Terraform unterstützt Multi-Cloud-, modulare und zustandsgesteuerte Workflows und ist damit ein Eckpfeiler moderner DevOps-Praktiken.
Wichtige Vorteile von Terraform:
- Deklarative Syntax: Definieren Sie den gewünschten Infrastrukturzustand im Code.
- Anbieterunabhängigkeit: Funktioniert mit AWS, Azure, GCP, Kubernetes und mehr.
- Zustandsverwaltung: Verfolgt Infrastrukturänderungen, um Konflikte zu vermeiden.
Installations- und Einrichtungshandbuch
https://developer.hashicorp.com/terraform/tutorials#get-started
Der Installationsprozess von Terraform ist recht einfach.
-
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
Überprüfung
terraform --version
Terraform-CLI-Befehle
Hier ist eine Liste aller Terraform-Befehle:
Befehl | Beschreibung |
---|---|
terraform init |
Initialisiert ein neues oder bestehendes Terraform-Konfigurationsverzeichnis |
terraform validate |
Prüft, ob die Konfiguration gültig ist |
terraform plan |
Zeigt den Ausführungsplan an, ohne Änderungen vorzunehmen |
terraform apply |
Wendet die erforderlichen Änderungen an, um den gewünschten Zustand zu erreichen |
terraform destroy |
Zerstört die von Terraform verwaltete Infrastruktur |
terraform fmt |
Formatiert Konfigurationsdateien im Standardstil |
terraform show |
Zeigt den aktuellen Zustand oder Plan |
terraform refresh |
Aktualisiert den Zustand mit der tatsächlichen Infrastruktur |
terraform providers |
Zeigt die in der Konfiguration verwendeten Anbieter |
terraform graph |
Visualisiert Ressourcenabhängigkeiten als Graph |
terraform workspace list |
Listet alle verfügbaren Workspaces |
terraform workspace new |
Erstellt einen neuen Workspace |
terraform workspace select |
Wechselt zu einem bestimmten Workspace |
terraform workspace show |
Zeigt den Namen des aktuellen Workspaces |
terraform workspace delete |
Löscht einen bestimmten Workspace |
terraform output |
Zeigt Ausgabewerte aus der Zustanddatei |
terraform import |
Importiert eine bestehende Ressource in Terraform |
terraform taint |
Markiert eine Ressource zur Neuerstellung beim nächsten Anwenden |
terraform untaint |
Hebt die Markierung einer Ressource als kontaminiert auf |
terraform state list |
Listet Ressourcen in der Zustanddatei |
terraform state show |
Zeigt die Attribute einer einzelnen Ressource im Zustand |
Konfigurationsgrundlagen
Dateierweiterungen
.tf
: Hauptkonfigurationsdateien (HCL-Syntax).tfvars
: Variablenwerte
Terraform-Blocktypen
- Anbieterbeispiel
provider "aws" { region = "us-east-1" }
- Ressourcenbeispiel
resource "aws_instance" "web" { ami = "ami-0abcdef" instance_type = "t2.micro" }
- Variablenbeispiel
variable "instance_count" { type = number default = 2 }
- Ausgabe-Beispiel
output "instance_ip" { value = aws_instance.web.public_ip }
- Modulbeispiel
module "vpc" { source = "./modules/vpc" cidr_block = var.vpc_cidr }
Arbeiten mit Variablen
- Variablen deklarieren
variable "region" { description = "AWS-Region" default = "us-east-1" }
- Werte zuweisen
- CLI:
terraform apply -var="region=us-west-2"
- tfvars-Datei:
terraform apply -var-file="prod.tfvars"
- CLI:
- Typen:
string
,number
,bool
,list
,map
,object
Zustandsverwaltung
- Zustandsdatei:
terraform.tfstate
- Remote-Zustand (S3-Beispiel)
backend "s3" { bucket = "my-tf-state" key = "state.tfstate" region = "us-east-1" }
- Zustand anzeigen:
terraform show
terraform state list
Schleifen und bedingte Anweisungen
- Count
resource "aws_instance" "web" { count = 3 ... }
- For_each
resource "aws_s3_bucket" "b" { for_each = var.bucket_names bucket = each.value }
- Bedingte Anweisungen
instance_type = var.env == "prod" ? "t2.large" : "t2.micro"
Funktionen
- Zeichenketteninterpolation:
resource "aws_s3_bucket" "example" { bucket = "my-bucket-${var.env}" }
- Listen-, Map-Beispiele:
locals { my_map = { a = 1, b = 2 } }
Provisioner
Werden zum Bootstrapping von Ressourcen verwendet. Beispiel:
resource "aws_instance" "web" {
...
provisioner "local-exec" {
command = "echo Instance created"
}
}
Best Practices
- Versionierung aller
.tf
-Dateien - Anbieterversionen sperren, um konsistente Bereitstellungen zu gewährleisten
- Remote-Backend für die Zustandsverwaltung (S3, Azure Blob usw.)
- Zustandsdateien verschlüsseln in Remote-Backends
- Infrastruktur modularisieren mit wiederverwendbaren Modulen
- Konfigurationen dokumentieren
- In der Staging-Umgebung testen, bevor Sie in die Produktion gehen
Zusätzliche Referenzen
- Hilfe:
terraform --help
oder[command] --help
für command-spezifische Hilfe - Fehlerbehebung: Setzen Sie
TF_LOG=INFO
oderTF_LOG=DEBUG
für detaillierte Protokolle - Formatierung:
terraform fmt
Diese Cheat-Sheet bietet einen schnellen Zugriff auf die häufigsten und fortgeschrittensten Aspekte der Terraform-Nutzung – von Befehlen bis hin zu Best Practices – und ist damit praktisch für Anfänger und fortgeschrittene Nutzer.
Nützliche Links
- https://developer.hashicorp.com/terraform
- Docker-Cheat-Sheet
- Docker Compose-Cheat-Sheet - Die nützlichsten Befehle mit Beispielen
- Kubernetes-Cheat-Sheet
- Flutter-Projekt mit Backend auf AWS Amplify bereitstellen
- Hugo-generierte Website auf AWS S3 bereitstellen
- AWS Lambda-Leistung: JavaScript vs. Python vs. Golang
- Layered Lambdas mit AWS SAM und Python
- AWS SAM + AWS SQS + Python PowerTools
- Minio als AWS S3-Alternative. Minio-Übersicht und Installation