Azure Service Bus と Event Grid の統合の概要Azure Service Bus to Event Grid integration overview

Azure Service Bus では、Azure Event Grid との新しい統合が利用可能になりました。Azure Service Bus has launched a new integration to Azure Event Grid. この機能の重要なシナリオは、メッセージが少量の Service Bus キューまたはサブスクリプションで、メッセージのレシーバー ポーリングを常時行う必要がなくなるというものです。The key scenario of this feature is that Service Bus queues or subscriptions with a low volume of messages do not need to have a receiver that polls for messages continuously.

Service Bus では、レシーバーがない場合にキューまたはサブスクリプションにメッセージがあるとき、Event Grid にイベントを発行できるようになりました。Service Bus can now emit events to Event Grid when there are messages in a queue or a subscription when no receivers are present. Event Grid サブスクリプションを Service Bus 名前空間に作成してこれらのイベントをリッスンし、レシーバーの開始によってイベントに対応できます。You can create Event Grid subscriptions to your Service Bus namespaces, listen to these events, and then react to the events by starting a receiver. この機能により、Service Bus はリアクティブ プログラミング モデルで使用できます。With this feature, you can use Service Bus in reactive programming models.

この機能を有効にするために必要な事柄を次に示します。To enable the feature, you need the following items:

  • 1 つ以上の Service Bus キューが含まれた Service Bus Premium 名前空間、または 1 つ以上のサブスクリプションがある Service Bus トピックが含まれた Service Bus Premium 名前空間。A Service Bus Premium namespace with at least one Service Bus queue or a Service Bus topic with at least one subscription.
  • Service Bus 名前空間への共同作成者アクセス。Contributor access to the Service Bus namespace.
  • さらに、Service Bus 名前空間の Event Grid サブスクリプションが必要です。Additionally, you need an Event Grid subscription for the Service Bus namespace. このサブスクリプションは、取得すべきメッセージがあるという通知を Event Grid から受け取ります。This subscription receives a notification from Event Grid that there are messages to be picked up. 典型的なサブスクライバーとしては、Web アプリに情報を渡す webhook、Azure Functions、Azure App Service の Logic Apps 機能が考えられます。Typical subscribers could be the Logic Apps feature of Azure App Service, Azure Functions, or a webhook contacting a web app. その後サブスクライバーによって、メッセージが処理されます。The subscriber then processes the messages.

19

注意

この記事は、新しい Azure PowerShell Az モジュールを使用するために更新されました。This article has been updated to use the new Azure PowerShell Az module. AzureRM モジュールはまだ使用でき、少なくとも 2020 年 12 月までは引き続きバグ修正が行われます。You can still use the AzureRM module, which will continue to receive bug fixes until at least December 2020. Az モジュールと AzureRM の互換性の詳細については、「Introducing the new Azure PowerShell Az module (新しい Azure PowerShell Az モジュールの概要)」を参照してください。To learn more about the new Az module and AzureRM compatibility, see Introducing the new Azure PowerShell Az module. Az モジュールのインストール手順については、Azure PowerShell のインストールを参照してください。For Az module installation instructions, see Install Azure PowerShell.

共同作成者アクセスがあることの確認Verify that you have contributor access

Service Bus 名前空間に移動して、 [アクセス制御 (IAM)] を選択し、 [ロールの割り当て] を選択します。名前空間への共同作成者アクセス権を持っていることを確認します。Go to your Service Bus namespace, and then select Access control (IAM), and select Role assignments tab. Verify that you have the contributor access to the namespace.

イベントとイベント スキーマEvents and event schemas

現在の Service Bus では、2 つのシナリオでイベントが送信されます。Service Bus today sends events for two scenarios:

さらに、Service Bus では、標準の Event Grid セキュリティと認証メカニズムが使用されます。Additionally, Service Bus uses the standard Event Grid security and authentication mechanisms.

詳細については、「Azure Event Grid イベント スキーマ」を参照してください。For more information, see Azure Event Grid event schemas.

アクティブなメッセージが利用可能なイベントActive Messages Available event

このイベントは、キューまたはサブスクリプションにアクティブなメッセージがあり、リッスンしているレシーバーがない場合に生成されます。This event is generated if you have active messages in a queue or a subscription and there are no receivers listening.

