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. Ein latest-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.