
Azure Image Builder
Author Packer `azure-arm` builds that produce Azure managed images or Compute Gallery images for custom VM fleets.
Install
npx skills add https://github.com/hashicorp/agent-skills --skill azure-image-builderWhat is this skill?
- Packer `azure-arm` builder for Linux managed images with timestamped naming
- Documents service-principal variables: client_id, client_secret, subscription_id, tenant_id
- Calls out Azure compute, storage, and data-transfer costs during builds
- Typical build duration guidance: roughly 15–45 minutes by provisioning and OS
- Links HashiCorp Azure plugin ~> 2.0 and official ARM builder reference
Adoption & trust: 910 installs on skills.sh; 654 GitHub stars; 3/3 security scanners passed (skills.sh audits); trending (+100% hot-view momentum).
Recommended Skills
Azure Deploymicrosoft/azure-skills
Azure Preparemicrosoft/azure-skills
Azure Storagemicrosoft/azure-skills
Azure Validatemicrosoft/azure-skills
Appinsights Instrumentationmicrosoft/azure-skills
Azure Resource Lookupmicrosoft/azure-skills
Journey fit
Primary fit
Golden images and gallery artifacts are production infrastructure assets maintained after you know what to ship, not front-end feature work. Infra subphase is where reproducible VM images, resource groups, and gallery versioning live.
Common Questions / FAQ
Is Azure Image Builder safe to install?
skills.sh reports 3 of 3 security scanners passed. Review the Security Audits panel on this page before installing in production.
SKILL.md
READMESKILL.md - 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](https://developer.hashicorp.com/packer/integrations/hashicorp/azure/latest/components/builder/arm) > **Note:** Building Azure images incurs costs (compute, storage, data transfer). Builds typically take 15-45 minutes depending on provisioning and OS. ## Basic Managed Image ```hcl 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 ```hcl 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 ```bash # 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 ```hcl source "azure-arm" "ubuntu" { use_azure_cli_auth = true subscription_id = var.subscription_id # ... rest of configuration } ``` ## Build Commands ```bash # 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 - [Azure ARM Builder](ht