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 キューを選択します。
Note
セッションが有効なキューまたはトピック サブスクリプションを宛先として使用している場合は、"SessionId" というヘッダー名で、[配信プロパティ] を使用して、イベントでセッション プロパティを設定する必要があります。
Azure CLI の使用
--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
コマンドを使用します。 次に例を示します。
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 の使用
-EndpointType
を servicebusqueue
に設定し、-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 トピックを選択します。
Azure CLI の使用
--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
コマンドを使用します。 次に例を示します。
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 の使用
-EndpointType
を servicebustopic
に設定し、-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 | イベントの種類。 次のいずれかの値を指定できます。
|
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
」のように入力します。- 設定できるのは
SessionId
かMessageId
のみです。
詳細については、「カスタム配信のプロパティ」を参照してください。
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 ディザスター リカバリーが有効な Service Bus 名前空間でフェールオーバーが発生しても、セカンダリ名前空間は Event Grid にイベントを発行しません。 セカンダリ名前空間の Event Grid サブスクリプションを手動で追加する必要があります。
次のステップ
サポートされているイベント ハンドラーの一覧については、「イベント ハンドラー」を参照してください。