pulumi-arm-to-pulumi について
pulumi-arm-to-pulumiは、ARMテンプレートからPulumiへの移行を案内するスキルで、Azureリソースの変換やインポートに対応します。リソースの網羅的な対応付け、段階的な検証、Pull Request向けの移行レポートを重視します。
主な機能
- 01ARMテンプレートの構造と依存関係の分析
- 02リソースとロジックのPulumiへの手動変換
- 03Azure NativeまたはAzure Classicプロバイダーの選択
- 04既存Azureリソースのインポート対応
- 05previewによるインポート差分の確認
- 06リソース対応表と移行レポートの作成
活用シーン
- 01ARMテンプレートからPulumiプログラムへの移行
- 02テンプレート内リソースの棚卸しとプロバイダー選定
- 03既存AzureリソースのPulumi管理へのインポート
- 04インポート後のリソース差分の確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ pulumi/ agent-skills --skill pulumi-arm-to-pulumiインストール後、Claude Code で/pulumi-arm-to-pulumiを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
arm-conversion-patterns.mdarm-import.mduse_cases.yamlagents/openai.yaml詳細
重要:計画の調整が必要です
このスキルを読み込む前に移行計画をすでに作成している場合は、必ず次のことを行ってください。
- 既存の計画を、このスキルのワークフローと要件に照らして確認します
- 不足している点、抜けている手順、誤った前提を特定します
- このスキルのガイダンスに沿うよう、計画を更新して修正します
- 作業を進める前に、調整した計画をユーザーに伝えます
成功に不可欠な要件
移行の成果物は、以下のすべてを満たす必要があります。
-
すべてのリソースを網羅する
- ARM テンプレートの各リソースは、必ず次のいずれかに該当する必要があります。
- Pulumi プログラムに含まれている
- または、最終レポートで明確に理由が説明されている
- ARM テンプレートの各リソースは、必ず次のいずれかに該当する必要があります。
-
デプロイに成功する
- 生成された Pulumi プログラムは構造的に有効であり、(適切な設定を前提として)
pulumi previewが正常に実行できる必要があります。
- 生成された Pulumi プログラムは構造的に有効であり、(適切な設定を前提として)
-
インポート時の差分ゼロ検証(既存のリソースをインポートする場合)
- インポート後、
pulumi previewで次の内容が表示される必要があります。- 更新なし
- 置換なし
- 作成なし
- 削除なし
- 差分がある場合は、プレビュー解決ワークフローを使用して解消してください。arm-import.md を参照してください。
- インポート後、
-
最終移行レポート
- プルリクエストに適した正式な移行レポートを必ず出力してください。
- 次の内容を含めてください。
- ARM → Pulumi リソースの対応付け
- プロバイダーの選択(azure-native と azure)
- 動作上の違い
- 不足している手順、または手動で必要な手順
- 検証手順
情報が不足している場合
ユーザーが提供した ARM テンプレートが不完全、曖昧、または必要な成果物が不足している場合は、Pulumi コードを生成する前に具体的な質問をしてください。
インポート時の特定のリソースプロパティの扱いが曖昧な場合は、Pulumi コードを変更する前に具体的な質問をしてください。
移行ワークフロー
このワークフローに記載された順序で厳密に従ってください。
1. 情報収集
1.1 Azure 資格情報を確認する
Azure CLI コマンド(例:az resource list、az resource show)の実行には、ESC と az login を使用した初回ログインが必要です。
- ユーザーがすでに ESC 環境を提供している場合は、それを使用してください。
- ESC 環境が指定されていない場合は、Azure CLI コマンドを実行する前に、どの ESC 環境を使用するかユーザーに確認してください。
ESC を使用して Azure CLI を設定する:
- ESC 環境では、環境変数または Azure CLI の設定を通じて Azure 資格情報を提供できます
- ESC を使用して Azure にログインし、資格情報を提供します。例:
pulumi env run {org}/{project}/{environment} -- bash -c 'az login --service-principal -u "$ARM_CLIENT_ID" --tenant "$ARM_TENANT_ID" --federated-token "$ARM_OIDC_TOKEN"'。セッションを確立した後は ESC は不要です - 資格情報が有効であることを確認します:
az account show - サブスクリプションを確認します:
az account list --query "[].{Name:name, SubscriptionId:id, IsDefault:isDefault}" -o table
ESC の詳細情報: ツール「Skill」を name = "pulumi-esc" で呼び出し、pulumi-esc スキルを読み込みます
1.2 ARM テンプレートの構造を分析する
ARM テンプレートには、CloudFormation のような「スタック」の概念はありません。ARM テンプレートの JSON ファイルを直接読み込みます。
# View template structure
cat template.json | jq '.resources[] | {type: .type, name: .name}'
# View parameters
cat template.json | jq '.parameters'
# View variables
cat template.json | jq '.variables'
次の情報を抽出します。
- リソースの種類と名前
- パラメーターとデフォルト値
- 変数と式
- 依存関係(
dependsOn配列) - 入れ子のテンプレートまたはリンクされたテンプレート
- コピーのループ(反復処理の構造)
- 条件付きデプロイ(
conditionプロパティ)
ドキュメント: ARM テンプレートの構造
1.3 リソース一覧を作成する(既存のリソースをインポートする場合)
ARM テンプレートがすでにデプロイされていて、既存のリソースをインポートする場合:
# List all resources in a resource group
az resource list \
--resource-group <resource-group-name> \
--output json
# Get specific resource details
az resource show \
--ids <resource-id> \
--output json
# Query specific properties using JMESPath
az resource show \
--ids <resource-id> \
--query "{name:name, location:location, properties:properties}" \
--output json
ドキュメント: Azure CLI のドキュメント
2. コード変換(ARM → PULUMI)
重要: ARM から Pulumi への変換には手動での翻訳が必要です。ARM テンプレートを変換する自動ツールはありません。完全な変換は、すべて自分で行う必要があります。
主な変換原則
-
プロバイダーの方針:
- デフォルト:Azure Resource Manager API を幅広くカバーするため、
@pulumi/azure-nativeを使用します - フォールバック:azure-native が特定の機能に対応していない場合や、よりシンプルな抽象化が必要な場合は、
@pulumi/azure(クラシックプロバイダー)を使用します
ドキュメント:
- デフォルト:Azure Resource Manager API を幅広くカバーするため、
-
言語のサポート:
- TypeScript/JavaScript:最も一般的で、IDE のサポートも優れています
- Python:データチームや ML ワークフローに適しています
- C#:.NET チームに自然に適合します
- Go:高いパフォーマンスと強い型付けが特長です
- Java:エンタープライズ Java チーム向けです
- YAML:シンプルな宣言型のアプローチです
- ユーザーの好みや既存のコードベースに基づいて選択します
-
完全な網羅性:
- ARM テンプレート内のリソースをすべて変換します
- すべての条件式、ループ、依存関係を保持します
- パラメーターと変数のロジックを維持します
arm-conversion-patterns.md の変換パターンに従ってください。
arm-conversion-patterns.md には、以下の内容が記載されています。
- パラメーター、変数、出力のマッピング
- Copy ループ、条件式、dependsOn の変換
- ネストされたテンプレートから ComponentResource への変換
- Azure Classic プロバイダーの例(VNet、App Service)
- TypeScript の出力処理とよくある落とし穴
3. リソースのインポート(既存リソース)- 任意
変換後、必要に応じて既存のリソースをインポートし、Pulumi で管理できます。ユーザーから依頼がない場合は、変換後の次のステップとして提案してください。
重要:既存の Azure リソースを Pulumi にインポートするようユーザーから依頼された場合は、詳しいインポート手順と差分ゼロの検証ワークフローについて、arm-import.md を参照してください。
arm-import.md には、以下の内容が記載されています。
- インラインのインポート ID のパターンと例
- Azure Resource ID の形式に関する規則
- 子リソースの扱い(例:WebAppApplicationSettings)
- インポート後に差分ゼロを達成するための プレビュー解決ワークフロー
- プロパティの競合を段階的にデバッグする方法
主なインポート原則
-
インラインのインポート方式:
- Azure Resource ID を指定して、リソースオプション
importを使用します - 専用のインポートツールはありません(
pulumi-cdk-importerとは異なります)
- Azure Resource ID を指定して、リソースオプション
-
Azure Resource ID:
- 予測可能なパターンに従います:
/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName} - 命名規則から生成するか、Azure CLI で照会できます
- 予測可能なパターンに従います:
-
差分ゼロの検証:
- インポート後に
pulumi previewを実行します - プレビュー解決ワークフローを使用して、すべての差分を解決します
- 目標:更新、置換、作成、削除を一切発生させないこと
- インポート後に
4. PULUMI の設定
ARM テンプレートのパラメーターに合わせてスタックの設定を行います。
# Set Azure region
pulumi config set azure-native:location eastus --stack dev
# Set application parameters
pulumi config set storageAccountName mystorageaccount --stack dev
# Set secret parameters
pulumi config set --secret adminPassword MyS3cr3tP@ssw0rd --stack dev
5. 検証
プレビューで差分ゼロを達成した後(インポートする場合)、移行を検証します。
-
すべてのエクスポートを確認します。
pulumi stack output -
リソース間の関係を確認します。
pulumi stack graph -
アプリケーションの機能をテストします(該当する場合)。
-
移行後に必要な手動手順を記録します。
ユーザーとの作業
ユーザーが ARM から Pulumi への移行の計画や実施について支援を求めた場合は、上記の情報を使用して、変換とインポートのプロセスを案内してください。
詳細なドキュメント
追加情報が必要な場合は、web-fetch ツールを使用して Pulumi の公式ドキュメントから情報を取得してください。
- ARM 移行ガイド: https://www.pulumi.com/docs/iac/adopting-pulumi/migrating-to-pulumi/from-arm/
- Azure Native プロバイダー: https://www.pulumi.com/registry/packages/azure-native/
- Azure Classic プロバイダー: https://www.pulumi.com/registry/packages/azure/
Microsoft Azure ドキュメント:
- ARM テンプレート リファレンス: https://learn.microsoft.com/en-us/azure/azure-resource-manager/templates/
- Azure CLI リファレンス: https://learn.microsoft.com/en-us/cli/azure/
- Azure リソース ID: https://learn.microsoft.com/en-us/azure/azure-resource-manager/templates/template-functions-resource
出力形式(必須)
移行を実施する際は、必ず次の内容を出力してください。
- 概要(全体的な説明)
- 移行計画の概要
- 特定した ARM テンプレートのリソース
- 変換戦略(言語、プロバイダー)
- インポート方法(該当する場合)
- Pulumi コードの出力(ファイルごとに整理)
- メインプログラムファイル
- コンポーネントリソース(該当する場合)
- 構成手順
- リソースマッピング表(ARM → Pulumi)
- ARM リソースの種類 → Pulumi リソースの種類
- ARM リソース名 → Pulumi 論理名
- インポート ID(インポートする場合)
- プレビューの解決に関する注記(インポートする場合)
- 発生した差分
- 適用した解決方法
- 無視したプロパティと追加したプロパティ
- 最終移行レポート(PR の準備ができた状態)
- 変更内容の概要
- テスト手順
- 既知の制限事項
- 次のステップ
- 構成のセットアップ
- 必須の構成値
pulumi config setコマンドの例
コードの構文が正しいことを確認し、ファイルごとに明確に分けてください。