📜 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
Supports AWS, Azure, GCP, etc.
🔄 Deklarativ
Beschreiben Sie den Zielzustand
🛠️ Plan & Apply
Secure execution plan
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: Initializes the working directory, downloads provider plugins and configures the backend. (`terraform init`)
- Plan: Creates an execution plan. Terraform determines which actions are required to achieve the desired state. (`terraform plan`)
- Apply: Applies the changes described in the plan to create, update or delete the infrastructure. (`terraform apply`)
- Destroy: Destroys all resources managed by Terraform. (`terraform destroy`)
Dieser Zyklus aus Schreiben, Planen und Anwenden ist der fundamentale Prozess bei der Verwendung von Terraform.
🌟 Best Practices
- Use remote state backends for teamwork and security.
- Structure your code with modules for reusability and readability.
- Version your Terraform code with Git or a similar system.
- Use variables for configurable values and avoid hardcoding.
- Formatieren Sie Ihren Code konsistent mit \`terraform fmt\`.
- Validieren Sie Ihre Konfiguration mit \`terraform validate\`.
- Implement a "least privilege" strategy for provider credentials.
- Always plan changes before you apply them and check the plan carefully.
☁️ 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.