このイベントのスキーマは、次のようになります。The schema for this event is as follows:

{
  "topic": "/subscriptions/<subscription id>/resourcegroups/DemoGroup/providers/Microsoft.ServiceBus/namespaces/<YOUR SERVICE BUS NAMESPACE WILL SHOW HERE>",
  "subject": "topics/<service bus topic>/subscriptions/<service bus subscription>",
  "eventType": "Microsoft.ServiceBus.ActiveMessagesAvailableWithNoListeners",
  "eventTime": "2018-02-14T05:12:53.4133526Z",
  "id": "dede87b0-3656-419c-acaf-70c95ddc60f5",
  "data": {
    "namespaceName": "YOUR SERVICE BUS NAMESPACE WILL SHOW HERE",
    "requestUri": "https://YOUR-SERVICE-BUS-NAMESPACE-WILL-SHOW-HERE.servicebus.windows.net/TOPIC-NAME/subscriptions/SUBSCRIPTIONNAME/messages/head",
    "entityType": "subscriber",
    "queueName": "QUEUE NAME IF QUEUE",
    "topicName": "TOPIC NAME IF TOPIC",
    "subscriptionName": "SUBSCRIPTION NAME"
  },
  "dataVersion": "1",
  "metadataVersion": "1"
}

配信不能なメッセージが利用可能なイベントDead-letter Messages Available event

配信不能キューごとに少なくとも 1 つのイベントを受信します。このキューには、メッセージはありますがアクティブなレシーバーはありません。You get at least one event per Dead Letter queue, which has messages and no active receivers.

このイベントのスキーマは、次のようになります。The schema for this event is as follows:

[{
  "topic": "/subscriptions/<subscription id>/resourcegroups/DemoGroup/providers/Microsoft.ServiceBus/namespaces/<YOUR SERVICE BUS NAMESPACE WILL SHOW HERE>",
  "subject": "topics/<service bus topic>/subscriptions/<service bus subscription>",
  "eventType": "Microsoft.ServiceBus.DeadletterMessagesAvailableWithNoListener",
  "eventTime": "2018-02-14T05:12:53.4133526Z",
  "id": "dede87b0-3656-419c-acaf-70c95ddc60f5",
  "data": {
    "namespaceName": "YOUR SERVICE BUS NAMESPACE WILL SHOW HERE",
    "requestUri": "https://YOUR-SERVICE-BUS-NAMESPACE-WILL-SHOW-HERE.servicebus.windows.net/TOPIC-NAME/subscriptions/SUBSCRIPTIONNAME/$deadletterqueue/messages/head",
    "entityType": "subscriber",
    "queueName": "QUEUE NAME IF QUEUE",
    "topicName": "TOPIC NAME IF TOPIC",
    "subscriptionName": "SUBSCRIPTION NAME"
  },
  "dataVersion": "1",
  "metadataVersion": "1"
}]

発行されるイベントの数とイベントが発行される頻度How many events are emitted, and how often?

名前空間に複数のキューおよびトピック/サブスクリプションがある場合、キューごとおよびサブスクリプションごとに少なくとも 1 つのイベントを受信します。If you have multiple queues and topics or subscriptions in the namespace, you get at least one event per queue and one per subscription. イベントは、Service Bus エンティティにメッセージがなく新しいメッセージが届いた場合にすぐに発行されます。The events are emitted immediately if there are no messages in the Service Bus entity and a new message arrives. または、アクティブなレシーバーを Service Bus が検出するまで 2 分おきに発行されます。Or the events are emitted every two minutes unless Service Bus detects an active receiver. メッセージの読み取りはイベントを中断しません。Message browsing does not interrupt the events.

既定の Service Bus では、名前空間内のすべてのエンティティについてイベントが発行されます。By default, Service Bus emits events for all entities in the namespace. 特定のエンティティについてのみイベントを取得したい場合、次のセクションを参照してください。If you want to get events for specific entities only, see the next section.

イベントの取得元をフィルターを使って制限するUse filters to limit where you get events from

