Zurück zur Startseite

So verwenden Sie Terraform mit AWS: Vollständiger Leitfaden

Dieser umfassende Leitfaden zeigt Ihnen, wie Sie Terraform mit AWS verwenden, um Cloud-Infrastruktur als Code zu verwalten. Er deckt Provider-Einrichtung, Ressourcendefinition, Zustandsverwaltung, Sicherheitsbest Practices und CI/CD-Integration ab, sodass Sie praktische Fähigkeiten für produktionsreife AWS-Bereitstellungen erwerben.

So verwenden Sie Terraform mit AWS: Schritt-für-Schritt-Anleitung
Advertisement 728x90

Terraform mit AWS nutzen: Der vollständige Leitfaden

Terraform mit AWS nutzen: Der vollständige Leitfaden

Die Verwaltung von Infrastruktur hat sich von manuellen Klicks in der Konsole und fragilen Skripten hin zu deklarativem Code entwickelt, der versioniert, überprüft und geteilt werden kann. Für Teams, die auf Amazon Web Services aufbauen, ist Terraform zum Standard für Infrastructure as Code (IaC) geworden – und die effektive Nutzung von Terraform mit AWS ist heute eine Kernkompetenz für Cloud-Ingenieure. Dieser Leitfaden führt Sie durch den gesamten Workflow – von der Einrichtung des AWS-Providers bis zur Bereitstellung echter Ressourcen mit produktionsreifen Praktiken.

Was Sie lernen werden

Am Ende dieses Leitfadens verstehen Sie den vollständigen Terraform-Workflow auf AWS – von der Provider-Konfiguration und Ressourcendefinition bis hin zum State-Management und der Teamzusammenarbeit. Sie werden in der Lage sein, AWS-Infrastruktur mit Terraforms deklarativem Ansatz bereitzustellen, zu aktualisieren und zu löschen, und Sie werden ein klares mentales Modell für die Strukturierung Ihrer eigenen Projekte mitnehmen. Sie lernen außerdem praktische Schutzmaßnahmen kennen, um kostspielige Fehler wie die Bereitstellung im falschen AWS-Konto zu vermeiden.

Google AdInline article slot

Die Kernkonzepte verstehen: Provider, Ressourcen und State

Bevor Sie eine Konfiguration schreiben, ist es hilfreich, die grundlegenden Bausteine von Terraform zu verstehen. Anders als AWS CloudFormation – das AWS-nativ ist und davon ausgeht, dass Ressourcen innerhalb eines AWS-Kontos erstellt werden – ist Terraform cloud-agnostisch und erfordert, dass Sie explizit Provider deklarieren, die mit bestimmten APIs interagieren.

Was ist ein Provider?

Ein Provider ist ein Plugin, das als Brücke zwischen Terraform und einer Zielplattform fungiert. Der AWS-Provider ermöglicht es Terraform, AWS-APIs aufzurufen, um Ressourcen zu erstellen, zu lesen, zu aktualisieren und zu löschen. Da Terraform mehrere Provider unterstützt – AWS, Kubernetes, Helm und sogar Drittanbieter-SaaS-Tools – können Sie einen Amazon EKS-Cluster bereitstellen und Helm-Charts darin innerhalb derselben Konfiguration deployen.

Ressourcen und Datenquellen

Eine Ressource definiert eine Komponente Ihrer Infrastruktur: eine EC2-Instanz, einen S3-Bucket oder eine Sicherheitsgruppe. Ressourcen werden deklarativ deklariert – Sie geben an, was Sie möchten, und Terraform ermittelt, wie es erstellt wird.

Google AdInline article slot

Eine Datenquelle hingegen fragt AWS nach Informationen über vorhandene Ressourcen. Anstatt beispielsweise eine AMI-ID hart zu codieren, die sich ändern oder je nach Region variieren kann, können Sie eine Datenquelle verwenden, um dynamisch die aktuellste Amazon Linux 2023 AMI abzurufen.

State: Die Quelle der Wahrheit

Terraform führt eine State-Datei, die die von ihm verwalteten Ressourcen nachverfolgt. Dieser State bildet Ihre Konfiguration auf die tatsächliche Infrastruktur ab und ist unerlässlich für die Planung von Updates, die Erkennung von Abweichungen und die saubere Löschung von Ressourcen. Für Teamumgebungen wird dringend empfohlen, den State in einem entfernten Backend wie Amazon S3 zu speichern, um Konflikte zu vermeiden und Konsistenz zu gewährleisten.


