Service Bus キューとトピックを Azure Event Grid イベントのイベント ハンドラーとして構成する

Azure Event Gridは、ソースからハンドラーへイベントをルーティングすることでイベント駆動型アーキテクチャをサポートしています。 この記事では、Azure Service Busキューやトピックをイベントグリッドイベントのイベントハンドラとして設定する方法を紹介します。 エンタープライズアプリケーションでイベントを処理するために、Azureポータル、Azure CLI、Azure PowerShell、またはREST APIを使ってキューやトピックを設定します。

前提条件

Service Bus キュー

Event Grid内のイベントを直接Service Busキューにルーティングし、バッファリングやエンタープライズアプリケーションでのコマンド&コントロールシナリオに対応できます。

Azureポータルを使ってService Busキューを構成します

Azureポータルでイベントサブスクリプションを作成する際に、エンドポイントタイプとしてService Bus Queueを選択し、その後「Select a endpoint」を選択してService Busキューを選択します。

Azure Event Grid で Service Bus キューをイベント ハンドラーとして構成するスクリーンショット。

セッション対応キューやトピックサブスクリプションを宛先にする場合は、ヘッダー名 SessionIdの配信プロパティを使ってイベントのセッションプロパティを設定してください。

Azure CLIを使ってService Busキューを設定

az eventgrid event-subscription create--endpoint-type に設定し、servicebusqueue--endpoint に設定した /subscriptions/{AZURE SUBSCRIPTION}/resourceGroups/<RESOURCE GROUP NAME>/providers/Microsoft.ServiceBus/namespaces/<NAMESPACE NAME>/queues/<QUEUE NAME> コマンドを使用します。 次に例を示します。

az eventgrid event-subscription create \
    --name <my-event-subscription> \
    --source-resource-id /subscriptions/{SubID}/resourceGroups/{RG}/providers/Microsoft.EventGrid/topics/topic1 \
    --endpoint-type servicebusqueue \
    --endpoint /subscriptions/{SubID}/resourceGroups/TestRG/providers/Microsoft.ServiceBus/namespaces/ns1/queues/queue1

また、カスタム トピックの場合は az eventgrid topic event-subscription コマンド、システム トピックの場合は az eventgrid system-topic event-subscription コマンド、パートナー トピックの場合は az eventgrid partner topic event-subscription create コマンドを使用できます。

Azure PowerShellを使ってService Busキューを構成

New-AzEventGridSubscription コマンドを使用し、-EndpointTypeservicebusqueue に、-Endpoint/subscriptions/{AZURE SUBSCRIPTION}/resourceGroups/<RESOURCE GROUP NAME>/providers/Microsoft.ServiceBus/namespaces/<NAMESPACE NAME>/queues/<QUEUE NAME> に設定します。 次に例を示します。

New-AzEventGridSubscription -ResourceGroup MyResourceGroup `
            -TopicName Topic1 `
            -EndpointType servicebusqueue `
            -Endpoint /subscriptions/{SubID}/resourceGroups/TestRG/providers/Microsoft.ServiceBus/namespaces/ns1/queues/queue1 `
            -EventSubscriptionName EventSubscription1

また、システム トピックの場合は New-AzEventGridSystemTopicEventSubscription コマンド、パートナー トピックの場合は New-AzEventGridPartnerTopicEventSubscription コマンドを使用できます。

Service Bus トピック

Event Grid内のイベントを直接Service Busトピックにルーティングし、コマンドおよびコントロールメッセージングシナリオに適用します。

Azureポータルを使ってService Busトピックを設定する

Azureポータルでイベントサブスクリプションを作成する際に、エンドポイントタイプとしてService Bus Topicを選択し、その後「Select a endpoint」を選択してService Busトピックを選択します。

Azure Event GridでイベントハンドラとしてService Busトピックを設定するスクリーンショット。

Azure CLIを使ってService Busトピックを設定する

az eventgrid event-subscription create--endpoint-type に設定し、servicebustopic--endpoint に設定した /subscriptions/{AZURE SUBSCRIPTION}/resourceGroups/<RESOURCE GROUP NAME>/providers/Microsoft.ServiceBus/namespaces/<NAMESPACE NAME>/topics/<TOPIC NAME> コマンドを使用します。 次に例を示します。

az eventgrid event-subscription create \
    --name <my-event-subscription> \
    --source-resource-id /subscriptions/{SubID}/resourceGroups/{RG}/providers/Microsoft.EventGrid/topics/topic1 \
    --endpoint-type servicebustopic \
    --endpoint /subscriptions/{SubID}/resourceGroups/TestRG/providers/Microsoft.ServiceBus/namespaces/ns1/topics/topic1

また、カスタム トピックの場合は az eventgrid topic event-subscription コマンド、システム トピックの場合は az eventgrid system-topic event-subscription コマンド、パートナー トピックの場合は az eventgrid partner topic event-subscription create コマンドを使用できます。

Azure PowerShell を使って Service Bus トピックを設定

New-AzEventGridSubscription コマンドを使用し、-EndpointTypeservicebustopic に、-Endpoint/subscriptions/{AZURE SUBSCRIPTION}/resourceGroups/<RESOURCE GROUP NAME>/providers/Microsoft.ServiceBus/namespaces/<NAMESPACE NAME>/topics/<TOPIC NAME> に設定します。 次に例を示します。

New-AzEventGridSubscription -ResourceGroup MyResourceGroup `
            -TopicName Topic1 `
            -EndpointType servicebustopic `
            -Endpoint /subscriptions/{SubID}/resourceGroups/TestRG/providers/Microsoft.ServiceBus/namespaces/ns1/topics/topic1 `
            -EventSubscriptionName EventSubscription1

