Packer ist ein Werkzeug von HashiCorp, das aus einer einzigen Vorlage identische Maschinen-Images für verschiedene Plattformen erzeugt. Ein Image ist dabei alles, was zum Starten einer Maschine nötig ist: ein Virtualisierungs-Abbild, ein Cloud-Image (AMI, Azure-Image), ein Container-Image oder eine ISO. Der Nutzen liegt in der Wiederholbarkeit – statt jeden Server von Hand einzurichten, entsteht ein geprüftes Abbild.
Der Grundgedanke
Der klassische Weg „Maschine starten, dann konfigurieren“ hat einen Nachteil: Zwischen Start und fertiger Konfiguration ist die Maschine unterschiedlich weit – es gibt keinen prüfbaren Zustand. Packer dreht den Ablauf um: Konfiguration passiert zur Bauzeit, das Ergebnis ist ein unveränderliches Abbild. In Kombination mit Immutable Infrastructure bedeutet das: Server werden nie nachträglich geändert, sie werden ersetzt.
Aufbau einer Vorlage
packer {
required_plugins {
amazon = { source = "github.com/hashicorp/amazon", version = "~> 1.3" }
}
}
source "amazon-ebs" "debian" {
ami_name = "debian13-app-{{timestamp}}"
instance_type = "t3.micro"
region = "eu-central-1"
source_ami_filter {
filters = { name = "debian-13-amd64-*" }
owners = ["136693071363"]
}
ssh_username = "admin"
}
build {
sources = ["source.amazon-ebs.debian"]
provisioner "shell" {
scripts = ["scripts/base.sh", "scripts/harden.sh"]
}
provisioner "ansible" {
playbook_file = "ansible/site.yml"
}
post-processor "manifest" {
output = "manifest.json"
}
}
Drei Bausteintypen sind zu unterscheiden:
- Builder: die Umgebung, in der gebaut wird (Cloud, VMware, VirtualBox, Docker, QEMU).
- Provisioner: der Konfigurationsschritt – Shell-Skript, Ansible, Puppet, Chef oder Dateiübertragung.
- Post-Processor: was danach mit dem Artefakt geschieht – Manifest schreiben, Image komprimieren, in eine Registry hochladen, in einen anderen Cloud-Account kopieren.
Wichtige Konzepte im Betrieb
- Parallelisierung: In einem
build-Block lassen sich mehrere Quellen gleichzeitig bauen – ein Image für AWS und eines für VMware aus derselben Vorlage. - Versionierung des Ergebnisses: Namen wie
debian13-app-{{timestamp}}sorgen dafür, dass jedes Abbild eindeutig ist. Einlatest-Image ohne Version ist der Anfang von Unklarheit über den Stand. - Geheimnisse: Zugangsdaten gehören in Umgebungsvariablen oder eine Secret-Verwaltung, nicht in die Vorlage. Auch Provisioner-Logs können Geheimnisse enthalten.
- Tests nach dem Bau: Ein Image, das gebaut wurde, ist nicht automatisch brauchbar. Werkzeuge wie InSpec, Goss oder eigene Skripte prüfen Dienste, Benutzer und Sicherheitseinstellungen im gebauten Abbild – erst dann darf es weiterverwendet werden.
Abgrenzung
Packer baut Images, es verwaltet keine laufenden Systeme. Für die Konfiguration innerhalb des Baus dient Ansible oder ein anderes Configuration-Management-Werkzeug; für die Bereitstellung der fertigen Images aus dem Abbild sind Terraform und Cloud-init zuständig. Die Kombination Terraform für die Infrastruktur, Packer für das Abbild und Ansible für die Konfiguration ist ein etabliertes Muster.
Verwandte Grundlagen: Vagrant, Unveränderliche Infrastruktur, Terraform, Cloud-init.