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'executent 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 :
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.