Azure Event Grid では、ソースからハンドラーにイベントをルーティングすることで、シームレスなイベント ドリブン アーキテクチャを実現できます。 この記事では、Event Grid イベントのイベント ハンドラーとして Azure Service Bus キューとトピックを構成する方法について説明します。 このステップ バイ ステップ ガイドは、Azure portal、CLI、PowerShell、REST API を使用してエンタープライズ アプリケーションのイベントを処理するための Service Bus キューとトピックを設定するのに役立ちます。
Service Bus キュー
バッファー処理やコマンドで使用するため、およびエンタープライズ アプリケーションでの制御シナリオで使用するために、Event Grid のイベントを Service Bus キューに直接ルーティングできます。
Azure Portal の使用
Azure portal で、イベント サブスクリプションを作成するときに、エンドポイントの種類として [Service Bus キュー] を選択し、[エンドポイントの選択] をクリックして Service Bus キューを選択します。
Note
セッションが有効なキューまたはトピック サブスクリプションを宛先として使用している場合は、"SessionId" というヘッダー名で、[配信プロパティ] を使用して、イベントでセッション プロパティを設定する必要があります。
Azure CLI の使用
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 の使用
を -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 Portal の使用
Azure portal で、イベント サブスクリプションを作成するときに、エンドポイントの種類として [Service Bus トピック] を選択し、[エンドポイントの選択] をクリックして Service Bus トピックを選択します。
Azure CLI の使用
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 の使用
を -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 エンティティでの重複検出の期間を、イベントの有効期限 (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 サブスクリプションを手動で追加する必要があります。
次のステップ
サポートされているイベント ハンドラーの一覧については、「イベント ハンドラー」を参照してください。