azure-image-builder

Construisez des images managées Azure et des images Azure Compute Gallery avec Packer. À utiliser lors de la création d'images personnalisées pour les machines virtuelles Azure.

npx skills add https://github.com/hashicorp/agent-skills --skill azure-image-builder

Azure Image Builder

Build Azure managed images and Azure Compute Gallery images using Packer's azure-arm builder.

Reference: Azure ARM Builder

Note: Building Azure images incurs costs (compute, storage, data transfer). Builds typically take 15-45 minutes depending on provisioning and OS.

Basic Managed Image

packer {
  required_plugins {
    azure = {
      source  = "github.com/hashicorp/azure"
      version = "~> 2.0"
    }
  }
}

variable "client_id" {
  type      = string
  sensitive = true
}

variable "client_secret" {
  type      = string
  sensitive = true
}

variable "subscription_id" {
  type = string
}

variable "tenant_id" {
  type = string
}

variable "resource_group" {
  type    = string
  default = "packer-images-rg"
}

locals {
  timestamp = regex_replace(timestamp(), "[- TZ:]", "")
}

source "azure-arm" "ubuntu" {
  client_id       = var.client_id
  client_secret   = var.client_secret
  subscription_id = var.subscription_id
  tenant_id       = var.tenant_id

  managed_image_resource_group_name = var.resource_group
  managed_image_name                = "my-app-${local.timestamp}"

  os_type         = "Linux"
  image_publisher = "Canonical"
  image_offer     = "0001-com-ubuntu-server-jammy"
  image_sku       = "22_04-lts-gen2"

  location = "East US"
  vm_size  = "Standard_B2s"

  azure_tags = {
    Name      = "my-app"
    BuildDate = local.timestamp
  }
}

build {
  sources = ["source.azure-arm.ubuntu"]

  provisioner "shell" {
    inline = [
      "sudo apt-get update",
      "sudo apt-get upgrade -y",
    ]
  }
}

Azure Compute Gallery

source "azure-arm" "ubuntu" {
  client_id       = var.client_id
  client_secret   = var.client_secret
  subscription_id = var.subscription_id
  tenant_id       = var.tenant_id

  os_type         = "Linux"
  image_publisher = "Canonical"
  image_offer     = "0001-com-ubuntu-server-jammy"
  image_sku       = "22_04-lts-gen2"

  location = "East US"
  vm_size  = "Standard_B2s"

  shared_image_gallery_destination {
    resource_group       = "gallery-rg"
    gallery_name         = "myImageGallery"
    image_name           = "ubuntu-webapp"
    image_version        = "1.0.${formatdate("YYYYMMDD", timestamp())}"
    replication_regions  = ["East US", "West US 2"]
    storage_account_type = "Standard_LRS"
  }
}

Authentication

Service Principal

# Create service principal
az ad sp create-for-rbac \
  --name "packer-sp" \
  --role Contributor \
  --scopes /subscriptions/<subscription-id>

# Set environment variables
export ARM_CLIENT_ID="<client-id>"
export ARM_CLIENT_SECRET="<client-secret>"
export ARM_SUBSCRIPTION_ID="<subscription-id>"
export ARM_TENANT_ID="<tenant-id>"

Managed Identity

source "azure-arm" "ubuntu" {
  use_azure_cli_auth = true
  subscription_id    = var.subscription_id
  # ... rest of configuration
}

Build Commands

# Set authentication
export ARM_CLIENT_ID="your-client-id"
export ARM_CLIENT_SECRET="your-client-secret"
export ARM_SUBSCRIPTION_ID="your-subscription-id"
export ARM_TENANT_ID="your-tenant-id"

# Initialize plugins
packer init .

# Validate template
packer validate .

# Build image
packer build .

Common Issues

Authentication Failed

  • Verify service principal credentials
  • Ensure Contributor role on resource group
  • Check subscription and tenant IDs

Compute Gallery Version Exists

  • Image versions are immutable
  • Use unique version numbers with date/build number
  • Cannot overwrite existing versions

Timeout During Provisioning

  • Check network connectivity from build VM
  • Verify NSG rules allow required traffic
  • Increase timeout if needed

References

Plus de skills de hashicorp

provider-framework-migration
hashicorp
Migrer les ressources et sources de données du provider Terraform du Plugin SDKv2 vers le Plugin Framework : multiplexage des deux plugins dans un seul provider (terraform-plugin-mux,…
provider-configuration
hashicorp
Implémenter la configuration et l'authentification du provider Terraform avec le Plugin Framework : schéma du provider pour les identifiants (attributs Optionnel + Sensible),…
provider-ephemeral-resources
hashicorp
Mettre en œuvre les ressources éphémères du fournisseur Terraform avec le Plugin Framework : le cycle de vie Open/Renew/Close, la conception de schéma éphémère, l'enregistrement via…
terraform-test
hashicorp
Guide complet pour écrire et exécuter des tests Terraform avec assertions, simulation et validation de modules. Rédigez des fichiers de test utilisant la syntaxe .tftest.hcl avec des blocs run qui s'exécutent en mode plan ou apply, prenant en charge l'exécution séquentielle et parallèle avec isolation d'état optionnelle. Affirmez les conditions sur les attributs de ressources, les sorties et les sources de données ; utilisez expect_failures pour valider que les entrées invalides sont correctement rejetées. Les fournisseurs simulés (Terraform 1.7.0+) simulent le comportement de l'infrastructure sans...
terraform-policy
hashicorp
Écrire, tester ou convertir des fichiers Terraform Policy (.policy.hcl, .policytest.hcl, Sentinel→tfpolicy). Déclencheurs : policy.hcl, policytest, convert sentinel, tfpolicy,…
terraform-search-import
hashicorp
Découvrir les ressources cloud existantes à l'aide de requêtes Terraform Search et les importer en masse dans la gestion Terraform. Utiliser lors de l'intégration d'infrastructure non gérée…
aws-ami-builder
hashicorp
Construisez des images Amazon Machine personnalisées avec le constructeur amazon-ebs de Packer. Automatise la création d'AMI à partir d'AMI sources à l'aide de modèles HCL avec des provisionneurs pour la personnalisation (scripts shell, téléchargements de fichiers, gestion de configuration). Prend en charge la distribution multi-région d'AMI via ami_regions et le filtrage flexible des AMI sources par nom, propriétaire et type de virtualisation. S'authentifie via des variables d'environnement, un fichier d'identifiants AWS ou des profils d'instance IAM ; inclut des commandes de validation et de construction pour le modèle...
tfctl
hashicorp
Interagir avec HCP Terraform / Terraform Cloud / Terraform Enterprise en utilisant l'interface en ligne de commande tfctl. Couverture complète de l'API. À utiliser pour TOUT HCP Terraform ou Terraform Cloud ou…