Aller au contenu

Concepts Packer

Packer est un outil open-source de HashiCorp qui automatise la création d'images machine identiques pour plusieurs plateformes à partir d'une configuration unique.


Qu'est-ce que Packer

Packer produit des artefacts immuables : une image construite une fois est déployée telle quelle en production. Cela élimine les dérivés de configuration entre environnements (dev, staging, prod).

Un build Packer se décrit dans un fichier HCL2 (recommande) ou JSON. L'exécution produit une image spécifique au provider cible (AMI, image GCP, fichier qcow2, layer Docker, etc.).


Architecture d'un build

Source (builder)
     |
     v
Provisioners (shell, ansible, file...)
     |
     v
Post-processors (manifest, compress, push...)
     |
     v
Artefact final (AMI, qcow2, image Docker...)

Chaque étape est optionnelle sauf le builder. Les provisioners s'exécutent dans l'ordre de declaration.


Builders

Un builder créé et démarré une machine temporaire, y applique les provisioners, puis capture l'image finale.

Builder Plugin Usage principal
googlecompute hashicorp/googlecompute Google Cloud Platform
amazon-ebs hashicorp/amazon AWS EC2 AMI (EBS-backed)
azure-arm hashicorp/azure Azure Managed Image
qemu hashicorp/qemu Images qcow2/raw (KVM)
docker hashicorp/docker Containers Docker
openstack hashicorp/openstack OpenStack Glance

La section required_plugins du fichier HCL déclaré les plugins nécessaires. Packer les téléchargé au packer init.


Provisioners

Les provisioners configurent la machine en cours de build (installation de paquets, copie de fichiers, exécution de scripts).

Provisioner Usage
shell Scripts bash/sh sur Linux
ansible Playbooks Ansible
file Copie de fichiers vers la machine
powershell Scripts PowerShell sur Windows

Exemple minimal avec le provisioner shell :

build {
  sources = ["source.googlecompute.base"]

  provisioner "shell" {
    inline = [
      "apt-get update -y",
      "apt-get install -y nginx",
      "systemctl enable nginx"
    ]
  }
}

Post-processors

Les post-processors transforment ou publient l'artefact produit par le builder.

Post-processor Usage
manifest Généré un fichier JSON listant les artefacts
compress Compresse l'artefact (gzip, zip)
docker-push Pousse l'image vers un registre Docker
checksum Calcule le hash SHA/MD5 de l'artefact

HCL2 vs JSON

HCL2 est le format recommande depuis Packer 1.7. JSON reste supporte mais ne beneficie pas des nouvelles fonctionnalités.

Fonctionnalité HCL2 JSON
Variables variable {} "variables": {}
Fonctions Oui Non
Conditions condition ? Non
Boucles for_each Non
Commentaires # ou // Non

Migration JSON vers HCL2

Packer intégré un outil de migration automatique :

packer hcl2_upgrade montemplate.json

Le fichier HCL2 équivalent est généré dans le même répertoire.


Installation

# macOS / Linux (Homebrew)
brew tap hashicorp/tap
brew install hashicorp/tap/packer

# Verification
packer version

Sur Linux sans Homebrew, télécharger le binaire depuis releases.hashicorp.com et le placer dans /usr/local/bin.