Erste Schritte: Tools installieren und AWS-Anmeldedaten konfigurieren

Voraussetzungen

Bevor Sie eine einzige Zeile Konfiguration schreiben, richten Sie Ihre lokale Umgebung ein:

Google AdInline article slot
  1. Terraform CLI 1.5 oder höher – Laden Sie das Binary herunter und fügen Sie es Ihrem PATH hinzu.
  2. AWS CLI – Installieren und konfigurieren Sie es mit IAM-Anmeldedaten, die über ausreichende Berechtigungen verfügen.
  3. Ein AWS-Konto – Nutzen Sie das Free-Tier für Übungen, um unerwartete Kosten zu vermeiden.

Authentifizierung des AWS-Providers

Der AWS-Provider von Terraform authentifiziert sich mit denselben Methoden wie die AWS CLI. Der einfachste Ansatz ist, Umgebungsvariablen mit Ihren IAM-Anmeldedaten zu setzen:

export AWS_ACCESS_KEY_ID=<ihr_access_key>
export AWS_SECRET_ACCESS_KEY=<ihr_secret_key>

Alternativ kann Terraform aus der Standard-Anmeldedatei unter ~/.aws/credentials lesen.


Schritt 1: Ihre erste Terraform-Konfiguration schreiben

Erstellen Sie ein neues Verzeichnis für Ihr Projekt und definieren Sie den Provider und die Ressourcen. Terraform-Konfigurationsdateien verwenden die HashiCorp Configuration Language (HCL) und enden mit .tf.

Der terraform-Block

Der terraform-Block konfiguriert Terraform selbst, einschließlich Provider-Quellen und Versionsbeschränkungen. Das Festlegen von Provider-Versionen verhindert unerwartete Abweichungen, wenn der Provider aktualisiert wird.

terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.0"
    }
  }
  required_version = ">= 1.2"
}

Das Argument source verweist auf den Provider im Terraform Registry. HashiCorp pflegt den AWS-Provider, daher ist seine Quelle hashicorp/aws.

Der provider-Block

Der provider-Block konfiguriert den AWS-Provider, einschließlich der Standardregion:

provider "aws" {
  region = "us-west-2"
}

Eine EC2-Instanz definieren

Ein resource-Block deklariert eine Infrastrukturkomponente. Hier ist, wie Sie eine EC2-Instanz definieren, die eine Datenquelle verwendet, um das neueste Ubuntu-AMI abzurufen:

data "aws_ami" "ubuntu" {
  most_recent = true
  owners      = ["099720109477"] # Canonical

  filter {
    name   = "name"
    values = ["ubuntu/images/hvm-ssd-gp3/ubuntu-noble-24.04-amd64-server-*"]
  }
}

resource "aws_instance" "app_server" {
  ami           = data.aws_ami.ubuntu.id
  instance_type = "t2.micro"

  tags = {
    Name = "terraform-demo"
  }
}

Die Verwendung einer Datenquelle für das AMI hält Ihre Konfiguration dynamisch und portabel über Regionen hinweg.


Schritt 2: Initialisieren, Planen und Anwenden

Der Terraform-Workflow besteht aus drei Kernbefehlen:

terraform init

Initialisieren Sie das Arbeitsverzeichnis. Dies lädt die erforderlichen Provider-Plugins herunter und richtet das Backend ein:

terraform init

Terraform liest den required_providers-Block und installiert die von Ihnen angegebene AWS-Provider-Version.

terraform plan

Zeigen Sie eine Vorschau der Änderungen an, die Terraform an Ihrer Infrastruktur vornehmen wird:

terraform plan

Der Plan zeigt Hinzufügungen, Änderungen und Löschungen – dies ist Ihre Gelegenheit, Fehler vor der Anwendung zu erkennen.

terraform apply

Wenden Sie die Konfiguration an, um Ressourcen zu erstellen. Terraform zeigt den Plan erneut an und fordert eine Bestätigung an:

terraform apply

Geben Sie yes ein, um fortzufahren. Terraform wird die EC2-Instanz bereitstellen und die Ergebnisse ausgeben.

terraform destroy

Wenn Sie fertig sind, räumen Sie auf, um Kosten zu vermeiden:

