Azure Event Grid 名前空間の概念
この記事では、名前空間トピックに関連する主な概念と機能について説明します。
イベント
イベントは、システム内で発生した何かを詳細に記述する最小限の情報です。 イベントは、アクションにつながる洞察を提供する、システムに関する独立した固有の事実を表すため、よく「離散イベント」と呼ばれます。 すべてのイベントは、イベントの source
、イベントが発生した time
、一意識別子などの一般的な情報を持っています。 イベントには type
もあります。これは通常、イベントが使用されるアナウンスの種類を記述する一意の識別子です。
たとえば、Azure Storage に作成される新しいファイルに関するイベントには、lastTimeModified
値などのファイルの詳細が含まれます。 Event Hubs イベントには、キャプチャ ファイルの URL が含まれます。 Orders マイクロサービスの新しい注文に関するイベントには、注文の状態表現を示す orderId
属性と URL 属性が含まれる場合があります。 イベントの種類には、com.yourcompany.Orders.OrderCreated
、org.yourorg.GeneralLedger.AccountChanged
、io.solutionname.Auth.MaximumNumberOfUserLoginAttemptsReached
などの例があります。
イベントの例を次に示します。
{
"specversion" : "1.0",
"type" : "com.yourcompany.order.created",
"source" : "/orders/account/123",
"subject" : "O-28964",
"id" : "A234-1234-1234",
"time" : "2018-04-05T17:31:00Z",
"comexampleextension1" : "value",
"comexampleothervalue" : 5,
"datacontenttype" : "application/json",
"data" : {
"orderId" : "O-28964",
"URL" : "https://com.yourcompany/orders/O-28964"
}
}
別の種類のイベント
ユーザー コミュニティでは、1 回のデバイス読み取りや Web アプリケーション ページでの 1 回のクリックなど、データ ポイントを伝えるメッセージのことも「イベント」と呼びます。 このようなイベントは、通常、分析情報を導き出してアクションを実行するために、所定の時間枠で分析されます。 Event Grid のドキュメントでは、この種類のイベントをデータ ポイント、ストリーミング データ、または単にテレメトリと呼びます。 他の種類のメッセージの中でも、この種のイベントは Event Grid のメッセージ キュー テレメトリ トランスポート (MQTT) ブローカー機能で使用されます。
CloudEvents のサポート
Event Grid 名前空間トピックでは、JSON 形式 で HTTP プロトコル バインド を使用して、Cloud Native Computing Foundation (CNCF) のオープン標準の CloudEvents 1.0 仕様に準拠するイベントを受け入れます。 CloudEvent は、イベント データと呼ばれる、通信内容とそれに関するメタデータを入れた一種のメッセージです。 イベント ドリブン アーキテクチャのイベント データでは、通常、システム状態の変化を通知する情報が伝送されます。 CloudEvents メタデータは、メッセージの送信元 (ソース システム)、その種類など、メッセージに関するコンテキスト情報を提供する一連の属性で構成されます。
詳細については、CloudEvents スキーマのサポートに関するページを参照してください。
ディストリビューターのプロパティ
発行元は、Event Grid にイベントを送信するアプリケーションです。 イベントが発生したアプリケーション (イベント ソース) と同じアプリケーションで処理を行う場合もあります。 名前空間トピックを使用する場合は、独自のアプリケーションからイベントを発行できます。
イベント ソース
イベント ソースは、イベントの発生場所です。 各イベント ソースは、1 つまたは複数のイベントの種類をサポートします。 たとえば、使用するアプリケーションは、システムで定義されるカスタム イベントのイベント ソースであるとします。 名前空間トピックを使用する場合、サポートされるイベント ソースは独自のアプリケーションです。
名前空間
Event Grid 名前空間は、次のリソースの管理コンテナーです。
リソース | サポートされているプロトコル |
---|---|
名前空間トピック | HTTP |
トピック空間 | MQTT |
クライアント | MQTT |
クライアント グループ | MQTT |
CA 証明書 | MQTT |
アクセス許可バインド | MQTT |
Azure Event Grid 名前空間を使用する場合、関連するリソースをグループ化し、Azure サブスクリプションの 1 つの単位として管理できます。 一意の完全修飾ドメイン名 (FQDN) が提供されます。
名前空間では、次の 2 つのエンドポイントが公開されます。
- 名前空間トピックを使用して一般的なメッセージング要件をサポートする HTTP エンドポイント。
- MQTT を使用する IoT メッセージングまたはソリューション用の MQTT エンドポイント。
名前空間には、DNS 統合ネットワーク エンドポイントも用意されています。 そこでは、一連のアクセス制御およびネットワーク統合管理機能 (パブリック IP イングレス フィルタリング、プライベート リンクなど) も提供されます。 また、名前空間は、そこに含まれているリソースに使用されるマネージド ID のコンテナーでもあります。
名前空間に関するその他のポイントをいくつか次に示します。
- 名前空間は、
tags
とlocation
のプロパティを持つ追跡されたリソースであり、一度作成するとresources.azure.com
上で見つけることができます。 - 名前空間の名前は、3 から 50 文字の長さにすることができます。 英数字とハイフン (-) を含めることができ、スペースを含めることはできません。
- 名前はリージョンごとに一意である必要があります。
スループット ユニット
スループット ユニット (TU) は、名前空間のイングレスおよびエグレス イベント レート容量を定義します。 詳細については、「Azure Event Grid のクォータと制限」をご覧ください。
トピック
トピックには、Event Grid に発行されたイベントが保持されます。 通常、関連するイベントのコレクションにはトピック リソースを使用します。 通常、名前空間内のトピックのことを、名前空間トピックと呼びます。
名前空間トピック
名前空間トピックは、Event Grid 名前空間内に作成されるトピックです。 アプリケーションは、発行されたイベントが論理的に含まれる名前空間トピックを指定して、HTTP 名前空間エンドポイントにイベントを発行します。 アプリケーションを設計するときに、作成するトピック数を決定する必要があります。 比較的大規模なソリューションの場合、関連するイベントのカテゴリごとに名前空間を作成します。 たとえば、ユーザー アカウントを管理するアプリケーションと、顧客の注文に関する別のアプリケーションを考えてみましょう。 すべてのイベント サブスクライバーが両方のアプリケーションのイベントを必要とする可能性は低いです。 懸念事項を分離するには、アプリケーションごとに 1 つずつ、2 つの名前空間トピックを作成します。 イベント コンシューマーが要件に従ってトピックをサブスクライブできるようにします。 小規模なソリューションの場合、すべてのイベントを 1 つのトピックに送信することをお勧めします。
名前空間トピックでは、プル配信とプッシュ配信がサポートされます。 プル配信またはプッシュ配信を使用するタイミングを確認すると、要件に応じてプル配信が適切なアプローチかどうかを判断するのに役立ちます。
イベントのサブスクリプション
イベント サブスクリプションは、1 つのトピックに関連付けられた構成リソースです。 特に、イベント サブスクリプションを使用してイベント選択条件を設定し、特定のトピックで利用できるイベントの全セットの中でサブスクライバーが使用できるイベント コレクションを定義します。 サブスクライバーの要件に従ってイベントをフィルター処理できます。 たとえば、イベントの種類でイベントをフィルター処理できます。 data プロパティの値として JSON オブジェクトを使用する場合は、イベント データ プロパティにフィルター条件を定義することもできます。 リソースのプロパティの詳細については、Event Grid REST API でコントロール プレーン操作を探してください。
名前空間トピックのサブスクリプションを作成する例については、Publish and consume messages using namespace topics using CLI (CLI を使用して名前空間トピックを使用してメッセージを発行および使用する) をご覧ください。
Note
名前空間トピックの下のイベント サブスクリプションは、カスタム、ドメイン、パートナー、およびシステム トピック (Event Grid Basic) に使用されるサブスクリプションと比較して、簡略化されたリソース モデルになっています。 詳細については、イベント サブスクリプションの作成、表示、および管理に関するページを参照してください。
プル配信
プル配信を使用すると、アプリケーションは Event Grid に接続し、キューに似たセマンティクスを使用してメッセージを読み取ります。 アプリケーションは、Event Grid に接続してイベントを使用すると、イベント消費率とそのタイミングを制御します。 コンシューマー アプリケーションは、Event Grid に接続するときにプライベート エンドポイントを使用して、プライベート IP 空間を使用してイベントを読み取ることもできます。
プル配信では、メッセージを読み取り、メッセージの状態を制御するための次の操作がサポートされています: 受信、確認、リリース、拒否、ロックの更新。 詳細については、pull delivery overview (プル配信の概要) をご覧ください。
プル配信を使用してイベントを受信するときのデータ シェイプ
プル配信を使用してイベントを配信するとき、Event Grid にはオブジェクトの配列が含まれ、その配列に event オブジェクトと brokerProperties オブジェクトが含まれます。 event プロパティの値は、構造化コンテンツ モードで配信される CloudEvent です。 brokerProperties オブジェクトには、配信された CloudEvent に関連付けられているロック トークンが含まれています。 次の json オブジェクトは、2 つのイベントを返す受信操作からの応答のサンプルです。
{
"value": [
{
"brokerProperties": {
"lockToken": "CiYKJDUwNjE4QTFFLUNDODQtNDZBQy1BN0Y4LUE5QkE3NjEwNzQxMxISChDXYS23Z+5Hq754VqQjxywE",
"deliveryCount": 2
},
"event": {
"specversion": "1.0",
"id": "A234-1234-1235",
"source": "/mycontext",
"time": "2018-04-05T17:31:00Z",
"type": "com.example.someeventtype",
"data": "some data"
}
},
{
"brokerProperties": {
"lockToken": "CiYKJDUwNjE4QTFFLUNDODQtNDZBQy1BN0Y4LUE5QkE3NjEwNzQxMxISChDLeaL+nRJLNq3/5NXd/T0b",
"deliveryCount": 1
},
"event": {
"specversion": "1.0",
"id": "B688-1234-1235",
"source": "/mycontext",
"type": "com.example.someeventtype",
"time": "2018-04-05T17:31:00Z",
"data": {
"somekey" : "value",
"someOtherKey" : 9
}
}
}
]
}
プッシュ配信
プッシュ配信では、Event Grid は、push (配信モード) イベント サブスクリプションで構成された宛先にイベントを送信します。 宛先がイベントを受信できない場合に備えて、堅牢な再試行ロジックが提供されます。
重要
Event Grid 名前空間のプッシュ配信では、現在、Azure Event Hubs を宛先としてサポートしています。 今後、Event Grid 名前空間では、Event Grid Basic でサポートされているすべての宛先を含め、より多くの宛先がサポートされる予定です。
Event Hubs イベント配信
Event Grid では、Event Hubs の SDK を使用して、AMQP を使用して Event Hubs にイベントを送信します。 イベントは、CloudEvent を格納する配列内の各要素を含むバイト配列として送信されます。
プッシュとプル配信
Event Grid は、HTTP を使用してプッシュとプルのイベント配信をサポートしています。 プッシュ配信では、イベント サブスクリプション、Webhook、または Azure サービス内に、Event Grid がイベントを送信する宛先を定義します。 プル配信では、サブスクライバー アプリケーションは Event Grid に接続してイベントを使用します。 プル配信は、Event Grid 名前空間内のトピックでサポートされています。
重要
Event Hubs は、名前空間トピックへのサブスクリプションの宛先としてサポートされています。 今後のリリースでの Event Grid 名前空間では、Event Grid Basic で現在使用できるすべての宛先と、追加の宛先がサポートされます。
プッシュ配信とプル配信を使用するケース
どのような場合にプル配信またはプッシュ配信を使用するかを決定するのに役立つ一般的なガイドラインを次に示します。
プル配信
- イベントを受信するタイミングを完全に制御する必要があるとき。 たとえば、アプリケーションが常に稼働していないか、十分に安定していないか、特定の時間にデータを処理する場合があります。
- イベントの消費を完全に制御する必要があるとき。 たとえば、コンシューマー アプリケーションのダウンストリーム サービスまたはレイヤーに、イベントの処理を妨げる問題が発生する場合があります。 その場合、プル配信 API を使用すると、コンシューマー アプリが既に読み取ったイベントを後で配信できるように、ブローカーに戻すことができます。
- イベントを受信するときにプライベート リンクを使用する必要があり、これはプッシュ配信ではなく、プル配信でのみ可能です。
- エンドポイントを公開してプッシュ配信を使用する機能はありませんが、Event Grid に接続してイベントを消費できます。
プッシュ配信
- システム状態の変化が発生したことを判別するための定期的なポーリングを回避する必要があるとき。 Event Grid を使用して、状態の変化が発生した時点でイベントを送信するようにできます。
- 送信呼び出しを行うことができないアプリケーションがあるとき。 たとえば、組織がデータ流出を懸念している場合があります。 ただし、アプリケーションはパブリック エンドポイントを経由でイベントを受信できます。
関連するコンテンツ
- Event Grid の概要については、Event Grid の紹介に関する記事を参照してください。
- 名前空間トピックの使用を開始するには、名前空間トピックを使用したイベントの発行に関するページを参照してください。