既存の Azure Service Bus Standard 名前空間を Premium レベルに移行する
以前は、Azure Service Bus では Standard レベルでのみ名前空間が提供されていました。 名前空間は、低スループット環境と開発者環境用に最適化されたマルチテナントの設定です。 Premium レベルでは、名前空間ごとに専用のリソースが提供され、予測可能な待機時間と固定価格でのスループット向上が実現します。 Premium レベルは、追加のエンタープライズ機能が必要な高スループット環境および実稼働環境向けに最適化されています。
この記事では、既存の Standard レベルの名前空間を Premium レベルに移行する方法について説明します。
警告
移行は、Service Bus の Standard 名前空間を Premium レベルにアップグレードするためのものです。 移行ツールでは、ダウングレードはサポートされていません。 Standard から Premium レベルへの移行中に、標準 Service Bus へのアクセスに使用できる DNS ポインターが作成されます。 移行中に、古い Service Bus の DNS 名前空間へのポインターを表す alternateName が作成され、操作を元に戻すことができないことに注意してください。 テスト環境では、あらゆる種類のテストを行う必要があります。
いくつかの点に注意してください。
- この移行はインプレースで行われるよう設計されており、既存の送信側および受信側アプリケーションでコードまたは構成の変更は必要ありません。 既存の接続文字列は、新しい Premium 名前空間を自動的に指すようになります。
- 既存の Premium 名を使用している場合、移行を成功させるには、Premium 名前空間にエンティティを含めないでください。また、パーティション分割を有効にしないでください。
- Standard 名前空間のすべてのエンティティは、移行プロセスの間に Premium 名前空間にコピーされます。
- 移行では、Premium レベルでメッセージング ユニットあたり 1,000 エンティティがサポートされます。 必要なメッセージング ユニットの数を明らかにするには、現在の Standard 名前空間に存在するエンティティの数から始めます。
- Basic レベルから Premium レベルに直接移行することはできませんが、まず Basic から Standard に移行し、次のステップで Standard から Premium に移行することによって間接的に移行できます。
- ロールベースのアクセス制御 (RBAC) の設定は移行されないため、移行後に手動で追加する必要があります。
移行の手順
いくつかの条件が移行プロセスに関連します。 エラーの可能性を減らすために、以下の手順をよく理解してください。 以下の手順は移行プロセスの概要であり、以降のセクションで詳細な手順について説明しています。
- 新しい Premium 名前空間を作成します。 本記事の CLI または Azure portal の手順を使用して、次の 3 つのステップを完了します。
- Standard 名前空間と Premium 名前空間を相互にペアにします。
- Standard 名前空間から Premium 名前空間にエンティティを同期 (コピー) します。
- 移行をコミットします。
- 名前空間の移行後の名前を使用して、Standard 名前空間内のエンティティをドレインします。
- Standard 名前空間を削除します。
重要
移行をコミットした後、古い Standard 名前空間にアクセスして、キューとサブスクリプションをドレインします。 メッセージをドレインすると、メッセージを新しい Premium 名前空間に送信し、受信側アプリケーションで処理できるようになります。 キューとサブスクリプションをドレインした後は、古い Standard 名前空間を削除することをお勧めします。
Azure CLI または PowerShell を使用して移行する
Azure CLI または PowerShell ツールを使用して Service Bus の Standard 名前空間を Premium に移行するには、次の手順に従います。
新しい Service Bus Premium 名前空間を作成します。 Azure Resource Manager テンプレートに関する記事、または Azure portal の使用に関する記事をご覧ください。 serviceBusSku パラメーターに対して必ず premium を選択してください。
次の環境変数を設定して、移行コマンドを簡略化します。 Premium 名前空間の Azure Resource Manager ID を取得するには、Azure portal 内の名前空間に移動し、URL の一部をサンプル
/subscriptions/00000000-0000-0000-0000-00000000000000/resourceGroups/contosoresourcegroup/providers/Microsoft.ServiceBus/namespaces/contosopremiumnamespace
のようにコピーします。resourceGroup = <resource group for the standard namespace> standardNamespace = <standard namespace to migrate> premiumNamespaceArmId = <Azure Resource Manager ID of the premium namespace to migrate to> postMigrationDnsName = <post migration DNS name entry to access the standard namespace>
重要
移行後に古い Standard 名前空間にアクセスするには、移行後の別名/名前 (post_migration_dns_name) を使用します。 これを使用してキューとサブスクリプションをドレインした後、名前空間を削除します。
Standard 名前空間と Premium 名前空間をペアにし、次のコマンドを使用して同期を開始します。
az servicebus migration start --resource-group $resourceGroup --name $standardNamespace --target-namespace $premiumNamespaceArmId --post-migration-name $postMigrationDnsName
次のコマンドを使用して、移行の状態を確認します。
az servicebus migration show --resource-group $resourceGroup --name $standardNamespace
次の値が表示されたら、移行は完了したものとみなされます。
- MigrationState = "Active"
- pendingReplicationsOperationsCount = 0
- provisioningState = "Succeeded"
このコマンドでは、移行の構成も表示されます。 値が正しく設定されていることを確認します。 また、ポータルで Premium 名前空間を調べて、すべてのキューとトピックが作成されていること、およびそれらが Standard 名前空間に存在していたものと一致することを確認します。
次の complete コマンドを実行して、移行をコミットします。
az servicebus migration complete --resource-group $resourceGroup --name $standardNamespace
Azure portal を使用した移行
Azure portal を使用した移行の論理フローは、コマンドを使用した移行と同じです。 Azure portal を使用して移行するには、次の手順に従います。
左側のウィンドウの [ナビゲーション] メニューで、 [Premium へ移行] を選択します。 [作業の開始] ボタンをクリックして、次のページに進みます。
次の [名前空間の設定] ページが表示されます。
[名前空間の設定] ページで、次のいずれかの手順のようにします。
- [新しい Premium 名前空間を作成する] を選択した場合:
[名前空間の作成] ページで、名前空間の名前を入力して、 [確認および作成] を選択します。
[確認および作成] ページで、 [作成] を選択します。
- [既存の空の Premium 名前空間を選択します] を選択した場合:
その名前空間を使用している Azure サブスクリプションとリソース グループを選択します。
次に、Premium 名前空間を選択します。
[選択] をクリックします。
- [新しい Premium 名前空間を作成する] を選択した場合:
[移行後の名前] を入力してから、 [次へ] を選択します。 この名前は、移行が完了した後で Standard 名前空間にアクセスするために使用します。
[同期の開始] を選択し、Standard と Premium の名前空間の間でエンティティを同期します。
ダイアログ ボックス内の [はい] を選択し、同期を確認して開始します。同期が完了するまで待ちます。 次に、 [次へ] を選択します。
重要
何らかの理由で移行を中止する必要がある場合は、このドキュメントの FAQ セクションにある中止のフローを確認してください。
[切り替え] ページで [移行の完了] を選択します。
[はい] を選択して、Standard 名前空間から Premium への切り替えを確認します。 切り替えが完了すると、Standard 名前空間の DNS 名が Premium 名前空間を指すようになります。 この操作は元に戻すことができません。 移行が完了すると、 [成功] ページが表示されます。
注意事項
Azure Service Bus の Standard レベルで提供される機能の一部は、Azure Service Bus の Premium レベルではサポートされません。 Premium レベルでは予測可能なスループットと待機時間の専用リソースが提供されるため、これらは仕様です。
以下は、Premium とそれらのリスク軽減でサポートされない機能の概要です。
エクスプレス エンティティ
すべてのメッセージ データをストレージにコミットしないエクスプレス エンティティは、Premium レベルではサポートされません。 専用リソースでは、エンタープライズ メッセージング システムからの予想どおり、確実にデータを保持しながら、スループットが大幅に向上しました。
移行中に、Standard 名前空間のいずれかのエクスプレス エンティティが、エクスプレス エンティティ以外のものとして Premium 名前空間で作成されます。
Azure Resource Manager テンプレートを利用する場合は、エラーが発生することなく自動ワークフローが実行されるように、必ず、デプロイ構成から 'enableExpress' フラグを削除するようにしてください。
RBAC の設定
名前空間のロールベースのアクセス制御 (RBAC) の設定は、Premium 名前空間に移行されません。 これらは、移行後に手動で追加する必要があります。
FAQ
移行をコミットするとどうなりますか?
移行をコミットした後、Standard 名前空間を指していた接続文字列は、Premium 名前空間を指すようになります。
送信側と受信側のアプリケーションは Standard 名前空間から切断され、Premium 名前空間に自動的に再接続されます。
構成ではなく接続文字列 (Event Grid サブスクリプションの宛先など) に Azure Resource Manager ID を使用している場合は、Azure Resource Manager ID を Premium 名前空間の Azure Resource Manager ID に更新する必要があります。
Standard から Premium への移行が完了した後は、どうすればよいですか?
Standard から Premium への移行では、トピック、サブスクリプション、フィルターなどのエンティティ メタデータが Standard 名前空間から Premium 名前空間にコピーされることが保証されています。 Standard 名前空間にコミットされたメッセージ データは、Standard 名前空間から Premium 名前空間にコピーされません。
Standard 名前空間には、移行の進行中に送信されてコミットされたメッセージが存在する可能性があります。 これらのメッセージを Standard 名前空間から手動でドレインし、Premium 名前空間に手動で送信します。 メッセージを手動でドレインするには、移行コマンドで指定した移行後の DNS 名を使用して Standard 名前空間のエンティティをドレインするコンソール アプリまたはスクリプトを使用します。 これらのメッセージを Premium 名前空間に送信し、受信側で処理できるようにします。
メッセージがドレインされた後に、Standard 名前空間を削除します。
重要
Standard 名前空間からのメッセージがドレインされた後に、Standard 名前空間を削除します。 最初は Standard 名前空間を参照していた接続文字列が、Premium 名前空間を参照するようになっているため、これは重要なことです。 Standard 名前空間が必要になることはもうありません。 移行した Standard 名前空間を削除しておくと、後々の混乱を減らすために役立ちます。
どの程度のダウンタイムが想定されますか?
移行プロセスは、アプリケーションに予想されるダウンタイムを短縮するためのものです。 送信側と受信側のアプリケーションが新しい Premium 名前空間を指すために使用する接続文字列を使用することによって、ダウンタイムが短縮されます。
アプリケーションで発生するダウンタイムは、Premium 名前空間を指すように DNS エントリを更新するのにかかる時間に限定されます。 ダウンタイムは約 5 分です。
移行を行う間に構成を変更する必要はありますか?
いいえ、移行を行うために、コードまたは構成の変更は必要ありません。 Standard 名前空間の DNS 名が Premium 名前空間を指すようになります。 送信側と受信側のアプリケーションが Standard 名前空間にアクセスするために使用する接続文字列は、Premium 名前空間に対する別名として機能するように自動的にマップされます。
移行を中止するにはどうすればよいですか?
移行は、Abort
コマンドを使用して、または Azure portal を使用して中止することができます。
Azure CLI
az servicebus migration abort --resource-group $resourceGroup --name $standardNamespace
Azure portal
[エンティティの同期] ページで [中止] を選択します。
完了すると、次のページが表示されます。
移行を中止するとどうなりますか?
移行プロセスを中止すると、Standard 名前空間から Premium 名前空間にエンティティ (トピック、サブスクリプション、フィルター) をコピーするプロセスが中止され、ペアリングが解除されます。
接続文字列は、Premium 名前空間を指すように更新されません。 既存のアプリケーションは、移行を始める前と同様に機能し続けます。
ただし、Premium 名前空間のエンティティまたは Premium 名前空間が削除されることはありません。 移行を中止することにした場合は、エンティティを手動で削除してください。
重要
移行を中止する場合は、移行用にプロビジョニングした Premium 名前空間を削除し、リソースに課金されないようにします。
メッセージのドレインを必要にしたくありません。 どうすればよいですか。
移行が行われている間の、移行がコミットされる直前に、送信側アプリケーションによって送信されて、Standard 名前空間のストレージにコミットされたメッセージが存在する可能性があります。
移行中、実際のメッセージ データ/ペイロードは Standard 名前空間から Premium 名前空間にコピーされません。 メッセージは、手動でドレインしてから Premium 名前空間に送信する必要があります。
ただし、計画的なメンテナンス/ハウスキープ処理期間中に移行でき、メッセージを手動でドレインして送信したくない場合は、次の手順に従います。
送信側のアプリケーションを停止します。 受信側アプリケーションは、現在 Standard 名前空間にあるメッセージを処理してキューをドレインします。
Standard 名前空間のキューとサブスクリプションが空になった後、前に説明した手順に従い、Standard 名前空間から Premium 名前空間への移行を実行します。
移行が完了した後、送信側アプリケーションを再起動できます。
送信側と受信側は、Premium 名前空間と自動的に接続します。
注意
移行のために受信側アプリケーションを停止する必要はありません。
移行が完了した後、受信側アプリケーションは Standard 名前空間から切断され、Premium 名前空間に自動的に接続されます。
次のステップ
- Standard と Premium のメッセージングの違いについてさらに詳しく学習してください。
- Service Bus Premium の高可用性と geo ディザスター リカバリーの側面について学びます。