Un builder pilote la création de la VM/conteneur temporaire de build et publie l’artefact final (image, conteneur, template…). C’est un plugin — déclaré dans required_plugins, installé par packer init.
Builders courants
| Builder | Cible | Artefact produit |
|---|---|---|
googlecompute | GCP | Image Compute Engine |
amazon-ebs | AWS | AMI |
azure-arm | Azure | Managed Image |
docker | Conteneur | Image Docker (layer) |
qemu | KVM/QEMU | Image disque (qcow2, raw) |
vsphere-iso | VMware vSphere | Template VM |
googlecompute en détail
source "googlecompute" "app" {
project_id = var.project_id
zone = "europe-west1-b"
network = "default"
source_image_family = "debian-12"
source_image_project_id = ["debian-cloud"]
image_name = "app-v1-0-0" # figé, immuable
image_family = "app" # facultatif, "dernière version"
image_description = "..."
image_labels = { workload = "app" }
machine_type = "e2-medium"
ssh_username = "packer"
disk_size = 20
}source_image_family/source_image_project_id: image de base sur laquelle Packer démarre — même logique de résolution que côté Instance Template Terraform.image_namedoit être unique et versionné (ex.app-v1-0-0), jamais un nom mutable — c’est ce qui garantit qu’unsource_imagefigé dans un Instance Template pointe toujours vers le même contenu.image_family: posée sur l’image publiée au moment de sa construction. La famille est définie ici, à la construction — voir Création d’une image custom pour le comportement de dépréciation automatique côté GCP.- Le builder crée une VM temporaire dans
project_id/zone/network, exécute les provisioners dessus via SSH (ssh_username), puis crée l’image à partir de son disque avant de détruire la VM.
En relation avec
- Anatomie d’un template Packer — où s’insère le bloc
source - Provisioners — ce qui s’exécute sur la VM temporaire créée par le builder
- Création d’une image custom — comportement de l’image publiée côté GCP
- Instance Template — consomme l’image produite