メインコンテンツまでスキップ

マイグレーションモード - 既存 Azure リソースからのインポート

既存の Azure Resource Group からリソース情報をダンプし、Claude Code を活用して Terraform 設定ファイルを自動生成できます。

マイグレーションには 2 つの方法があります:infra init と同時にマイグレーション(新規テナント作成時に、初期化後にマイグレーションモードを開始)、infra migrate コマンド(既存テナントに対して後からマイグレーションを実行)

前提条件

  1. Azure CLI: az --version で確認、az login でログイン
  2. Claude Code CLI: npm install -g @anthropic-ai/claude-code または yarn global add @anthropic-ai/claude-codeexport ANTHROPIC_API_KEY=your-api-key-here で APIキーを設定

Claude Code CLI がインストールされていない場合、コマンド実行時にインストール方法が表示されます。

使い方

方法 1: infra init と同時にマイグレーション(新規テナント)

新しいテナントを作成しながらマイグレーションを実行します。

  1. テナントの初期化: infra init <tenant-name> でテナントを作成(対話形式でテンプレートタイプ、デプロイ環境、ロケーション、GitHub リポジトリ情報、ACR とイメージ名、その他のコンポーネント設定を入力)
  2. マイグレーションモードの開始: テナント作成完了後、「既存のAzure Resource Groupからインポートしてセットアップを行いますか?」という質問が表示され、Yes を選択するとマイグレーションモードが開始されます

方法 2: infra migrate コマンド(既存テナント)

既に作成済みのテナントに対してマイグレーションを実行します。

infra migrate <tenant-name>  # 全環境をマイグレーション
infra migrate <tenant-name> -e <environment> # 特定環境のみマイグレーション

使用シーン:

  • infra init 時にマイグレーションをスキップした場合
  • 新しい環境を追加して、既存リソースから設定を取得したい場合
  • 設定を再生成したい場合

マイグレーションの流れ

ステップ 1: Claude Code CLI のチェック

Claude Code CLI (claude) がインストールされているか自動的にチェックされます。インストールされていない場合は、エラーメッセージとインストール方法が表示されます。

ステップ 2: Azure Subscription の選択

利用可能な Azure Subscription の一覧から選択します。

サブスクリプションを選択してください:
> My Subscription (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx) [default]
Other Subscription (yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy)

ステップ 3: Resource Group の選択

選択した Subscription 内の Resource Group の一覧から選択します。

リソースグループを選択してください:
> my-app-prod (japaneast)
my-app-dev (japaneast)
shared-resources (eastus)

4. リソースのダンプ

選択後、以下のリソース情報が自動的にダンプされます:

  • リソース一覧と詳細: migration_tmp/<resource-group-name>/
    • resources_summary.json: すべてのリソースの概要
    • <resource-name>-<resource-type>.json: 各リソースの詳細情報
  • 環境変数:
    • Container Apps の環境変数(.env形式)
    • App Services の環境変数(.env形式)

4. Claude による自動生成

ダンプが完了すると、Claude に渡すプロンプトが自動生成されます。

プロンプトには以下が含まれます:

  • ダンプされたリソース情報の場所
  • 生成すべきファイル(config.toml.envファイル)
  • プロジェクト構造の説明
  • 作業手順

5. Claude の実行

プロンプトが表示された後、以下のように Claude コマンドを実行します:

claude --prompt-file "migration_tmp/<resource-group-name>/migration_prompt.txt" \
--project-root "/path/to/infra"