terraform destroy

Terraform berechnet basierend auf der State-Datei, was gelöscht werden muss, und fordert eine Bestätigung an.


Schritt 3: Eine Sicherheitsgruppe und Provisioning-Logik hinzufügen

Ein Server ist ohne Netzwerkzugriff nutzlos. Fügen Sie eine Sicherheitsgruppe hinzu, um den ein- und ausgehenden Datenverkehr zu steuern:

resource "aws_security_group" "web" {
  name        = "web-sg"
  description = "HTTP und SSH erlauben"
  vpc_id      = var.vpc_id

  ingress {
    from_port   = 80
    to_port     = 80
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }

  ingress {
    from_port   = 22
    to_port     = 22
    protocol    = "tcp"
    cidr_blocks = ["10.0.0.0/16"] # SSH einschränken
  }

  egress {
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = ["0.0.0.0/0"]
  }
}

Hängen Sie die Sicherheitsgruppe an Ihre EC2-Instanz an, indem Sie im Argument vpc_security_group_ids auf aws_security_group.web.id verweisen.

Softwareinstallation mit User Data automatisieren

Verwenden Sie EC2-User Data, um Software beim ersten Start der Instanz zu installieren. Zum Beispiel, um Nginx auf Amazon Linux 2023 zu installieren:

resource "aws_instance" "web" {
  ami                    = data.aws_ami.al2023.id
  instance_type          = "t3.micro"
  vpc_security_group_ids = [aws_security_group.web.id]
  key_name               = var.key_name

  user_data = <<-EOF
              #!/bin/bash
              dnf install -y nginx
              systemctl start nginx
              echo "<h1>Hallo von Terraform</h1>" > /usr/share/nginx/html/index.html
              EOF
}

User Data wird beim ersten Start ausgeführt und ist eine einfache Möglichkeit, Instanzen ohne zusätzliche Konfigurationsmanagement-Tools zu bootstrappen.


Schritt 4: Variablen, Outputs und Module verwenden

Variablen für Wiederverwendbarkeit

Das Hartcodieren von Werten macht Konfigurationen spröde. Definieren Sie Variablen in einer variables.tf-Datei:

variable "instance_type" {
  description = "EC2-Instanztyp"
  type        = string
  default     = "t2.micro"
}

variable "aws_region" {
  description = "AWS-Region"
  type        = string
  default     = "us-west-2"
}

Referenzieren Sie Variablen in Ihrer Konfiguration mit var.instance_type.

Outputs zur Anzeige von Informationen

Outputs ermöglichen es Ihnen, nach der Anwendung Informationen abzurufen, wie z. B. die öffentliche IP der Instanz:

output "instance_public_ip" {
  description = "Öffentliche IP der EC2-Instanz"
  value       = aws_instance.app_server.public_ip
}

Module für wiederverwendbare Komponenten

Module sind Container für mehrere Ressourcen, die über Projekte hinweg geteilt werden können. Das Terraform Registry bietet Tausende von Community-Modulen, und Sie können auch Ihre eigenen schreiben. Die Verwendung von Modulen hält Ihre Root-Konfiguration sauber und fördert die Wiederverwendbarkeit.


Schritt 5: Remote State und Teamzusammenarbeit

In jeder Teamumgebung ist das lokale Speichern von State gefährlich – er kann veralten oder mit Änderungen anderer Benutzer kollidieren. Konfigurieren Sie ein Remote-Backend, typischerweise mit Amazon S3 und DynamoDB für State-Locking:

terraform {
  backend "s3" {
    bucket         = "my-terraform-state-bucket"
    key            = "prod/terraform.tfstate"
    region         = "us-west-2"
    encrypt        = true
    dynamodb_table = "terraform-locks"
  }
}

Diese Konfiguration stellt sicher, dass der State geteilt und während Apply-Operationen gesperrt wird, wodurch gleichzeitige Änderungen verhindert werden, die die State-Datei beschädigen könnten.


Schritt 6: Sicherheits-Best Practices

Provider auf bestimmte AWS-Konten beschränken

Einer der gefährlichsten Fehler ist es, Terraform gegen das falsche AWS-Konto auszuführen – zum Beispiel die Absicht, in der Entwicklung bereitzustellen, aber versehentlich Produktionsanmeldedaten zu verwenden. Die Einstellung allowed_account_ids im Provider-Block schafft ein Sicherheitsnetz:

