Azure Service Bus - よく寄せられる質問 (FAQ)

この記事では、Microsoft Azure Service Bus についてよく寄せられる質問 (FAQ) とその回答について説明します。 Azure の価格およびサポートに関する一般的な情報については、「Azure サポートに関する FAQ」も参照してください。

Azure Service Bus に関する一般的な質問

Azure Service Bus とは

Azure Service Bus は、分離されたシステム間でデータを送信できるようにする非同期メッセージング クラウド プラットフォームです。 Microsoft では、この機能がサービスとして提供されています。つまり、この機能を使用するために独自にハードウェアをホストする必要はありません。

Service Bus 名前空間とは何ですか。

名前空間は、アプリケーション内で Service Bus リソースをアドレス指定するためのスコープ コンテナーを提供します。 Service Bus を使用するには名前空間を作成する必要があります。これは最初に実行する手順の 1 つです。

Azure Service Bus キューとは何ですか。

Service Bus キューは、メッセージが格納されるエンティティです。 キューは、複数のアプリケーションがある場合や、互いにやり取りする必要がある分散アプリケーションの複数の部分がある場合に便利です。 キューは、複数の製品 (メッセージ) の受け取り (受信) と発送 (送信) が行われる点で、集配送センターに似ています。

Service Bus トピックおよびサブスクリプションとは何ですか。

トピックは、キューとして視覚化できます。複数のサブスクリプションを使用している場合、トピックはより多機能なメッセージング モデルになります (基本的には一対多通信ツール)。 この発行/サブスクライブ モデル (または pub/sub) により、複数のサブスクリプションを持つトピックにメッセージを送信するアプリケーションで、そのメッセージが複数のアプリケーションによって受信されるように設定できます。

パーティション分割されたエンティティとは何ですか。

従来のキューまたはトピックは、単一のメッセージ ブローカーで処理されて 1 つのメッセージング ストアに格納されます。 Basic および Standard のメッセージング プランのみでサポートされているパーティション分割されたキューまたはトピックは、複数のメッセージ ブローカーによって処理され、複数のメッセージング ストアに格納されます。 この機能により、パーティション分割されたキューまたはトピックの全体のスループットは、単一のメッセージ ブローカーまたはメッセージング ストアのパフォーマンスによって制限されなくなりました。 また、1 つのメッセージング ストアが一時的に停止しても、パーティション分割されたキューまたはトピックは使用することができます。

パーティション分割されたエンティティを使用する場合、順序が保証されません。 あるパーティションが使用できなくなった場合は、他のパーティションからメッセージの送受信を行うことができます。

パーティション分割されたエンティティは Premium SKU ではサポートされなくなりました。

Azure Service Bus ではデータはどこに格納されますか。

Azure Service Bus の Standard レベルでは、Azure SQL Database をそのバックエンド ストレージ レイヤーに利用します。 ブラジル南部と東南アジアを除くすべてのリージョンでは、データベース バックアップは別のリージョン (通常は Azure ペア リージョン) でホストされます。 ブラジル南部および東南アジア リージョンでは、データベース バックアップは、これらのリージョンのデータ所在地の要件に対応するために同じリージョンに格納されます。

Azure Service Bus の Premium レベルでは、選択されたリージョンにメタデータとデータが格納されます。 Azure Service Bus の Premium 名前空間に対して geo ディザスター リカバリーを設定すると、メタデータは、選択されたセカンダリ リージョンにコピーされます。

ファイアウォールで開く必要があるのはどのポートですか。

Azure Service Bus でメッセージを送受信する場合、次のプロトコルを使用できます。

  • Advanced Message Queuing Protocol 1.0 (AMQP)
  • TLS を使用したハイパーテキスト転送プロトコル 1.1 (HTTPS)

これらのプロトコルを使用して Azure Service Bus と通信するために開く必要がある送信 TCP ポートについては、次の表を参照してください。

Protocol Port 詳細
AMQP 5671, 5672 TLS を使用した AMQP。 AMQP プロトコル ガイドに関するページを参照してください
HTTPS 443 このポートは、HTTP/REST API と AMQP (WebSocket 経由) で使用されます。

通常、HTTPS ポートは、ポート 5671 で AMQP が使用されている場合に送信通信にも必要です。これは、クライアント SDK によって実行されるいくつかの管理操作と Azure Active Directory からのトークンの取得 (使用する場合) が HTTPS 経由で実行されるためです。

公式の Azure SDK では、通常、Service Bus に対するメッセージの送受信で AMQP プロトコルが使用されます。

WebSocket 経由の AMQP プロトコル オプションは、HTTP/REST API と同様に、ポート TCP 443 で実行されますが、それ以外については通常の AMQP と機能的に同じです。 このオプションでは、HTTPS ポートを共有するためのトレードオフとして、追加のハンドシェイクのラウンドトリップが発生し、若干のオーバーヘッドが生じるため、初期接続の待機時間が長くなります。 このモードが選択されている場合は、通信のためには TCP ポート 443 で十分です。 次のオプションを使用すると、AMQP WebSocket モードを選択できます。

