📜 Inhaltsverzeichnis
Terraform IaC Infrastructure as Code
Meistern Sie Infrastructure as Code mit Terraform. Erstellen, ändern und versionieren Sie Ihre Infrastruktur sicher und effizient über verschiedene Cloud-Anbieter hinweg.
🏗️ Was ist Terraform?
Terraform ist ein Open-Source-Tool für Infrastructure as Code (IaC), entwickelt von HashiCorp. Es ermöglicht Benutzern, Infrastrukturressourcen deklarativ mithilfe einer Konfigurationssprache namens HashiCorp Configuration Language (HCL) oder optional JSON zu definieren und zu provisionieren.
🌐 Multi-Cloud
Unterstützt AWS, Azure, GCP, etc.
🔄 Deklarativ
Beschreiben Sie den Zielzustand
🛠️ Plan & Apply
Sicherer Ausführungsplan
Mit Terraform können Sie komplexe Infrastrukturen über verschiedene Anbieter hinweg verwalten. Es trennt die Planungsphase (was getan werden muss) von der Anwendungsphase (tatsächliche Ausführung), was eine Überprüfung und Genehmigung von Änderungen ermöglicht, bevor sie angewendet werden.
🧩 Kernkonzepte
Terraform basiert auf einigen Schlüsselkonzepten, die das Fundament für die Verwaltung Ihrer Infrastruktur bilden.
🔌 Provider
Provider sind Plugins, die Terraform verwendet, um mit Cloud-Anbietern, SaaS-Anbietern und anderen APIs zu interagieren. Jeder Provider fügt eine Reihe von Ressourcentypen und/oder Datenquellen hinzu, die Terraform verwalten kann. Beispiele sind AWS, Azure, Google Cloud, Kubernetes, Docker usw.
# Beispiel: AWS Provider Konfiguration
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.0"
}
}
}
provider "aws" {
region = "eu-central-1"
}
🧱 Resources
Resources sind die grundlegendsten Elemente in Terraform. Jede Ressource beschreibt ein oder mehrere Infrastrukturobjekte, wie z.B. virtuelle Maschinen, Netzwerke oder Datenbankinstanzen.
# Beispiel: AWS EC2 Instanz Ressource
resource "aws_instance" "web_server" {
ami = "ami-0c55b31ad2c455052" # Beispiel AMI ID
instance_type = "t2.micro"
tags = {
Name = "HelloWorld"
}
}
🔩 Variables & Outputs
Eingabevariablen dienen als Parameter für ein Terraform-Modul, sodass Aspekte der Konfiguration angepasst werden können, ohne den Quellcode des Moduls zu ändern. Ausgabewerte sind wie Rückgabewerte für ein Terraform-Modul.
# Beispiel: Variable Definition
variable "instance_type" {
description = "Der Typ der EC2 Instanz"
type = string
default = "t2.micro"
}
# Beispiel: Output Definition
output "instance_ip_addr" {
value = aws_instance.web_server.public_ip
}
📦 Modules
Module sind Container für mehrere Ressourcen, die zusammen verwendet werden. Ein Modul ist eine Sammlung von .tf- und/oder .tf.json-Dateien, die in einem Verzeichnis gespeichert sind. Module sind der Hauptweg, um Terraform-Konfigurationen zu paketieren und wiederzuverwenden.
💾 State Management
Terraform speichert den Zustand Ihrer verwalteten Infrastruktur und Konfiguration. Dieser Zustand wird verwendet, um reale Ressourcen mit Ihrer Konfiguration abzugleichen, Metadaten zu verfolgen und die Leistung für große Infrastrukturen zu verbessern. Der Zustand wird standardmäßig lokal in einer Datei namens \`terraform.tfstate\` gespeichert, kann aber für Teamarbeit und bessere Verwaltung in einem Remote-Backend (z.B. AWS S3, Terraform Cloud) gespeichert werden.
⚙️ Terraform Workflow
Der Kern-Workflow von Terraform besteht aus drei Hauptschritten:
- Init: Initialisiert das Arbeitsverzeichnis, lädt Provider-Plugins herunter und konfiguriert das Backend. (\`terraform init\`)
- Plan: Erstellt einen Ausführungsplan. Terraform bestimmt, welche Aktionen erforderlich sind, um den gewünschten Zustand zu erreichen. (\`terraform plan\`)
- Apply: Wendet die im Plan beschriebenen Änderungen an, um die Infrastruktur zu erstellen, zu aktualisieren oder zu löschen. (\`terraform apply\`)
- Destroy: Zerstört alle von Terraform verwalteten Ressourcen. (\`terraform destroy\`)
Dieser Zyklus aus Schreiben, Planen und Anwenden ist der fundamentale Prozess bei der Verwendung von Terraform.
🌟 Best Practices
- Verwenden Sie Remote State Backends für Teamarbeit und Sicherheit.
- Strukturieren Sie Ihren Code mit Modulen für Wiederverwendbarkeit und Lesbarkeit.
- Versionieren Sie Ihren Terraform-Code mit Git oder einem ähnlichen System.
- Verwenden Sie Variablen für konfigurierbare Werte und vermeiden Sie Hardcoding.
- Formatieren Sie Ihren Code konsistent mit \`terraform fmt\`.
- Validieren Sie Ihre Konfiguration mit \`terraform validate\`.
- Implementieren Sie eine "Least Privilege"-Strategie für Provider-Anmeldeinformationen.
- Planen Sie Änderungen immer, bevor Sie sie anwenden, und überprüfen Sie den Plan sorgfältig.
☁️ Terraform Cloud & Enterprise
HashiCorp bietet Terraform Cloud als gehosteten Dienst an, der die Zusammenarbeit, Governance und das State Management erleichtert. Für größere Organisationen gibt es Terraform Enterprise, eine selbst gehostete Version mit zusätzlichen Funktionen.
🤝 Kollaboration
Gemeinsame Workspaces, Versionierung.
🛡️ Governance
Policy as Code (Sentinel), Kostenkontrolle.