マイグレーションモード - 既存 Azure リソースからのインポート
既存の Azure Resource Group からリソース情報をダンプし、Claude Code を活用して Terraform 設定ファイルを自動生成できます。
マイグレーションには 2 つの方法があります:infra init と同時にマイグレーション(新規テナント作成時に、初期化後にマイグレーションモードを開始)、infra migrate コマンド(既存テナントに対して後からマイグレーションを実行)
前提条件
- Azure CLI:
az --versionで確認、az loginでログイン - Claude Code CLI:
npm install -g @anthropic-ai/claude-codeまたはyarn global add @anthropic-ai/claude-code、export ANTHROPIC_API_KEY=your-api-key-hereで APIキーを設定
Claude Code CLI がインストールされていない場合、コマンド実行時にインストール方法が表示されます。
使い方
方法 1: infra init と同時にマイグレーション(新規テナント)
新しいテナントを作成しながらマイグレーションを実行します。
- テナントの初期化:
infra init <tenant-name>でテナントを作成(対話形式でテンプレートタイプ、デプロイ環境、ロケーション、GitHub リポジトリ情報、ACR とイメージ名、その他のコンポーネント設定を入力) - マイグレーションモードの開始: テナント作成完了後、「既存の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形式)
- Container Apps の環境変数(
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 は以下の作業を行います:
- ダンプされたリソース情報の分析
config.tomlファイルの生成- 環境変数ファイル(
.env.frontend.<env>,.env.backend.<env>)の生成 - 環境変数の暗号化(
infra encrypt) - Terraform ファイルの生成(
infra generate) - 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に以下のエラーがあります。修正してください: <エラー内容>"
注意事項
-
セキュリティ: ダンプされた情報には機密情報が含まれる可能性があります。
migration_tmp/ディレクトリは.gitignoreに含まれていますが、取り扱いには注意してください。 -
Apply 前の確認: Claude が生成した設定は必ず
infra planで確認してから Apply してください。 -
手動修正: Claude が完璧な設定を生成できない場合もあります。必要に応じて手動で修正してください。
-
既存リソースの保護: 既存のリソースを変更・削除する可能性があるため、本番環境での使用は特に慎重に行ってください。
関連ドキュメント
- テナント登録 - 通常の初期化方法
- CLI コマンドリファレンス - CLI コマンドリファレンス