mcpField
A
azure-image-builder

azure-image-builder

github.com/hashicorpクラウド・DevOps9092.8k 回インストール今日更新
リポジトリ

azure-image-builder について

Packer の `azure-arm` ビルダーで Azure マネージドイメージと Azure Compute Gallery イメージを作成するスキルです。Azure 利用者向けに、テンプレート、サービスプリンシパルまたはマネージド ID による認証、ビルド時の問題調査を扱います。

主な機能

  1. 01マネージドイメージのビルドテンプレート
  2. 02Azure Compute Gallery イメージ
  3. 03サービスプリンシパル認証
  4. 04マネージド ID 認証
  5. 05Packer の初期化とビルドコマンド

活用シーン

  1. 01Azure マネージドイメージのビルド
  2. 02Azure Compute Gallery へのイメージ公開
  3. 03Azure ビルド用の認証設定
  4. 04プロビジョニングタイムアウトの調査

インストール

コマンドをコピーしてターミナルで実行します。

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

インストール後、Claude Code で/azure-image-builderを入力して読み込まれたか確認します。

詳細

Azure Image Builder

Packer の azure-arm ビルダーを使用して、Azure マネージドイメージと Azure Compute Gallery イメージをビルドします。

リファレンス: Azure ARM Builder

Note: Azure イメージのビルドには費用が発生します(コンピューティング、ストレージ、データ転送)。プロビジョニングと OS によって異なりますが、ビルドには通常 15~45 分かかります。

基本的なマネージドイメージ

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"
  }
}

認証

サービスプリンシパル
# 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>"
マネージド ID
source "azure-arm" "ubuntu" {
  use_azure_cli_auth = true
  subscription_id    = var.subscription_id
  # ... rest of configuration
}

ビルドコマンド

# 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 .

よくある問題

認証に失敗する

  • サービスプリンシパルの認証情報を確認します
  • リソースグループに対する Contributor ロールが設定されていることを確認します
  • サブスクリプション ID とテナント ID を確認します

Compute Gallery のバージョンがすでに存在する

  • イメージのバージョンは変更できません
  • 日付やビルド番号を使った一意のバージョン番号を使用します
  • 既存のバージョンは上書きできません

プロビジョニング中にタイムアウトする

  • ビルド VM からのネットワーク接続を確認します
  • NSG ルールで必要なトラフィックが許可されていることを確認します
  • 必要に応じてタイムアウトを延長します

リファレンス

コメント