Azure Service Bus の名前空間を削除しようとしたら、「移行レプリケーション中のため削除できない」と英語メッセージで止められ、ポータルにも「移行を中止」ボタンが見当たらない――そんな状況にハマっていないでしょうか。本記事では、この状態になる仕組みと、CLI を使った確実な解除手順、さらに運用で同じトラブルを防ぐためのポイントを、実務目線で徹底的に解説します。
Azure Service Bus が「Migration config cannot be deleted because replication is in progress」で削除できない問題
まず、実際に表示される代表的なエラーメッセージを確認しておきましょう。
Migration config cannot be deleted because replication is in progress.
Please complete or abort migration before attempting to delete the config.
日本語にすると「レプリケーションが進行中のため、移行構成 (Migration config) は削除できません。削除する前に、移行を完了 (complete) するか中止 (abort) してください」といった意味です。
このメッセージは、Standard → Premium への移行や Geo-Disaster Recovery (Geo-DR) / Geo-Replication の構成が絡んでいるときに表示されることが多く、単純な「リソース ロック」や「アクセス権限不足」ではありません。裏側では、名前空間同士のペアリングとエイリアスを使ったレプリケーションが動いており、それが完了または解除されるまで削除がブロックされます。
さらに厄介なのが、状態が CreatePairing などで中途半端に固まってしまい、ポータルから Abort/Complete ボタン自体が表示されない、あるいはボタンを押しても成功しないケースです。この場合、Service Bus の移行構成は「Geo-DR のエイリアス」として扱われているため、CLI で Geo-DR のペアリング (georecovery-alias) を直接解除する必要があります。
仕組みをざっくり整理:Standard → Premium 移行と Geo-DR/エイリアスの関係
この問題をすっきり解決するために、まず Azure Service Bus の「移行」と「Geo-DR」の関係をざっくり理解しておきましょう。
Standard → Premium 移行の概要
Standard から Premium への移行機能では、次のような流れで構成されます。
- 既存の Standard 名前空間 と、新しく用意した Premium 名前空間 をペアリングする
- キュー/トピックなどの メタデータ(エンティティ定義)を Premium にコピーしつつ、レプリケーションを続ける
- 移行完了後、接続文字列の向き先を Premium 側に切り替える (complete)
- 旧 Standard 名前空間には postMigrationDnsName(別名の FQDN) で接続し、メッセージの「掃き出し」や後片付けを行う
この移行では、内部的に Geo-DR のエイリアスとよく似た仕組みが使われます。エイリアスはクライアント アプリが接続する「論理名」のようなもので、実際の宛先(Standard / Premium)のどちらを向いているかは、移行の状態によって変わります。
Geo-Disaster Recovery(Geo-DR)の概要
Premium tier では、別リージョンの名前空間とペアリングして、メタデータ(エンティティ設定)のみを複製する Geo-DR 機能が提供されています。Geo-DR では、次のような動きをします。
- プライマリ名前空間とセカンダリ名前空間をペアリングし、エンティティ構成をレプリケーション
- クライアントは、ペアリングに紐づく エイリアス へ接続
- フェールオーバー時は、エイリアスの向き先を一度だけセカンダリ側へ切り替え、ペアリングを解除
Standard → Premium 移行の Migration Config も、内部的にはこの Geo-DR エイリアスを使っているため、レプリケーションが完了していない・ペアリング状態が中途半端、といった場合に「レプリケーション中だから消せない」と怒られてしまうわけです。
なぜ「移行レプリケーション中のため削除できない」のか
今回のエラーは、ざっくりいうと次のような条件で発生します。
- Standard → Premium 移行を開始している(または開始しようとして失敗した)
- Migration Config / Geo-DR エイリアスのペアリングが 正常に完了していない
- しかし「移行中」フラグだけが立ったままになっている
この状態では、Azure 側が「まだレプリケーションが続いているかもしれない」と判断し、以下がブロックされます。
- Migration Config の削除
- Geo-DR エイリアスの削除
- 元の Service Bus 名前空間自体の削除
しかも状態が CreatePairing のような初期フェーズで止まってしまうと、ポータル画面には「移行を中止」「移行を完了」ボタンが出ない・押せない、といった中途半端な UI になりがちです。このときに有効なのが、Azure CLI を使ってペアリングを直接壊すというアプローチです。
全体の解決フロー(最短ルート)
先に、全体の流れを俯瞰できるようにまとめておきます。後ほど、それぞれのステップを詳しく解説します。
| ステップ | やること | 主なコマンド/操作 |
|---|---|---|
| 1 | 移行状態を確認する | az servicebus migration show / ポータルの「移行」ブレード |
| 2 | Abort または Complete を試す | az servicebus migration abort / complete |
| 3 | Abort/Complete できなければ Geo-DR ペアリングを破棄 | az servicebus georecovery-alias break-pair |
| 4 | Migration Config を削除 | az servicebus migration delete |
| 5 | 名前空間を削除 | az servicebus namespace delete |
| 6 | まだダメなら Azure サポートに状態リセットを依頼 | サポート チケット |
事前準備:権限と Azure CLI のチェック
必要なロールと権限
これらの操作は、リソース グループレベルで Owner または Contributor ロールを持っていることが前提です。Reader や、制限付きのカスタム ロールだと、削除系の操作が失敗します。
特に、企業テナントでは、Service Bus 名前空間単体ではなく、リソース グループやサブスクリプションに対するロールが制限されているケースが多いので、最初から確認しておきましょう。
Azure CLI のサインインと変数定義
Azure CLI は最新版を利用することを推奨します。CLI のバージョンによって、一部のサブコマンドの挙動やヘルプが変わるためです。
az login
az account set --subscription <SubscriptionID or Name>
# よく使う変数をシェルにセットしておく
RG=<リソースグループ名>
NS=<ServiceBus の名前空間名>
ALIAS=<エイリアス名> # エラー メッセージ内に表示される場合が多い
エイリアス名 (ALIAS) は、エラーメッセージ中に flyguys-sb-dev-eus のような形で含まれていることがよくあります。見つからない場合でも、後述の az servicebus georecovery-alias list で特定できます。
Step 1:移行状態を確認する(ポータル & CLI)
ポータルでの確認
まずは GUI から状況をざっくり確認します。
- Azure ポータルで問題の Service Bus 名前空間 を開く
- 左側メニューの [設定] → [移行 (Migrate)] を選択
- ステータス欄に表示されている状態を確認(例:
CreatePairing,Active,Replicating等)
ここで 「移行を中止」「移行を完了」ボタンが表示され、クリックできる状態であれば、ポータルからの操作だけで済む可能性があります(後述)。
CLI で詳細状態を取得する
より正確な状態を知りたい・ポータルでボタンが出てこないときは、CLI の migration show を使います。
az servicebus migration show \
--resource-group $RG \
--name $NS
ここで返ってくる JSON 応答の中に、provisioningState や status などの項目があります。状態が Active や Accepted であれば、まだレプリケーションが有効とみなされます。CreatePairing のような中途半端な状態で長時間止まっている場合は、次の Step 2 / Step 3 の対象です。
Step 2:Abort(中止)または Complete(完了)を試す
状態が比較的まとも(Active など)であれば、まずは素直に 移行を中止 (abort) するか、完了 (complete) するかを試します。Azure 公式ドキュメントでも、移行をやめたい場合は abort、切り替えを確定したい場合は complete を実行するよう案内されています。
移行を中止する(abort)
移行を諦めて元の構成に戻したい場合は、次のコマンドを実行します。
az servicebus migration abort \
--resource-group $RG \
--name $NS
Abort のポイント
- Standard → Premium へのコピー処理が中止される
- 接続文字列は元の Standard 名前空間を向いたままになる
- ペアリングも解除されるため、移行前と同じ構成に戻すことができる
移行を完了する(complete)
すでに Premium 側への切り替え前提で作業を進めている場合は、complete で移行を確定させます。
az servicebus migration complete \
--resource-group $RG \
--name $NS
Complete のポイント
- 接続文字列の向き先が Premium 名前空間に切り替わる
- 以降に作成されるエンティティは Premium 側に作られる
- 旧 Standard 名前空間は postMigrationDnsName でアクセスし、キューの中身を掃き出した上で削除できる
注意: complete は、エンティティのコピーが完了していないと失敗する仕様です。エラーが出た場合は、abort を試すか、次の Step 3 の手順へ進みます。
Step 3:CreatePairing などでスタックしている場合は Geo-DR ペアリングを解除
ここが今回の「決定版」の肝になる部分です。
migration abort も complete も成功しない/ボタンすら出てこない場合、多くは バックエンドのペアリング(Geo-DR エイリアス)が中途半端な状態で残っているのが原因です。このときは Geo-DR エイリアスのペアリングを直接破棄する必要があります。
エイリアス名(ALIAS)を特定する
エイリアス名がエラーメッセージに表示されている場合は、そのまま $ALIAS にセットします。表示されていない場合は、次のいずれかで特定します。
# 名前空間に紐づく Alias 一覧を取得
az servicebus georecovery-alias list \
--resource-group $RG \
--namespace-name $NS
# 個別の Alias の詳細を取得
az servicebus georecovery-alias show \
--resource-group $RG \
--namespace-name $NS \
--alias <候補エイリアス名>
ここで、自分が削除したい名前空間にぶら下がっているエイリアスを見つけます。
ペアリングを強制解除する(break-pair)
エイリアス名が分かったら、次のコマンドでペアリングを解除します。
az servicebus georecovery-alias break-pair \
--resource-group $RG \
--namespace-name $NS \
--alias $ALIAS
break-pair の動作
- プライマリとセカンダリの間で行われていた メタデータのレプリケーションを停止
- Geo-DR 構成(災害対策ペアリング)が解除される
- その結果、Migration Config や名前空間の削除ロックが解ける
このコマンドは、Geo-DR 構成を明示的に無効にするため、「もうこのペアリングは不要」と判断できる環境でのみ実行してください。誤って本番系のペアリングを壊さないよう、対象の名前空間・リソース グループ・サブスクリプションを何度も確認することをおすすめします。
break-pair 後に再度 Abort / Delete を試す
ペアリング解除に成功したら、次の順にコマンドを再実行します。
az servicebus migration abort(またはcomplete)を試す- それでもダメなら
az servicebus migration deleteで Migration Config を削除 - 最後に
az servicebus namespace deleteで名前空間を削除
多くのケースでは、この break-pair → migration delete → namespace delete の流れで問題を解消できるはずです。
Step 4:Migration Config をクリーンアップする
ペアリングの問題を解消した後も、Migration Config のリソース定義が残っている場合があります。そのときは次のコマンドで削除します。
az servicebus migration delete \
--resource-group $RG \
--name $NS
このコマンドは「Standard → Premium 移行の構成情報」を削除するだけで、名前空間自体はまだ残ります。移行を再設定する予定がなければ、削除して問題ありません。
Step 5:Service Bus 名前空間を削除する
ここまで来たら、ようやく本丸の 名前空間削除を再試行できます。
az servicebus namespace delete \
--resource-group $RG \
--name $NS
もしくは Azure ポータルから通常通り「削除」を行います。このタイミングで、例のメッセージ
Migration config cannot be deleted because replication is in progress.
が表示されないことを確認してください。
Step 6:それでも削除できない場合は Azure サポートに状態リセットを依頼
まれに、バックエンド側のメタデータが不整合になり、どう試しても CLI が 「レプリケーション中」だと主張し続ける場合があります。このときは、ユーザー側からできる操作がありません。
その場合は、次の情報を添えて Azure サポートにチケットを起票し、移行状態のリセット/Geo-DR 構成のクリアを依頼してください。
- 問題の Service Bus 名前空間名
- サブスクリプション ID とリソース グループ名
- 実行したコマンドと、その結果のエラーメッセージ
- 発生している正確なメッセージ(コピー&ペースト)
Azure 側の内部状態の修復が必要になるため、この段階では自力での解消は難しいと割り切りましょう。
ポータルだけで対応できるケース(ボタンが出る場合)
ここまで CLI 中心で説明してきましたが、ポータルに「移行を中止(Abort)」や「移行を完了(Complete)」ボタンが出ている場合は、よりシンプルに対応できます。
- Azure ポータル → 対象の Service Bus 名前空間
- 左メニュー [設定] → [移行 (Migrate)]
- ステータスが
ActiveやReplicatingになっていれば、[移行を中止] をクリック - 処理完了後、ポータルから名前空間の削除を再試行
もしボタンが表示されない・押してもエラーになる場合は、裏側のペアリング状態が壊れているサインなので、迷わず前述の Geo-DR ペアリング解除(break-pair) を検討してください。
よくあるハマりどころと対処パターン
実際のトラブル シューティングでよく見かけるパターンを、症状別に整理します。
| 症状 | 想定原因 | 対応のポイント |
|---|---|---|
CreatePairing 状態で長時間進まない | ペアリングが途中で失敗し、Migration Config だけ残っている | CLI で georecovery-alias break-pair を実行 → migration delete → 名前空間削除 |
| ポータルに「移行を中止」ボタンが出ない | バックエンド状態とポータル UI の認識がズレている | migration show で状態を確認しつつ、Geo-DR エイリアスを特定して CLI で解除 |
| エイリアス名が分からない | メッセージを見落としている・ポータルから確認が難しい | georecovery-alias list / show で洗い出し、不要なものを特定 |
| 削除操作が「権限不足」で失敗する | リソース グループに対するロールが足りない | Owner または Contributor を付与してもらう |
| 「リソース ロック」が原因で削除できない | 運用上の保護ロック(Delete/ReadOnly)が設定されている | ポータルの [ロック] を確認し、「なし」または不要なロックを解除 |
運用上の注意点とベスト プラクティス
最後に、今後同じトラブルに陥らないための運用上のコツをまとめておきます。
移行と Geo-DR の組み合わせは慎重に設計する
Standard → Premium 移行と Geo-DR は、どちらも 名前空間同士のペアリングとエイリアス を使うため、設計が複雑になりがちです。特に、
- 移行作業中に、別の Geo-DR 構成を追加する
- 試験的なペアリングを作って放置する
といった運用をすると、どのエイリアスがどの目的で存在しているか分からなくなり、削除時に混乱します。環境ごとに次のようなルールを決めておくと安全です。
- エイリアス名には、用途(migration / dr など)と環境(dev / stg / prd)を含める
- 移行完了後、不要になったエイリアスや Geo-DR 構成はすぐに削除する
- 命名規則とペアリング構成を Wiki や IaC(Bicep / Terraform)に明文化しておく
Abort と Complete の違いを理解してから実行する
特に本番環境では、Abort と Complete の違いを理解せずに実行するのは危険です。
- Abort:移行を取りやめる。接続先はあくまで元の Standard のまま。
- Complete:移行を確定する。接続先が Premium に切り替わる。
本番トラフィックを Premium に切り替えるタイミングは、周辺システムや監視基盤と合わせて計画し、リハーサルを行った上で実施するようにしましょう。
Azure CLI のヘルプとバージョンをこまめに確認する
Azure CLI は比較的頻繁にアップデートされるため、古いブログ記事のコマンドをそのまま使うとオプション仕様が変わっていることがあります。
az --versionでバージョンを確認az servicebus -hやaz servicebus migration -hで最新ヘルプを確認- 不明なオプションがあれば、公式ドキュメントを検索して仕様を確認
公式の CLI リファレンスには、各コマンドの説明や制限事項が詳しく記載されていますので、特に本番環境での操作前には必ず目を通すことをおすすめします。
Geo-Replication(データ レベルのレプリケーション)との混同に注意
2025 年時点では、Premium tier には Geo-DR(メタデータのレプリケーション)に加えて、Geo-Replication(メッセージ データも含めたレプリケーション) が提供されています。
今回の「Migration config cannot be deleted…」問題で絡んでいるのは主に Geo-DR のエイリアスとペアリングであり、Geo-Replication の設定だけでこのエラーになるわけではありません。ただし、将来的に両機能を併用する構成も一般的になると考えられるため、ドキュメントを読み込んで概念を整理しておくとよいでしょう。
簡単なまとめ:困ったときのチェックリスト
最後に、実際にトラブルシューティングするときに使えるチェックリストを載せておきます。
- ① 本当にロールやリソース ロックが原因ではないか?
→ Owner/Contributor か、[ロック] に Delete/ReadOnly がないか確認。 - ② migration show の状態はどうなっているか?
→CreatePairingなど中途半端な状態で止まっていないか。 - ③ Abort / Complete は試したか?
→ ポータルまたは CLI で実行し、その結果を記録。 - ④ Geo-DR エイリアスは残っていないか?
→georecovery-alias list / showで確認。 - ⑤ break-pair を実行したか?
→ ターゲットを慎重に確認しつつ実行。その後 migration delete → namespace delete。 - ⑥ それでもダメならサポートにエスカレーションしたか?
→ 実行ログとともにチケットを作成。
この流れを押さえておけば、「移行レプリケーション中のため削除できない」問題で数日間足止めされる、といった悲しい事態をかなりの確率で避けられます。
Azure Service Bus は、Standard → Premium 移行や Geo-DR / Geo-Replication など、高度な機能を組み合わせて使える強力なサービスです。その分だけ構成が複雑になりやすいので、ペアリングとエイリアスの関係をきちんと理解し、CLI を使いこなしてロックを安全に解除することが、安定した運用への近道と言えるでしょう。

コメント