Azure Event Gridは、ソースからハンドラーへイベントをルーティングすることでイベント駆動型アーキテクチャをサポートしています。 この記事では、Azure Service Busキューやトピックをイベントグリッドイベントのイベントハンドラとして設定する方法を紹介します。 エンタープライズアプリケーションでイベントを処理するために、Azureポータル、Azure CLI、Azure PowerShell、またはREST APIを使ってキューやトピックを設定します。
前提条件
- アクティブなサブスクリプションを持つ Azure アカウント。 無料でアカウントを作成できます。
- イベントグリッドのトピック、システムトピック、カスタムトピック、またはパートナートピックに購読できます。 詳細は「 イベントグリッドの作成」トピックまたはドメインをご覧ください。
- イベントを受信するためのキューやトピックを持つService Busの名前空間。 詳細については、「Azureポータルを使ってCreate a Service Bus namespaceとqueueを作成する」をご覧ください。
- ソーストピックでイベントサブスクリプションを作成し、ターゲットService Busキューやトピックにメッセージを送信する権限。
Service Bus キュー
Event Grid内のイベントを直接Service Busキューにルーティングし、バッファリングやエンタープライズアプリケーションでのコマンド&コントロールシナリオに対応できます。
Azureポータルを使ってService Busキューを構成します
Azureポータルでイベントサブスクリプションを作成する際に、エンドポイントタイプとしてService Bus Queueを選択し、その後「Select a endpoint」を選択して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 コマンドを使用し、-EndpointType を servicebusqueue に、-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 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 コマンドを使用し、-EndpointType を servicebustopic に、-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を使用します。 - 設定できるのは
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"
}
}
注
geo ディザスター リカバリーが有効な Service Bus 名前空間でフェールオーバーが発生しても、セカンダリ名前空間は Event Grid にイベントを発行しません。 二次的な名前空間のイベントグリッドサブスクリプションは手動で追加する必要があります。
関連するコンテンツ
サポートされているイベントハンドラの一覧については、「 イベントハンドラ」 の記事をご覧ください。