トレーニング
モジュール
Azure メッセージ キューを検出する - Training
Azure Service Bus と Azure Queue Storage をソリューションに統合する方法と、.NET を使用してメッセージを送受信する方法について説明します。
このブラウザーはサポートされなくなりました。
Microsoft Edge にアップグレードすると、最新の機能、セキュリティ更新プログラム、およびテクニカル サポートを利用できます。
このチュートリアルでは、次の手順を実行します。
注意
このクイック スタートでは、メッセージを Service Bus キューに送信し、それらを受信するという簡単なシナリオでのステップ バイ ステップの手順を説明します。 Azure Service Bus の事前構築済みの JavaScript および TypeScript サンプルが、GitHub の Azure SDK for Python リポジトリに用意されています。
このサービスを初めて使用する場合は、このクイックスタートを実行する前に、
Azure サブスクリプション。 このチュートリアルを完了するには、Azure アカウントが必要です。 MSDN のサブスクライバー特典を有効にするか、無料アカウントにサインアップしてください。
Python 3.8 以降。
自分の Azure アカウントでこのクイックスタートを使用するには:
az login
を使って Azure アカウントでサインインします。注意
このチュートリアルでは、コピーして Python を使用して実行できるサンプルを扱います。 Python アプリケーションを作成する手順については、Python アプリケーションを作成して Azure Web サイトにデプロイする方法に関する記事を参照してください。 このチュートリアルで使用するパッケージのインストールの詳細については、Python インストール ガイドを参照してください。
Azure の Service Bus メッセージング エンティティを使用するには、Azure 全体で一意となる名前を備えた名前空間を最初に作成しておく必要があります。 名前空間により、ご利用のアプリケーション内に Service Bus リソース (キュー、トピックなど) 用のスコープ コンテナーが提供されます。
名前空間を作成するには:
Azure portal にサインインします。
[すべてのサービス] ページに移動します。
左側のナビゲーション バーで、カテゴリの一覧から [統合] を選択し、[Service Bus] 上にマウス ポインターを置き、[Service Bus] タイルの [+] ボタンを選択します。
[名前空間の作成] ページの [基本] タブで、こちらの手順を実行します。
[サブスクリプション] で、名前空間を作成する Azure サブスクリプションを選択します。
[リソース グループ] では、既存のリソース グループを選ぶか、新しく作成します。
名前空間の名前を入力します。 名前空間名は次の名前付け規則に従う必要があります。
-
のみを含めることができます。-sb
または -mgmt
にすることはできません。[場所] で、名前空間をホストするリージョンを選択します。
[価格レベル] で、名前空間の価格レベル (Basic、Standard、Premium) を選択します。 このクイック スタートでは、 [Standard] を選択します。
Premium レベルを選んだ場合は、名前空間の geo レプリケーションを有効にできるかどうかを選びます。 geo レプリケーション機能を使用すると、名前空間のメタデータとデータが、プライマリ Azure リージョンから 1 つ以上のセカンダリ Azure リージョンに、継続的にレプリケートされることが保証されます。
重要
トピックとサブスクリプションを使用する場合は、Standard または Premium を選択してください。 Basic 価格レベルでは、トピックとサブスクリプションはサポートされていません。
[Premium] 価格レベルを選択した場合は、メッセージング ユニットの数を指定します。 Premium レベルでは、各ワークロードが分離した状態で実行されるように、CPU とメモリのレベルでリソースが分離されます。 このリソースのコンテナーをメッセージング ユニットと呼びます。 Premium 名前空間には、少なくとも 1 つのメッセージング ユニットがあります。 Service Bus の Premium 名前空間ごとに、1 個、2 個、4 個、8 個、または 16 個のメッセージング ユニットを選択できます。 詳細については、Service Bus の Premium メッセージングに関するページをご覧ください。
ページ下部にある [確認と作成] を選択します。
[確認および作成] ページで、設定を確認し、 [作成] を選択します。
リソースのデプロイが成功したら、デプロイ ページで [リソースに移動] を選択します。
Service Bus 名前空間のホーム ページが表示されます。
[Service Bus 名前空間] ページで、左側のナビゲーション メニューの [エンティティ] を展開して、[キュー] を選びます。
[キュー] ページで、ツール バーの [+ キュー] を選択します。
キューの名前を入力し、他の値は既定値のままにします。
ここで、 [作成] を選択します。
このクイック スタートでは、Azure Service Bus に接続する 2 つの方法である、パスワードレスと接続文字列について説明します。
最初のオプションでは、Microsoft Entra ID とロールベースのアクセス制御 (RBAC) でセキュリティ プリンシパルを使用して Service Bus 名前空間に接続する方法を示します。 コードや構成ファイル、または Azure Key Vault などのセキュリティで保護されたストレージに、ハードコーディングされた接続文字列を含める心配はありません。
2 番目のオプションでは、接続文字列を使用して Service Bus 名前空間に接続する方法を示します。 Azure を初めて使用する場合は、接続文字列オプションの方が理解しやすいかもしれません。 実際のアプリケーションと運用環境では、パスワードレス オプションを使用することをお勧めします。 詳細については、「認証と承認」を参照してください。 パスワードレス認証の詳細については、概要ページを参照してください。
ローカルでの開発時には、Azure Service Bus に接続するユーザー アカウントに正しいアクセス許可があることを確認してください。 メッセージを送受信するには、Azure Service Bus データ所有者ロールが必要です。 このロールを自分に割り当てるには、ユーザー アクセス管理者ロール、または Microsoft.Authorization/roleAssignments/write
アクションを含む別のロールが必要です。 Azure portal、Azure CLI、または Azure PowerShell を使用して、ユーザーに Azure RBAC ロールを割り当てることができます。 ロールの割り当てに使用できるスコープの詳細は、スコープの概要ページを参照してください。
次の例では、ユーザー アカウントに、Azure Service Bus Data Owner
ロールを割り当てます。これにより、Azure Service Bus リソースへのフル アクセスが提供されます。 実際のシナリオでは、より安全な運用環境を実現するため、最小限の特権の原則に従って、必要な最小限のアクセス許可のみをユーザーに付与します。
Azure Service Bus の場合、名前空間およびそれに関連するすべてのリソースの Azure portal および Azure リソース管理 API による管理は、Azure RBAC モデルを使って既に保護されています。 Azure では、Service Bus 名前空間へのアクセスを承認するための次の Azure 組み込みロールが提供されています。
カスタム ロールを作成する場合は、Service Bus 操作に必要な権限に関するページを参照してください。
Microsoft Entra ユーザー名を、Service Bus 名前空間レベルの Azure Service Bus データ所有者ロール に追加します。 これにより、ユーザー アカウントのコンテキストで実行されているアプリがキューまたはトピックにメッセージを送信し、キューまたはトピックのサブスクリプションからメッセージを受信できるようになります。
重要
ほとんどの場合、ロールの割り当てが Azure に反映されるまでの時間は 1、2 分です。 まれに、最大 8 分かかる場合があります。 初めてコードを実行したときに認証エラーを受け取る場合は、しばらく待ってから再試行してください。
Azure portal で Service Bus 名前空間ページが開いていない場合は、メイン検索バーまたは左側のナビゲーションを使用して Service Bus 名前空間を見つけます。
概要ページで、左側のメニューから [アクセス制御 (IAM)] を選択します。
[アクセス制御 (IAM)] ページで、[ロールの割り当て] タブを選びます。
上部のメニューから [+ 追加] を選択し、次に結果のドロップダウン メニューから [ロールの割り当ての追加] を選択します。
検索ボックスを使って、結果を目的のロールに絞り込みます。 この例では、Azure Service Bus Data Owner
を検索して一致する結果を選択します。 [次へ] を選びます。
[アクセスの割り当て先] で、[ユーザー、グループ、またはサービス プリンシパル] を選び、[+ メンバーの選択] を選びます。
ダイアログで、自分の Microsoft Entra ユーザー名 (通常は user@domain メール アドレス) を検索し、ダイアログの下部にある [選択] を選びます。
[レビューと割り当て] を選んで最終ページに移動し、もう一度 [レビューと割り当て] を行ってプロセスを完了します。
この Service Bus のチュートリアルに必要な Python パッケージをインストールするには、パスに Python が存在するコマンド プロンプトを開き、サンプルを格納するフォルダーにディレクトリを変更します。
次のパッケージをインストールします。
pip install azure-servicebus
pip install azure-identity
pip install aiohttp
次のサンプル コードは、キューにメッセージを送信する方法を示しています。 Visual Studio Code などのお気に入りのエディターを開き、send.py ファイルを作成し、それに次のコードを追加します。
import ステートメントを追加します。
import asyncio
from azure.servicebus.aio import ServiceBusClient
from azure.servicebus import ServiceBusMessage
from azure.identity.aio import DefaultAzureCredential
定数を追加し、資格情報を定義します。
FULLY_QUALIFIED_NAMESPACE = "FULLY_QUALIFIED_NAMESPACE"
QUEUE_NAME = "QUEUE_NAME"
credential = DefaultAzureCredential()
重要
FULLY_QUALIFIED_NAMESPACE
を Service Bus 名前空間の完全修飾名前空間に置き換えます。QUEUE_NAME
をキューの名前に置き換えます。単一のメッセージを送信するためのメソッドを追加します。
async def send_single_message(sender):
# Create a Service Bus message and send it to the queue
message = ServiceBusMessage("Single Message")
await sender.send_messages(message)
print("Sent a single message")
sender は、作成したキューのクライアントとしての役割を担うオブジェクトです。 それを後で作成し、引数としてこの関数に送信することになります。
一連のメッセージを送信するためのメソッドを追加します。
async def send_a_list_of_messages(sender):
# Create a list of messages and send it to the queue
messages = [ServiceBusMessage("Message in list") for _ in range(5)]
await sender.send_messages(messages)
print("Sent a list of 5 messages")
メッセージのバッチを送信するためのメソッドを追加します。
async def send_batch_message(sender):
# Create a batch of messages
async with sender:
batch_message = await sender.create_message_batch()
for _ in range(10):
try:
# Add a message to the batch
batch_message.add_message(ServiceBusMessage("Message inside a ServiceBusMessageBatch"))
except ValueError:
# ServiceBusMessageBatch object reaches max_size.
# New ServiceBusMessageBatch object can be created here to send more data.
break
# Send the batch of messages to the queue
await sender.send_messages(batch_message)
print("Sent a batch of 10 messages")
Service Bus クライアントを作成し、メッセージを送信するためのキューの sender オブジェクトを作成します。
async def run():
# create a Service Bus client using the credential
async with ServiceBusClient(
fully_qualified_namespace=FULLY_QUALIFIED_NAMESPACE,
credential=credential,
logging_enable=True) as servicebus_client:
# get a Queue Sender object to send messages to the queue
sender = servicebus_client.get_queue_sender(queue_name=QUEUE_NAME)
async with sender:
# send one message
await send_single_message(sender)
# send a list of messages
await send_a_list_of_messages(sender)
# send a batch of messages
await send_batch_message(sender)
# Close credential when no longer needed.
await credential.close()
run
メソッドを呼び出し、メッセージを出力します。
asyncio.run(run())
print("Done sending messages")
print("-----------------------")
次のサンプル コードは、キューからメッセージを受信する方法を示しています。 示されているコードは、新しいメッセージを 5 (max_wait_time
) 秒間受信しなくなるまで、新しいメッセージを受信します。
Visual Studio Code などのお気に入りのエディターを開き、revc.py ファイルを作成し、それに次のコードを追加します。
送信サンプルと同様に、import
ステートメントを追加し、独自の値に置き換える定数を定義し、資格情報を定義します。
import asyncio
from azure.servicebus.aio import ServiceBusClient
from azure.identity.aio import DefaultAzureCredential
FULLY_QUALIFIED_NAMESPACE = "FULLY_QUALIFIED_NAMESPACE"
QUEUE_NAME = "QUEUE_NAME"
credential = DefaultAzureCredential()
Service Bus クライアントを、次にメッセージを受信するためのキューの receiver オブジェクトを作成します。
async def run():
# create a Service Bus client using the connection string
async with ServiceBusClient(
fully_qualified_namespace=FULLY_QUALIFIED_NAMESPACE,
credential=credential,
logging_enable=True) as servicebus_client:
async with servicebus_client:
# get the Queue Receiver object for the queue
receiver = servicebus_client.get_queue_receiver(queue_name=QUEUE_NAME)
async with receiver:
received_msgs = await receiver.receive_messages(max_wait_time=5, max_message_count=20)
for msg in received_msgs:
print("Received: " + str(msg))
# complete the message so that the message is removed from the queue
await receiver.complete_message(msg)
# Close credential when no longer needed.
await credential.close()
run
メソッドを呼び出します。
asyncio.run(run())
パスに Python が存在するコマンド プロンプトを開き、コードを実行してキューからメッセージを送受信します。
python send.py; python recv.py
次の出力が表示されます。
Sent a single message
Sent a list of 5 messages
Sent a batch of 10 messages
Done sending messages
-----------------------
Received: Single Message
Received: Message in list
Received: Message in list
Received: Message in list
Received: Message in list
Received: Message in list
Received: Message inside a ServiceBusMessageBatch
Received: Message inside a ServiceBusMessageBatch
Received: Message inside a ServiceBusMessageBatch
Received: Message inside a ServiceBusMessageBatch
Received: Message inside a ServiceBusMessageBatch
Received: Message inside a ServiceBusMessageBatch
Received: Message inside a ServiceBusMessageBatch
Received: Message inside a ServiceBusMessageBatch
Received: Message inside a ServiceBusMessageBatch
Received: Message inside a ServiceBusMessageBatch
Azure portal で、使用する Service Bus 名前空間に移動します。 [概要] ページで、受信メッセージ数と送信メッセージ数が 16 になっていることを確認します。 これらのカウントが表示されない場合は、数分待ってから、ページを最新の情報に更新してください。
この [概要] ページでキューを選択して、 [Service Bus キュー] ページに移動します。 受信メッセージ数と送信メッセージ数は、このページで確認することもできます。 加えて、キューの現在のサイズやアクティブなメッセージ数など、他の情報も表示されます。
次のドキュメントおよびサンプルを参照してください。
トレーニング
モジュール
Azure メッセージ キューを検出する - Training
Azure Service Bus と Azure Queue Storage をソリューションに統合する方法と、.NET を使用してメッセージを送受信する方法について説明します。