Claude は以下の作業を行います:

  1. ダンプされたリソース情報の分析
  2. config.tomlファイルの生成
  3. 環境変数ファイル(.env.frontend.<env>, .env.backend.<env>)の生成
  4. 環境変数の暗号化(infra encrypt
  5. Terraform ファイルの生成(infra generate
  6. Terraform plan の実行とエラー修正

6. 確認と適用

Claude が作業を完了したら、以下のコマンドで確認します:

# Planの確認
infra plan <tenant-name> <environment>

# 問題がなければApply(手動で実行)
infra apply <tenant-name> <environment>

注意: Claude は infra apply を自動実行しないため、リソースの変更は必ず手動で確認してから実行してください。

ディレクトリ構造

infra/
├── migration_tmp/ # マイグレーション用の一時ディレクトリ(.gitignore対象)
│ └── <resource-group-name>/
│ ├── resources_summary.json # リソース概要
│ ├── <resource-1>.json # リソース1の詳細
│ ├── <resource-2>.json # リソース2の詳細
│ ├── <app-name-1>.env # Container App 1の環境変数
│ ├── <app-name-2>.env # Container App 2の環境変数
│ └── migration_prompt.txt # Claude用プロンプト
└── terraform/
└── environments/
└── tenants/
└── <tenant-name>/
├── config.toml # Claudeが生成
├── .env.frontend.<env> # Claudeが生成
├── .env.backend.<env> # Claudeが生成
└── encrypted/
├── .env.frontend.<env>.enc # 暗号化済み
└── .env.backend.<env>.enc # 暗号化済み

例: 実際のワークフロー

# 1. マイグレーションモードで初期化
$ infra init my-new-project

? 既存のAzure Resource Groupからインポートしてセットアップを行いますか? Yes
✅ Claudeコマンドが利用可能です
📋 サブスクリプション: My Subscription (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)
📦 リソースグループ: my-app-prod

? マイグレーション対象の環境を選択してください:
◉ dev
◯ prd

? 使用するテンプレートを選択してください: Frontend-Backend Separated

🔄 マイグレーションモードを開始します...
📂 ダンプ先: /path/to/infra/migration_tmp/my-app-prod

10/10個のリソースをダンプしました
✓ 環境変数のダンプが完了しました
✓ リソース情報のダンプが完了しました

🤖 環境 "dev" のマイグレーションをClaudeに依頼します...
✅ マイグレーションプロンプトの生成が完了しました

📄 生成されたプロンプト内容:
================================================================================
# Azureリソースから Terraform 設定への移行タスク
...
================================================================================

# 2. Claudeを実行
$ claude --prompt-file "migration_tmp/my-app-prod/migration_prompt.txt" \
--project-root "$(pwd)"

# Claudeがファイルを生成...

# 3. 生成されたファイルを確認
$ ls terraform/environments/tenants/my-new-project/
config.toml .env.frontend.dev .env.backend.dev

# 4. Planを実行して確認
$ infra plan my-new-project dev
✅ Config validation passed
✓ Terraform files are up to date
Terraform plan succeeded with no errors

# 5. 問題がなければApply(慎重に)
$ infra apply my-new-project dev

トラブルシューティング

Claude CLI がインストールされていない

⚠️  Claudeコマンドがインストールされていません。

📦 インストール方法:

1. npmでインストール (推奨):
npm install -g @anthropic-ai/claude-cli

2. yarnでインストール:
yarn global add @anthropic-ai/claude-cli

3. APIキーの設定:
export ANTHROPIC_API_KEY=your-api-key-here

Azure にログインしていない

❌ エラー: Azure にログインしていません。"az login" コマンドでログインしてください。

対処法:

az login

リソースのダンプに失敗

一部のリソースがダンプできない場合、警告が表示されますが処理は続行されます。

⚠️  リソース my-app のダンプに失敗: Access denied

Terraform Plan が失敗する

Claude が生成した設定にエラーがある場合、Claude に再度修正を依頼してください。

# エラー内容をClaudeに伝えて修正を依頼
claude --prompt "以前生成したconfig.tomlに以下のエラーがあります。修正してください: <エラー内容>"

注意事項

  1. セキュリティ: ダンプされた情報には機密情報が含まれる可能性があります。migration_tmp/ディレクトリは.gitignoreに含まれていますが、取り扱いには注意してください。

  2. Apply 前の確認: Claude が生成した設定は必ず infra plan で確認してから Apply してください。

  3. 手動修正: Claude が完璧な設定を生成できない場合もあります。必要に応じて手動で修正してください。

  4. 既存リソースの保護: 既存のリソースを変更・削除する可能性があるため、本番環境での使用は特に慎重に行ってください。

関連ドキュメント