Azure Service Bus エミュレータを使用してローカルでテストする
[アーティクル] 01/23/2025
5 人の共同作成者
フィードバック
この記事の内容
この記事では、Azure Service Bus エミュレータを使用して、ローカルで開発およびテストする手順をまとめます。
前提条件
Docker デスクトップ
最小ハードウェア要件:
Linux 用 Windows サブシステム (WSL) の構成 (Windows の場合のみ):
Note
この記事の手順に進む前に、Docker Desktop がバックグラウンドで動作することを確認してください。
エミュレーターを実行する
Service Bus エミュレータを実行するには、自動化されたスクリプトまたは Linux コンテナーを使用できます。
自動スクリプトを実行する前に、エミュレーターの GitHub インストーラー リポジトリ をローカルに複製します。
Windows
Windows で Service Bus エミュレータをローカルで実行するには、次の手順に従います。
PowerShell ウィンドウで次のコマンドを実行して、署名されていないスクリプトの実行を許可します。
$>Start-Process powershell -Verb RunAs -ArgumentList 'Set-ExecutionPolicy Bypass –Scope CurrentUser'
セットアップ スクリプト LaunchEmulator.ps1 を実行します。 このスクリプトを実行すると、Service Bus エミュレータと SQL Edge (エミュレータの依存関係) の 2 つのコンテナーが表示されます。
Linux と macOS
Linux または macOS で Service Bus エミュレータをローカルで実行するには、次の手順に従います。
セットアップ スクリプト LaunchEmulator.sh を実行します。このスクリプトを実行すると、Service Bus エミュレータと SQL Edge (エミュレータの依存関係) の 2 つのコンテナーが表示されます。
エミュレーターを起動するには、使用するエンティティの構成を指定します。 次の JSON ファイルを config.json としてローカルに保存します。
{
"UserConfig": {
"Namespaces": [
{
"Name": "sbemulatorns",
"Queues": [
{
"Name": "queue.1",
"Properties": {
"DeadLetteringOnMessageExpiration": false,
"DefaultMessageTimeToLive": "PT1H",
"DuplicateDetectionHistoryTimeWindow": "PT20S",
"ForwardDeadLetteredMessagesTo": "",
"ForwardTo": "",
"LockDuration": "PT1M",
"MaxDeliveryCount": 10,
"RequiresDuplicateDetection": false,
"RequiresSession": false
}
}
],
"Topics": [
{
"Name": "topic.1",
"Properties": {
"DefaultMessageTimeToLive": "PT1H",
"DuplicateDetectionHistoryTimeWindow": "PT20S",
"RequiresDuplicateDetection": false
},
"Subscriptions": [
{
"Name": "subscription.1",
"Properties": {
"DeadLetteringOnMessageExpiration": false,
"DefaultMessageTimeToLive": "PT1H",
"LockDuration": "PT1M",
"MaxDeliveryCount": 10,
"ForwardDeadLetteredMessagesTo": "",
"ForwardTo": "",
"RequiresSession": false
},
"Rules": [
{
"Name": "app-prop-filter-1",
"Properties": {
"FilterType": "Correlation",
"CorrelationFilter": {
"ContentType": "application/text",
"CorrelationId": "id1",
"Label": "subject1",
"MessageId": "msgid1",
"ReplyTo": "someQueue",
"ReplyToSessionId": "sessionId",
"SessionId": "session1",
"To": "xyz"
}
}
}
]
},
{
"Name": "subscription.2",
"Properties": {
"DeadLetteringOnMessageExpiration": false,
"DefaultMessageTimeToLive": "PT1H",
"LockDuration": "PT1M",
"MaxDeliveryCount": 10,
"ForwardDeadLetteredMessagesTo": "",
"ForwardTo": "",
"RequiresSession": false
},
"Rules": [
{
"Name": "user-prop-filter-1",
"Properties": {
"FilterType": "Correlation",
"CorrelationFilter": {
"Properties": {
"prop3": "value3"
}
}
}
}
]
},
{
"Name": "subscription.3",
"Properties": {
"DeadLetteringOnMessageExpiration": false,
"DefaultMessageTimeToLive": "PT1H",
"LockDuration": "PT1M",
"MaxDeliveryCount": 10,
"ForwardDeadLetteredMessagesTo": "",
"ForwardTo": "",
"RequiresSession": false
}
}
]
}
]
}
],
"Logging": {
"Type": "File"
}
}
}
2. Service Bus エミュレータのコンテナーを起動するには、次の .yaml ファイルを docker-compose.yaml として保存します。
Note
Service Bus エミュレータは、既定でポート 5672 を使用します。 別のポートを使用するように構成をカスタマイズした場合は、YAML ファイルのポート設定を更新します。
name: microsoft-azure-servicebus-emulator
services:
emulator:
container_name: "servicebus-emulator"
image: mcr.microsoft.com/azure-messaging/servicebus-emulator:latest
volumes:
- "${CONFIG_PATH}:/ServiceBus_Emulator/ConfigFiles/Config.json"
ports:
- "5672:5672"
environment:
SQL_SERVER: sqledge
MSSQL_SA_PASSWORD: ${MSSQL_SA_PASSWORD}
ACCEPT_EULA: ${ACCEPT_EULA}
depends_on:
- sqledge
networks:
sb-emulator:
aliases:
- "sb-emulator"
sqledge:
container_name: "sqledge"
image: "mcr.microsoft.com/azure-sql-edge:latest"
networks:
sb-emulator:
aliases:
- "sqledge"
environment:
ACCEPT_EULA: ${ACCEPT_EULA}
MSSQL_SA_PASSWORD: ${MSSQL_SA_PASSWORD}
networks:
sb-emulator:
.env ファイルを作成して Service Bus エミュレータの環境変数を宣言し、次のすべての環境変数が確実に設定されるようにします。
# Environment file for user defined variables in docker-compose.yml
# 1. CONFIG_PATH: Path to Config.json file
# Ex: CONFIG_PATH="C:\\Config\\Config.json"
CONFIG_PATH="<Replace with path to Config.json file>"
# 2. ACCEPT_EULA: Pass 'Y' to accept license terms for Azure SQL Edge and Azure Service Bus emulator.
# Service Bus emulator EULA : https://github.com/Azure/azure-service-bus-emulator-installer/blob/main/EMULATOR_EULA.txt
# SQL Edge EULA : https://go.microsoft.com/fwlink/?linkid=2139274
ACCEPT_EULA="N"
# 3. MSSQL_SA_PASSWORD to be filled by user as per policy
MSSQL_SA_PASSWORD=""
重要
値 "Y" を環境変数 "ACCEPT_EULA" に渡すことで、Azure Service Bus エミュレータ と Azure SQL Edge の両方について、エンド ユーザー使用許諾契約書 (EULA) の使用条件を確認し、同意します。
.env ファイルは、docker-compose.yaml ファイルと同じディレクトリに配置してください
MSSQL_SA_PASSWORD 環境変数を、パスードの要件 を満たす 8 文字以上の強力なパスワードに設定します。
Windows でファイル パスを指定するときは、円記号 (\
) ではなく、ニ重の円記号 (\\
) を使用して、エスケープ文字の問題が発生しないようにください。
エミュレータを実行するには、次のコマンドを実行します。
docker compose -f <PathToDockerComposeFile> up -d
この手順が成功すると、Docker で実行されているコンテナーが見つかります。
エミュレーターを操作する
既定では、エミュレータは config.json 構成ファイルを使用します。 構成ファイルに変更を加えることで、エンティティを構成できます。 詳細については、「構成を変更する 」を参照してください
次の接続文字列を使用して、Service Bus エミュレータに接続できます。
エミュレータ コンテナーと対話するアプリケーションがローカル コンピューター上でネイティブに実行されている場合は、次の接続文字列を使用します。
"Endpoint=sb://localhost;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=SAS_KEY_VALUE;UseDevelopmentEmulator=true;"
異なるコンピューターと同じローカル ネットワーク上のアプリケーション (コンテナー化/非コンテナー化) は、そのコンピューターの IPv4 アドレスを使用してエミュレータと対話できます。 次の接続文字列を使用します。
"Endpoint=sb://192.168.y.z;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=SAS_KEY_VALUE;UseDevelopmentEmulator=true;"
同じブリッジ ネットワーク上のアプリケーション コンテナーは、そのエイリアスまたは IP を使用してエミュレータと対話できます。 次の接続文字列は、エミュレータ コンテナーの名前が "servicebus-emulator" であることを前提としています。
"Endpoint=sb://servicebus-emulator;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=SAS_KEY_VALUE;UseDevelopmentEmulator=true;"
異なるブリッジ ネットワーク上のアプリケーション コンテナーは、ホストとして "host.docker.internal" を使用してエミュレータと対話できます。 次の接続文字列を使用します。
"Endpoint=sb://host.docker.internal;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=SAS_KEY_VALUE;UseDevelopmentEmulator=true;"
最新のクライアント SDK を使用して、さまざまなプログラミング言語で Service Bus エミュレータを操作できます。 開始するには、GitHub の Service Bus エミュレータのサンプル を参照してください。
関連するコンテンツ
Azure Service Bus エミュレータの概要