TL;DR
Was: Ein Infrastructure-as-Code-Tool zum Bereitstellen von Cloud-Ressourcen.
Warum: Deklarative Syntax, Multi-Cloud, Zustandsverwaltung, reproduzierbare Infrastruktur.
Quick Start
Installieren:
brew install terraform # macOS
# or download from terraform.io
Create main.tf:
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.0"
}
}
}
provider "aws" {
region = "us-east-1"
}
resource "aws_instance" "example" {
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t2.micro"
tags = {
Name = "example-instance"
}
}
Ausführen:
terraform init
terraform plan
terraform apply
Cheatsheet
| Befehl | Beschreibung |
|---|---|
terraform init | Arbeitsverzeichnis initialisieren |
terraform plan | Änderungen vorschauen |
terraform apply | Änderungen anwenden |
terraform destroy | Infrastruktur zerstören |
terraform fmt | Code formatieren |
terraform validate | Konfiguration validieren |
terraform output | Outputs anzeigen |
terraform state list | Ressourcen im State auflisten |
Gotchas
Variables
# variables.tf
variable "instance_type" {
description = "EC2 instance type"
type = string
default = "t2.micro"
}
# main.tf
resource "aws_instance" "example" {
instance_type = var.instance_type
}
# terraform.tfvars
instance_type = "t3.small"
Outputs
output "instance_ip" {
value = aws_instance.example.public_ip
description = "Public IP of the instance"
}
Data sources
data "aws_ami" "ubuntu" {
most_recent = true
filter {
name = "name"
values = ["ubuntu/images/hvm-ssd/ubuntu-focal-20.04-amd64-server-*"]
}
owners = ["099720109477"]
}
resource "aws_instance" "example" {
ami = data.aws_ami.ubuntu.id
}
Modules
module "vpc" {
source = "terraform-aws-modules/vpc/aws"
version = "5.0.0"
name = "my-vpc"
cidr = "10.0.0.0/16"
}
Next Steps
- Terraform Documentation - Offizielle Dokumentation
- Terraform Registry - Provider und Module
- Terraform Tutorials - Lernen
- Terraform Best Practices - Richtlinien