azure-image-builder

द्वारा hashicorp

Azure प्रबंधित इमेज और Azure Compute Gallery इमेज को Packer के साथ बनाएँ। Azure VMs के लिए कस्टम इमेज बनाते समय उपयोग करें।

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

hashicorp की और Skills

provider-actions
hashicorp
Implement Terraform Provider actions using the Plugin Framework. Use when developing imperative operations that execute at lifecycle events (before/after…
official
new-terraform-provider
hashicorp
Use this when scaffolding a new Terraform provider with the Plugin Framework: workspace layout, go module setup, provider server main.go, and a provider.go…
official
terraform-test
hashicorp
Comprehensive guide for writing and running Terraform tests. Use when creating test files (.tftest.hcl), writing test scenarios with run blocks, validating…
official
terraform-test
hashicorp
Terraform परीक्षण लिखने और चलाने के लिए व्यापक मार्गदर्शिका, जिसमें अभिकथन, मॉकिंग और मॉड्यूल सत्यापन शामिल हैं। .tftest.hcl सिंटैक्स का उपयोग करके परीक्षण फ़ाइलें लिखें, जिनमें रन ब्लॉक हों जो प्लान या अप्लाई मोड में निष्पादित हों, अनुक्रमिक और समानांतर निष्पादन का समर्थन करते हुए वैकल्पिक स्थिति पृथक्करण के साथ। संसाधन विशेषताओं, आउटपुट और डेटा स्रोतों पर शर्तों का अभिकथन करें; अमान्य इ
official
provider-actions
hashicorp
प्लगइन फ्रेमवर्क का उपयोग करके संसाधन जीवनचक्र घटनाओं पर अनिवार्य Terraform प्रदाता क्रियाएँ लागू करें। बनाने से पहले/बाद और अपडेट करने से पहले/बाद जीवनचक्र ट्रिगर का समर्थन करता है (Terraform 1.14.0 में नष्ट करने की घटनाएँ उपलब्ध नहीं हैं)। सही फ्रेमवर्क प्रकार, संग्रह के लिए ElementType और इनपुट सत्यापन के लिए वैलिडेटर के साथ उचित स्कीमा परिभाषा की आवश्यकता है। लंबे समय तक चलने वाले संच
official
aws-ami-builder
hashicorp
Packer के amazon-ebs बिल्डर के साथ कस्टम Amazon Machine Images बनाएं। स्रोत AMI से HCL टेम्पलेट्स का उपयोग करके AMI निर्माण को स्वचालित करता है, जिसमें अनुकूलन के लिए प्रोविज़नर (शेल स्क्रिप्ट, फ़ाइल अपलोड, कॉन्फ़िगरेशन प्रबंधन) शामिल हैं। ami_regions के माध्यम से बहु-क्षेत्र AMI वितरण और नाम, स्वामी और वर्चुअलाइज़ेशन प्रकार के आधार पर लचीली स्रोत AMI फ़िल्टरिंग का समर्थन करता है। पर्यावरण चर, AWS क्रेडेंशियल फ़ाइल या
official
new-terraform-provider
hashicorp
Plugin Framework का उपयोग करके एक नया Terraform प्रदाता तैयार करें। मानक "terraform-provider-" नामकरण परंपरा के साथ एक नया Go मॉड्यूल वर्कस्पेस उत्पन्न करता है और आवश्यक निर्भरताओं को आरंभ करता है। HashiCorp के Plugin Framework पैटर्न का पालन करते हुए एक टेम्पलेट main.go फ़ाइल प्रदान करता है, जिसमें अनुकूलन के लिए TODO मार्कर होते हैं। बिल्ड और टेस्ट कमांड चलाकर सेटअप को मान्य करता है ताकि यह सुनिश्चित हो सके कि प्रदाता संकलित होता है और प्रारंभिक जांच पास कर
official
azure-verified-modules
hashicorp
Azure Terraform मॉड्यूल के लिए AVM अनुपालन हेतु प्रमाणन आवश्यकताएँ और सर्वोत्तम अभ्यास। प्रदाता संस्करण बाधाओं (azurerm >= 4.0, < 5.0; azapi >= 2.0, < 3.0) को लागू करता है और पिन किए गए Terraform रजिस्ट्री स्रोतों के पक्ष में git-आधारित मॉड्यूल संदर्भों को प्रतिबंधित करता है। सभी पहचानकर्ताओं के लिए लोअर स्नेक_केसिंग, सटीक चर प्रकार, एंटी-भ्रष्टाचार परत पैटर्न के माध्यम से अलग-अलग आउटपुट
official