azure-image-builder について
Packer の `azure-arm` ビルダーで Azure マネージドイメージと Azure Compute Gallery イメージを作成するスキルです。Azure 利用者向けに、テンプレート、サービスプリンシパルまたはマネージド ID による認証、ビルド時の問題調査を扱います。
主な機能
- 01マネージドイメージのビルドテンプレート
- 02Azure Compute Gallery イメージ
- 03サービスプリンシパル認証
- 04マネージド ID 認証
- 05Packer の初期化とビルドコマンド
活用シーン
- 01Azure マネージドイメージのビルド
- 02Azure Compute Gallery へのイメージ公開
- 03Azure ビルド用の認証設定
- 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 ルールで必要なトラフィックが許可されていることを確認します
- 必要に応じてタイムアウトを延長します
リファレンス
コメント
Markdown 対応