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

イベント ハンドラーは、Event Grid を介してイベント ソースからイベントを受信し、それらのイベントを処理します。 いくつかの Azure サービスのインスタンスを使用してイベントを処理できます。Azure Service Bus はそのうちの 1 つです。 この記事では、Event Grid からのイベントのハンドラーとして Service Bus キューまたはトピックを使用する方法について説明します。

Service Bus キュー

バッファー処理やコマンドで使用するため、およびエンタープライズ アプリケーションでの制御シナリオで使用するために、Event Grid のイベントを Service Bus キューに直接ルーティングできます。

Azure Portal の使用

Azure portal で、イベント サブスクリプションを作成するときに、エンドポイントの種類として [Service Bus キュー] を選択し、[エンドポイントの選択] をクリックして Service Bus キューを選択します。

Screenshot showing the configuration of a Service Bus queue handler.

Note

セッションで有効なキューは、Azure Event Grid イベントのイベント ハンドラーとしてはサポートされません

Azure CLI の使用

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

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 の使用

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

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 Portal の使用

Azure portal で、イベント サブスクリプションを作成するときに、エンドポイントの種類として [Service Bus トピック] を選択し、[エンドポイントの選択] をクリックして Service Bus トピックを選択します。

Screenshot showing the configuration of a Service Bus topic handler.

Azure CLI の使用

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

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 の使用

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

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

イベントの種類。

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

  • SubscriptionValidation
  • Notification
  • SubscriptionDeletion
aeg-metadata-version

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

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

aeg-data-version

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

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

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

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

メッセージの内部システム ID は、イベントの再配信間で保持されるので、サービス バスのエンティティで重複検出をオンにすることで、配信の重複を回避できます。 Service Bus エンティティでの重複検出の期間を、イベントの有効期限 (TTL) または最大再試行期間のいずれか長い方に設定することをお勧めします。

配信プロパティ

イベント サブスクリプションを使用すると、配信されたイベントに含まれる HTTP ヘッダーを設定できます。 この機能を使用すると、宛先に必要なカスタム ヘッダーを設定できます。 Azure Service Bus のキューとトピックに配信されるイベントにカスタム ヘッダーを設定できます。

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

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

Note

  • 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"
	}
}

Note

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

次のステップ

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