言語 オプション
.NET (Azure.Messaging.ServiceBus) ServiceBusClientOptions をパラメーターとして受け取るコンストラクターを使用して ServiceBusClient を作成します。 ServiceBusClientOptions.TransportTypeServiceBusTransportType.AmqpWebSockets に設定します。
.NET (Microsoft.Azure.ServiceBus) クライアント オブジェクトを作成する場合は、TransportTypeServiceBusConnection、または ServiceBusConnectionStringBuilder をパラメーターとして受け取るコンストラクターを使用します。

transportType をパラメーターとして受け取る構造の場合は、パラメーターを TransportType.AmqpWebSockets に設定します。

ServiceBusConnection をパラメーターとして受け取るコンストラクターの場合は、ServiceBusConnection.TransportTypeTransportType.AmqpWebSockets に設定します。

ServiceBusConnectionStringBuilder を使用する場合は、transportType を指定するオプションを提供するコンストラクターを使用します。

Java (com.azure.messaging.servicebus) クライアントを作成する場合は、ServiceBusClientBuilder.transportTypeAmqpTransportType.AMQP.AMQP_WEB_SOCKETS に設定します。
Java (com.microsoft.azure.servicebus) クライアントを作成する場合は、com.microsoft.azure.servicebus.ClientSettingstransportTypecom.microsoft.azure.servicebus.primitives.TransportType.AMQP_WEB_SOCKETS に設定します。
JavaScript Service Bus クライアント オブジェクトを作成する場合は、ServiceBusClientOptionswebSocketOptions プロパティを使用します。
Python Service Bus クライアントを作成する場合は、ServiceBusClient.transport_typeTransportType.AmqpOverWebSocket に設定します。

どのような IP アドレスを許可リストに追加する必要がありますか。

接続の許可リストに追加する適切な IP アドレスを検索するには、次の手順を実行します。

  1. コマンド プロンプトで、次のコマンドを実行します。

    nslookup <YourNamespaceName>.servicebus.windows.net
    
  2. Non-authoritative answer で返された IP アドレスをメモします。

名前空間にゾーン冗長性を使用している場合は、次の追加手順を実行する必要があります。

  1. まず、名前空間に対して nslookup を実行します。

    nslookup <yournamespace>.servicebus.windows.net
    
  2. non-authoritative answer セクションの名前をメモします。これは、次のいずれかの形式になります。

    <name>-s1.cloudapp.net
    <name>-s2.cloudapp.net
    <name>-s3.cloudapp.net
    
  3. s1、s2、s3 のサフィックスが付いているそれぞれについて nslookup を実行し、3 つの可用性ゾーンで実行されている 3 つのインスタンスすべての IP アドレスを取得します。

    注意

    nslookup コマンドによって返された IP アドレスは、静的 IP アドレスではありません。 ただし、基になるデプロイが削除されるか別のクラスターに移動されるまでは変わりません。

名前空間との間でメッセージを送受信するクライアントの IP アドレスはどこで確認できますか。

名前空間との間でメッセージを送受信しているクライアントの IP アドレスはログに記録されません。 すべての既存クライアントの認証が失敗するようにキーを再生成し、Azure ロールベースのアクセス制御 (Azure RBAC) の設定を確認して、許可されているユーザーまたはアプリケーションのみが名前空間にアクセスできることを確認します。

Premium 名前空間を使用している場合は、名前空間へのアクセスを制限するには、IP フィルタリング仮想ネットワーク サービス エンドポイントプライベート エンドポイントを使用します。

ベスト プラクティス

Azure Service Bus のベスト プラクティスを教えてください。

Service Bus メッセージングを使用したパフォーマンス向上のためのベスト プラクティス」を参照してください。この記事では、メッセージを交換するときのパフォーマンスを最適化する方法について説明します。

エンティティを作成する前に知っておく必要があることは何ですか。

キューとトピックの次のプロパティは変更できません。 エンティティをプロビジョニングするときはこの制限を考慮してください。代替の新しいエンティティを作成しない限り、これらのプロパティは変更できません。

  • パーティション分割
  • セッション
  • 重複検出
  • Express エンティティ

価格

このセクションでは、Service Bus の価格体系についてよく寄せられる質問 (FAQ) とその回答を紹介します。

Service Bus の料金と課金」の記事では、Service Bus の課金メーターについて説明しています。 Service Bus の価格オプションの特定の情報については、Service Bus の価格の詳細に関するページをご覧ください。

Azure の全般的な価格情報については、Azure サポートに関する FAQ も参照してください。

Service Bus の課金方法を教えてください

Service Bus の価格の詳細については、 Service Bus の価格の詳細に関するページを参照してください。 既に説明した価格に加え、ご利用のアプリケーションがプロビジョニングされているデータ センターから外部に送信される関連データ転送に料金が発生します。

