mcpField
P
pulumi-arm-to-pulumi

pulumi-arm-to-pulumi

github.com/pulumiクラウド・DevOps782.1k 回インストール3 週間前に更新
リポジトリ

pulumi-arm-to-pulumi について

pulumi-arm-to-pulumiは、ARMテンプレートからPulumiへの移行を案内するスキルで、Azureリソースの変換やインポートに対応します。リソースの網羅的な対応付け、段階的な検証、Pull Request向けの移行レポートを重視します。

主な機能

  1. 01ARMテンプレートの構造と依存関係の分析
  2. 02リソースとロジックのPulumiへの手動変換
  3. 03Azure NativeまたはAzure Classicプロバイダーの選択
  4. 04既存Azureリソースのインポート対応
  5. 05previewによるインポート差分の確認
  6. 06リソース対応表と移行レポートの作成

活用シーン

  1. 01ARMテンプレートからPulumiプログラムへの移行
  2. 02テンプレート内リソースの棚卸しとプロバイダー選定
  3. 03既存AzureリソースのPulumi管理へのインポート
  4. 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.md
arm-import.md
use_cases.yaml
agents/
openai.yaml

詳細

重要:計画の調整が必要です

このスキルを読み込む前に移行計画をすでに作成している場合は、必ず次のことを行ってください。

  1. 既存の計画を、このスキルのワークフローと要件に照らして確認します
  2. 不足している点、抜けている手順、誤った前提を特定します
  3. このスキルのガイダンスに沿うよう、計画を更新して修正します
  4. 作業を進める前に、調整した計画をユーザーに伝えます

成功に不可欠な要件

移行の成果物は、以下のすべてを満たす必要があります。

  1. すべてのリソースを網羅する

    • ARM テンプレートの各リソースは、必ず次のいずれかに該当する必要があります。
      • Pulumi プログラムに含まれている
      • または、最終レポートで明確に理由が説明されている
  2. デプロイに成功する

    • 生成された Pulumi プログラムは構造的に有効であり、(適切な設定を前提として)pulumi preview が正常に実行できる必要があります。
  3. インポート時の差分ゼロ検証(既存のリソースをインポートする場合)

    • インポート後、pulumi preview で次の内容が表示される必要があります。
      • 更新なし
      • 置換なし
      • 作成なし
      • 削除なし
    • 差分がある場合は、プレビュー解決ワークフローを使用して解消してください。arm-import.md を参照してください。
  4. 最終移行レポート

    • プルリクエストに適した正式な移行レポートを必ず出力してください。
    • 次の内容を含めてください。
      • 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 テンプレートを変換する自動ツールはありません。完全な変換は、すべて自分で行う必要があります。

主な変換原則
  1. プロバイダーの方針:

    • デフォルト:Azure Resource Manager API を幅広くカバーするため、@pulumi/azure-native を使用します
    • フォールバック:azure-native が特定の機能に対応していない場合や、よりシンプルな抽象化が必要な場合は、@pulumi/azure(クラシックプロバイダー)を使用します

    ドキュメント:

  2. 言語のサポート:

    • TypeScript/JavaScript:最も一般的で、IDE のサポートも優れています
    • Python:データチームや ML ワークフローに適しています
    • C#:.NET チームに自然に適合します
    • Go:高いパフォーマンスと強い型付けが特長です
    • Java:エンタープライズ Java チーム向けです
    • YAML:シンプルな宣言型のアプローチです
    • ユーザーの好みや既存のコードベースに基づいて選択します
  3. 完全な網羅性:

    • 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)
  • インポート後に差分ゼロを達成するための プレビュー解決ワークフロー
  • プロパティの競合を段階的にデバッグする方法
主なインポート原則
  1. インラインのインポート方式:

    • Azure Resource ID を指定して、リソースオプション import を使用します
    • 専用のインポートツールはありません(pulumi-cdk-importer とは異なります)
  2. Azure Resource ID:

    • 予測可能なパターンに従います:/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}
    • 命名規則から生成するか、Azure CLI で照会できます
  3. 差分ゼロの検証:

    • インポート後に 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. 検証

プレビューで差分ゼロを達成した後(インポートする場合)、移行を検証します。

  1. すべてのエクスポートを確認します。

    pulumi stack output
    
  2. リソース間の関係を確認します。

    pulumi stack graph
    
  3. アプリケーションの機能をテストします(該当する場合)。

  4. 移行後に必要な手動手順を記録します。

ユーザーとの作業

ユーザーが ARM から Pulumi への移行の計画や実施について支援を求めた場合は、上記の情報を使用して、変換とインポートのプロセスを案内してください。

詳細なドキュメント

追加情報が必要な場合は、web-fetch ツールを使用して Pulumi の公式ドキュメントから情報を取得してください。

Microsoft Azure ドキュメント:

出力形式(必須)

移行を実施する際は、必ず次の内容を出力してください。

  1. 概要(全体的な説明)
  2. 移行計画の概要
    • 特定した ARM テンプレートのリソース
    • 変換戦略(言語、プロバイダー)
    • インポート方法(該当する場合)
  3. Pulumi コードの出力(ファイルごとに整理)
    • メインプログラムファイル
    • コンポーネントリソース(該当する場合)
    • 構成手順
  4. リソースマッピング表(ARM → Pulumi)
    • ARM リソースの種類 → Pulumi リソースの種類
    • ARM リソース名 → Pulumi 論理名
    • インポート ID(インポートする場合)
  5. プレビューの解決に関する注記(インポートする場合)
    • 発生した差分
    • 適用した解決方法
    • 無視したプロパティと追加したプロパティ
  6. 最終移行レポート(PR の準備ができた状態)
    • 変更内容の概要
    • テスト手順
    • 既知の制限事項
    • 次のステップ
  7. 構成のセットアップ
    • 必須の構成値
    • pulumi config set コマンドの例

コードの構文が正しいことを確認し、ファイルごとに明確に分けてください。

コメント