Event Grid トピックを管理するためのイベント ドメインについて
イベント ドメインでは、同じアプリケーションに関連する数千の個々のトピックのエンドポイントを提供します。 数千の個々のトピックを含めることができるメタ トピックと考えることができます。 ドメイン内のすべてのトピックに対して 1 つの発行エンドポイントが提供されます。 イベントを発行するとき、発行元は発行先のドメインでターゲット トピックを指定する必要があります。 発行元は、ドメイン内の別のトピックにイベントが送信されるイベントの配列またはバッチを送信できます。 詳細については、「イベントをイベント ドメインに発行する」セクションを参照してください。
ドメインでは、テナントをパーティション分割できるように各トピックの承認と認証を制御することもできます。 この記事では、イベント ドメインを使用して、さまざまなビジネス組織、顧客、アプリケーションへのカスタム イベントのフローを管理する方法について説明します。 イベント ドメインを使用して、次のことを行います。
- 大規模なマルチテナントのイベントドリブン アーキテクチャを管理します。
- 認証と承認を管理する。
- 各トピックを個別に管理するのではなく、パーティション分割する。
- 各トピック エンドポイントへの個別の発行を回避する。
Note
イベント ドメインは、イベントがドメインに送信され、ドメイン内の各トピックがイベントのコピーを受信するブロードキャスト シナリオをサポートするものではありません。 イベントを発行するとき、発行元は発行先のドメインでターゲット トピックを指定する必要があります。 発行元が同じイベント ペイロードをドメイン内の複数のトピックに発行する場合、発行元はイベント ペイロードを複製し、トピック名を変更し、ドメイン エンドポイントを使用してそれらを Event Grid に (個別に、またはバッチとして) 発行する必要があります。
ユース ケースの例
例を使えば、イベント ドメインを最も簡単に説明できます。 Contoso Construction Machinery という会社を経営しているとします。この会社はトラクター、掘削機器、その他の重機を製造しています。 経営の一部として、機器のメンテナンス、システムの正常性、契約の更新などについて顧客にリアルタイムの情報をプッシュで提供します。 この情報はすべて、アプリ、顧客のエンドポイント、顧客が設定したその他のインフラストラクチャを含むさまざまなエンドポイントに到達します。
イベント ドメインを使用すると、Contoso Construction Machinery を単一の Event Grid エンティティとしてモデル化することができます。 各顧客は、ドメイン内のトピックとして表されます。 認証と認可は Microsoft Entra ID を使用して処理されます。 各顧客はトピックをサブスクライブし、イベントを自分に配信させることができます。 イベント ドメインを介した管理アクセスにより、確実に自分のトピックにのみアクセスできるようになります。
また、すべての顧客イベントを発行できる、単一のエンドポイントが提供されます。 Event Grid では、各トピックにより、そのテナントをスコープとするイベントのみが認識されるようにします。
アクセス管理
ドメインでは、Azure のロールベースのアクセス制御 (Azure RBAC) を使用して、各トピックの認可と認証を細かく制御することができます。 これらのロールを使用することで、アプリケーションの各テナントを、アクセスを許可するトピックにのみ制限することができます。 イベント ドメインでの Azure RBAC は、他の Event Grid や Azure でのマネージド アクセス制御の動作と同じように動作します。 Azure RBAC を使用して、イベント ドメインでカスタム ロール定義を作成して適用します。
組み込みロール
Event Grid には、Azure RBAC がイベント ドメインでより簡単に動作するように、2 つの組み込みロール定義があります。 これらのロールは、EventGrid EventSubscription 共同作成者と、EventGrid EventSubscription 閲覧者です。 イベント ドメインでトピックをサブスクライブする必要があるユーザーに、これらのロールを割り当てます。 ロールの割り当てのスコープは、ユーザーがサブスクライブする必要があるトピックだけにします。 これらのロールについては、Event Grid の組み込みロールに関する記事をご覧ください。
トピックのサブスクライブ
イベント ドメイン内のトピックでイベントをサブスクライブすることは、カスタム トピックでイベント サブスクリプションを作成したり、Azure サービスからイベントをサブスクライブしたりすることと同じです。
重要
ドメイン トピックは、Event Grid の自動管理されたリソースと見なされます。 イベント サブスクリプションは、ドメイン トピックを作成せずに、ドメイン スコープで作成できます。 この場合、Event Grid によって自動的にドメイン トピックが作成されます。 もちろん、ドメイン トピックを手動で作成することもできます。 この動作により、多数のドメイン トピックを扱うときに注意する必要があるリソースが 1 つ少なくなります。 ドメイン トピックに対する最後のサブスクリプションが削除されると、ドメイン トピックが手動で作成されたか自動作成されたかに関係なく、ドメイン トピックも削除されます。
ドメイン スコープ サブスクリプション
イベント ドメインでは、ドメイン スコープ サブスクリプションも許可されます。 イベント ドメインのイベント サブスクリプションでは、イベントの送信先となるトピックに関係なく、ドメインに送信されるすべてのイベントを受信します。 ドメイン スコープ サブスクリプションは、管理や監査の目的で役立ちます。
イベント ドメインへの発行
イベント ドメインを作成するときに、Event Grid でトピックを作成した場合と同じような発行エンドポイントが与えられます。 イベント ドメインの任意のトピックにイベントを発行するには、カスタム トピックの場合と同じように、ドメインのエンドポイントにイベントをプッシュします。 唯一の違いは、イベントの配信先となるトピックを指定する必要があることです。 たとえば、次のイベントの配列を発行すると、"id": "1111"
のイベントがトピック foo
に送信され、"id": "2222"
のイベントはトピック bar
に送信されます。
クラウド イベント スキーマを使用する場合は、ドメイン内の Event Grid トピックの名前を source
プロパティの値として指定します。 次の例では、最初のイベントに対しては source
プロパティを foo
に設定し、2 番目のイベントに対しては bar
に設定しています。
別のフィールドを使用してドメイン内の目的のトピックを指定する場合は、ドメインの作成時に入力スキーマ マッピングを指定します。 たとえば、REST API を使用している場合は、そのフィールドを properties.topic
にマップするときに、properties.inputSchemaMapping プロパティを使用します。 .NET SDK を使用している場合は、EventGridJsonInputSchemaMapping
を使用します。 他の SDK でもスキーマ マッピングがサポートされています。
[{
"source": "foo",
"id": "1111",
"type": "maintenanceRequested",
"subject": "myapp/vehicles/diggers",
"time": "2018-10-30T21:03:07+00:00",
"data": {
"make": "Contoso",
"model": "Small Digger"
},
"specversion": "1.0"
},
{
"source": "bar",
"id": "2222",
"type": "maintenanceCompleted",
"subject": "myapp/vehicles/tractors",
"time": "2018-10-30T21:04:12+00:00",
"data": {
"make": "Contoso",
"model": "Big Tractor"
},
"specversion": "1.0"
}]
イベント ドメインにより、トピックへの発行が自動的に処理されます。 管理する各トピックに個別にイベントを発行するのではなく、すべてのイベントをドメインのエンドポイントに対して発行することができます。 Event Grid によって、各イベントは正しいトピックに確実に送信されます。
価格
イベント ドメインでは、Event Grid の他のすべての機能で使用されるのと同じ操作価格が使用されます。 イベント ドメインでの操作は、カスタム トピックの場合と同じように動作します。 イベント ドメインへのイベントの各取り込みは 1 回の操作であり、イベントの各配信試行も 1 回の操作となります。
次のステップ
イベント ドメインの設定、トピックの作成、イベント サブスクリプションの作成、イベントの発行の詳細については、イベント ドメインの管理に関するページを参照してください。