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

BuilderCibleArtefact produit
googlecomputeGCPImage Compute Engine
amazon-ebsAWSAMI
azure-armAzureManaged Image
dockerConteneurImage Docker (layer)
qemuKVM/QEMUImage disque (qcow2, raw)
vsphere-isoVMware vSphereTemplate 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_name doit être unique et versionné (ex. app-v1-0-0), jamais un nom mutable — c’est ce qui garantit qu’un source_image figé 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