provider "aws" {
  region  = "us-west-2"
  allowed_account_ids = ["123456789012"] # Nur dieses Konto
}

Wenn Sie versuchen, Terraform mit Anmeldedaten von einem anderen Konto auszuführen, wird der Plan sofort einen Fehler ausgeben, was kostspielige Fehler verhindert.

IAM-Rollen verwenden, keine statischen Schlüssel

Verwenden Sie für EC2-Instanzen immer IAM-Instanzprofile, anstatt statische Anmeldedaten einzubetten. Dies verbessert die Sicherheit und vereinfacht den Schlüsselwechsel.

Versionskontrolle und Überprüfung

Alle Terraform-Konfigurationen sollten in der Versionskontrolle gespeichert werden. Pull-Requests für Infrastrukturänderungen sollten genauso überprüft werden wie Anwendungscode – das ist der Kernwert von IaC.


Terraform mit AWS in CI/CD-Pipelines nutzen

Die Integration von Terraform in CI/CD-Pipelines automatisiert Bereitstellungen und erzwingt Konsistenz. Ein typischer GitHub Actions-Workflow:

name: Terraform Apply
on:
  push:
    branches: [ main ]
jobs:
  terraform:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: hashicorp/setup-terraform@v1
      - name: Terraform Init
        run: terraform init
      - name: Terraform Plan
        run: terraform plan
      - name: Terraform Apply
        run: terraform apply -auto-approve

Dieser Ansatz eliminiert manuelle Apply-Schritte und stellt sicher, dass jeder Merge in den Hauptbranch Infrastruktur bereitstellt, die überprüft und getestet wurde.


Häufig gestellte Fragen

1. Was ist der Unterschied zwischen Terraform und AWS CloudFormation?

Terraform ist cloud-agnostisch und unterstützt mehrere Provider – AWS, Azure, Google Cloud und Hunderte andere – während CloudFormation nur AWS-basiert ist. Terraform bietet außerdem einen flexibleren Workflow mit Plan/Apply-Phasen und unterstützt eine breitere Palette von Drittanbieter-Ressourcen.

2. Wo speichert Terraform den State meiner Infrastruktur?

Standardmäßig speichert Terraform den State in einer lokalen terraform.tfstate-Datei. Für die Produktion und Teamnutzung sollten Sie ein Remote-Backend wie Amazon S3 konfigurieren, um den State zentral mit Locking zu speichern und Konflikte zu vermeiden.

3. Was sind Terraform-Module und warum sollte ich sie verwenden?

Module sind Container für mehrere Ressourcen, die über Projekte hinweg wiederverwendet werden können. Die Verwendung von Modulen reduziert Redundanz, erzwingt Konsistenz und ermöglicht es Ihnen, Infrastrukturmuster über Teams hinweg über das Terraform Registry zu teilen.

4. Wie vermeide ich, versehentlich im falschen AWS-Konto bereitzustellen?

Verwenden Sie die Einstellung allowed_account_ids in Ihrem AWS-Provider-Block, um Terraform auf bestimmte Konto-IDs zu beschränken. Wenn die Anmeldedaten nicht mit der erlaubten Liste übereinstimmen, gibt Terraform einen Fehler aus, bevor Änderungen vorgenommen werden.

5. Was ist der Unterschied zwischen terraform plan und terraform apply?

terraform plan zeigt eine Vorschau der Änderungen, die Terraform an Ihrer Infrastruktur vornehmen würde. terraform apply führt diese Änderungen aus. Führen Sie immer zuerst plan aus, um Fehler zu erkennen, bevor Sie Ressourcen ändern.


Quellen

  1. Terrateam, "How to deploy Nginx with Terraform on AWS" (2026)
  2. AWS Prescriptive Guidance, "Understanding Terraform resources and providers" (2024)
  3. AWS Prescriptive Guidance, "Terraform AWS Provider best practices" (2024)
  4. HashiCorp Developer, "Create infrastructure" (2025)
  5. Refine, "Getting Started with Terraform on AWS" (2024)
  6. DevelopersIO, "Terraform AWS Provider allowed_account_ids" (2025)
  7. GitHub, "terraform-basics-aws" repository

— Editorial Team

Advertisement 728x90

Weiterlesen