たとえば、名前空間内の 1 つのキューまたはサブスクリプションからのみイベントを取得したい場合、Event Grid によって提供される "先頭" フィルターまたは "末尾" フィルターを使用できます。If you want to get events only from, for example, one queue or one subscription within your namespace, you can use the Begins with or Ends with filters that are provided by Event Grid. 一部のインターフェイスでは、これらのフィルターは "プレ" フィルターおよび "サフィックス" フィルターと呼ばれます。In some interfaces, the filters are called Pre and Suffix filters. 複数のキューとサブスクリプションについてイベントを取得したい場合、複数の Event Grid サブスクリプションを作成し、それぞれにフィルターを適用できます。If you want to get events for multiple, but not all, queues and subscriptions, you can create multiple Event Grid subscriptions and provide a filter for each.

Service Bus 名前空間の Event Grid サブスクリプションを作成するCreate Event Grid subscriptions for Service Bus namespaces

Service Bus 名前空間の Event Grid サブスクリプションは、次の 3 とおりの方法で作成できます。You can create Event Grid subscriptions for Service Bus namespaces in three different ways:

Azure Portal での手順Azure portal instructions

新しい Event Grid サブスクリプションを作成するには、次の手順に従います。To create a new Event Grid subscription, do the following:

  1. Azure Portal で目的の名前空間に移動します。In the Azure portal, go to your namespace.

  2. 左側のウィンドウで [Event Grid] を選択します。In the left pane, select the Event Grid.

  3. [イベント サブスクリプション] を選びます。Select Event Subscription.

    次の画像には、Event Grid サブスクリプションがある名前空間が表示されています。The following image displays a namespace that has an Event Grid subscription:

    Event Grid サブスクリプション

    次の画像には、特定のフィルターなしで関数または webhook をサブスクライブする方法が示されています。The following image shows how to subscribe to a function or a webhook without any specific filtering:

    21

Azure CLI の手順Azure CLI instructions

最初に、Azure CLI バージョン 2.0 以降がインストールされていることを確認してください。First, make sure that you have Azure CLI version 2.0 or later installed. インストーラーをダウンロードします。Download the installer. Windows + X キーを押し、管理者のアクセス許可で新しい PowerShell コンソールを開きます。Select Windows + X, and then open a new PowerShell console with administrator permissions. Azure Portal 内のコマンド シェルを使用してもかまいません。Alternatively, you can use a command shell within the Azure portal.

次のコードを実行します。Execute the following code:

az login

az account set -s "<Azure subscription name>"

namespaceid=$(az resource show --namespace Microsoft.ServiceBus --resource-type namespaces --name "<service bus namespace>" --resource-group "<resource group that contains the service bus namespace>" --query id --output tsv

az eventgrid event-subscription create --resource-id $namespaceid --name "<YOUR EVENT GRID SUBSCRIPTION NAME (CAN BE ANY NOT EXISTING)>" --endpoint "<your_function_url>" --subject-ends-with "<YOUR SERVICE BUS SUBSCRIPTION NAME>"

BASH を使用している場合If you are using BASH

PowerShell の手順PowerShell instructions

Azure PowerShell がインストールされていることを確認してください。Make sure you have Azure PowerShell installed. インストーラーをダウンロードします。Download the installer. Windows + X キーを押し、管理者のアクセス許可で新しい PowerShell コンソールを開きます。Select Windows + X, and then open a new PowerShell console with Administrator permissions. Azure Portal 内のコマンド シェルを使用してもかまいません。Alternatively, you can use a command shell within the Azure portal.

Connect-AzAccount

Select-AzSubscription -SubscriptionName "<YOUR SUBSCRIPTION NAME>"

# This might be installed already
Install-Module Az.ServiceBus

$NSID = (Get-AzServiceBusNamespace -ResourceGroupName "<YOUR RESOURCE GROUP NAME>" -Na
mespaceName "<YOUR NAMESPACE NAME>").Id

New-AzEVentGridSubscription -EventSubscriptionName "<YOUR EVENT GRID SUBSCRIPTION NAME (CAN BE ANY NOT EXISTING)>" -ResourceId $NSID -Endpoint "<YOUR FUNCTION URL>” -SubjectEndsWith "<YOUR SERVICE BUS SUBSCRIPTION NAME>"

ここから、他のセットアップ オプションを調べたり、イベントが送信されていることをテストしたりできます。From here, you can explore the other setup options or test that events are flowing.

次の手順Next steps