また、システム トピックの場合は New-AzEventGridSystemTopicEventSubscription コマンド、パートナー トピックの場合は New-AzEventGridPartnerTopicEventSubscription コマンドを使用できます。

メッセージ ヘッダー

これらは、メッセージ ヘッダーで受け取るプロパティです。

プロパティ名 説明
aeg-subscription-name イベント サブスクリプションの名前。
aeg-delivery-count イベントに対して行われた試行の回数。
aeg-event-type

イベントの種類。

次のいずれかの値を指定できます。

  • サブスクリプションの検証
  • 通知
  • サブスクリプションの削除
aeg-metadata-version

イベントのメタデータ バージョン。

Event Grid のイベント スキーマの場合、このプロパティはメタデータのバージョンを表し、クラウド イベント スキーマの場合は仕様のバージョンを表します。

aeg-data-version

イベントのデータバージョン。

Event Grid のイベント スキーマの場合、このプロパティはデータのバージョンを表し、クラウド イベント スキーマの場合は適用されません。

aeg-output-event-id Event Grid イベントの ID。

ブローカー メッセージとして Service Bus のキューまたはトピックにイベントを送信する場合、ブローカー メッセージの messageid は内部システム ID です。

メッセージの内部システムIDはイベントの再配信中も保持されるため、Service Busエンティティで重複検出をオンにすることで重複配信を避けられます。 Service Busエンティティの重複検出時間は、イベントの生存時間(TTL)または最大再試行時間のいずれかより長い方に設定します。

配信プロパティ

イベントサブスクリプションを利用する場合、配信イベントに含めるHTTPヘッダーを設定することができます。 この機能は、宛先が要求するカスタムヘッダーの設定をサポートします。 Azure Service Busのキューやトピックに配信されるイベントにカスタムヘッダーを設定できます。

Azure Service Busは、単一メッセージを送信する際に以下のメッセージプロパティをサポートしています。

ヘッダー名 ヘッダーの種類
MessageId 動的
PartitionKey 静的または動的
SessionId 静的または動的
CorrelationId 静的または動的
Label 静的または動的
ReplyTo 静的または動的
ReplyToSessionId 静的または動的
To 静的または動的
ViaPartitionKey 静的または動的

  • MessageId の既定値は、Event Grid のイベントの内部 ID です。 これはオーバーライドできます。 たとえば、 data.fieldを使用します。
  • 設定できるのは SessionIdMessageId のみです。

詳細については、「カスタム配信のプロパティ」を参照してください。

REST の例 (PUT 用)

Service Bus キュー

{
    "properties": 
    {
        "destination": 
        {
			"endpointType": "ServiceBusQueue",
            "properties": 
            {
				"resourceId": "/subscriptions/<AZURE SUBSCRIPTION ID>/resourceGroups/<RESOURCE GROUP NAME>/providers/Microsoft.ServiceBus/namespaces/<SERVICE BUS NAMESPACE NAME>/queues/<SERVICE BUS QUEUE NAME>"
			}
		},
		"eventDeliverySchema": "EventGridSchema"
	}
}

Service Bus キュー - マネージド ID を使用した配信

{
	"properties": {
        "deliveryWithResourceIdentity": 
        {
            "identity": 
            {
				"type": "SystemAssigned"
			},
            "destination": 
            {
				"endpointType": "ServiceBusQueue",
                "properties": 
                {
					"resourceId": "/subscriptions/<AZURE SUBSCRIPTION ID>/resourceGroups/<RESOURCE GROUP NAME>/providers/Microsoft.ServiceBus/namespaces/<SERVICE BUS NAMESPACE NAME>/queues/<SERVICE BUS QUEUE NAME>"
				}
			}
		},
		"eventDeliverySchema": "EventGridSchema"
	}
}

Service Bus トピック

{
    "properties": 
    {
        "destination": 
        {
			"endpointType": "ServiceBusTopic",
            "properties": 
            {
				"resourceId": "/subscriptions/<AZURE SUBSCRIPTION ID>/resourceGroups/<RESOURCE GROUP NAME>/providers/Microsoft.ServiceBus/namespaces/<SERVICE BUS NAMESPACE NAME>/topics/<SERVICE BUS TOPIC NAME>"
			}
		},
		"eventDeliverySchema": "EventGridSchema"
	}
}

Service Bus トピック - マネージド ID を使用した配信

{
    "properties": 
    {
        "deliveryWithResourceIdentity": 
        {
            "identity": 
            {
				"type": "SystemAssigned"
			},
            "destination": 
            {
				"endpointType": "ServiceBusTopic",
                "properties": 
                {
					"resourceId": "/subscriptions/<AZURE SUBSCRIPTION ID>/resourceGroups/<RESOURCE GROUP NAME>/providers/Microsoft.ServiceBus/namespaces/<SERVICE BUS NAMESPACE NAME>/topics/<SERVICE BUS TOPIC NAME>"
				}
			}
		},
		"eventDeliverySchema": "EventGridSchema"
	}
}

geo ディザスター リカバリーが有効な Service Bus 名前空間でフェールオーバーが発生しても、セカンダリ名前空間は Event Grid にイベントを発行しません。 二次的な名前空間のイベントグリッドサブスクリプションは手動で追加する必要があります。

サポートされているイベントハンドラの一覧については、「 イベントハンドラ」 の記事をご覧ください。