Service Bus でデータ転送の対象となる用途と 対象外の用途を教えてください。

特定の Azure リージョン内でのデータ転送および受信データ転送はすべて無料です。 リージョン外でのデータ転送は、送信料金の対象になります。こちらをご覧ください。

Service Bus ではストレージに対して課金されますか

いいえ。 Service Bus ではストレージに対して課金されません。 ただし、キューまたはトピックごとに保持できる最大データ量を制限するクォータはあります。 次の FAQ を参照してください。

Service Bus Standard 名前空間があります。 リソースグループ ' $system ' に料金がされるのはなぜですか?

Azure Service Bus は最近、課金コンポーネントをアップグレードしました。 この変更のため、Service Bus Standard 名前空間がある場合は、リソース グループ "$system" の下に、リソース "/subscriptions/<azure_subscription_id>/resourceGroups/$system/providers/Microsoft.ServiceBus/namespaces/$system" の明細項目が表示されることがあります。

これらの料金は、Service Bus Standard 名前空間をプロビジョニングした Azure サブスクリプションごとの基本料金を表します。

これらの料金は新しいものではなく、以前の課金モデルにも存在していたことに、注意する必要があります。 唯一の変更は、"$system" の下に一覧表示されるようになったことです。 これは、新しい課金システムの制約によって行われています。この制約により、特定のリソースに関連付けられていないサブスクリプション レベルの料金が "$system" リソース ID でグループ化されます。

Quotas (クォータ)

Service Bus の制限とクォータの一覧については、Service Bus のクォータの概要に関するページを参照してください。

1 MB を超えるサイズのメッセージを処理する方法を教えてください

Service Bus メッセージング サービス (キューおよびトピック/サブスクリプション) では、アプリケーションは、最大 256 KB (Standard レベル) または 100 MB (Premium レベル) のサイズのメッセージを送信できます。 許容サイズを超えるサイズのメッセージを処理する場合は、こちらのブログ投稿で説明されている要求チェック パターンを使用します。

トラブルシューティング

別のサブスクリプションから名前空間を削除した後に、その名前空間を作成できないのはなぜですか。

サブスクリプションから名前空間を削除した場合、別のサブスクリプションで同じ名前を使用して再作成するには、4 時間ほど時間を空けてから行ってください。 そうしないと、Namespace already exists というエラー メッセージが表示される場合があります。

Azure Service Bus API によって生成される例外とその推奨される操作をいくつか教えてください。

Service Bus で可能性のある例外の一覧については、「例外の概要」をご覧ください。

Shared Access Signature とは何ですか。どの言語で署名の生成がサポートされますか。

Shared Access Signature は、SHA-256 セキュア ハッシュまたは URI に基づいた認証メカニズムです。 Node.js、PHP、Java、Python、C# で独自の署名を生成する方法については、Shared Access Signature に関する記事を参照してください。

サブスクリプションと名前空間の管理

別の Azure サブスクリプションに名前空間を移行する方法を教えてください

Azure Portal または PowerShell コマンドを使用して、ある Azure サブスクリプションから別のサブスクリプションに名前空間を移行できます。 操作を実行するには、名前空間が既にアクティブになっている必要があります。 コマンドを実行するユーザーは、ソースとターゲットの両方のサブスクリプションの管理者である必要があります。

ポータル

Azure Portal を使用して Service Bus 名前空間を別のサブスクリプションに移行するには、こちらの説明に従ってください。

PowerShell

次の一連の PowerShell コマンドでは、別の Azure サブスクリプションへ名前空間を移行します。 この操作を実行するには、名前空間がアクティブになっており、PowerShell コマンドを実行するユーザーが、ソースとターゲットのサブスクリプションの管理者である必要があります。

# Create a new resource group in target subscription
Select-AzSubscription -SubscriptionId 'ffffffff-ffff-ffff-ffff-ffffffffffff'
New-AzResourceGroup -Name 'targetRG' -Location 'East US'

# Move namespace from source subscription to target subscription
Select-AzSubscription -SubscriptionId 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa'
$res = Find-AzResource -ResourceNameContains mynamespace -ResourceType 'Microsoft.ServiceBus/namespaces'
Move-AzResource -DestinationResourceGroupName 'targetRG' -DestinationSubscriptionId 'ffffffff-ffff-ffff-ffff-ffffffffffff' -ResourceId $res.ResourceId

Service Bus 名前空間で TLS 1.0 または 1.1 を無効にすることはできますか。

はい。最小の TLS バージョンを設定することで、Service Bus 名前空間で TLS 1.0 または 1.1 を無効にできます。 詳細については、Service Bus 名前空間への要求に必要な最小バージョンのトランスポート層セキュリティ (TLS) の適用に関する記事を参照してください。

次のステップ

Service Bus の詳細については、次の記事をご覧ください。