Azure Event Grid 名前空間の概念

この記事では、名前空間のトピックに関連する主な概念と機能について説明します。

イベント

イベントは、システム内で発生した何かを詳細に記述する最小限の情報です。 イベントは、アクションにつながる分析情報を提供するシステムに関する独立した自己完結型の事実を表すので、不連続イベントと呼ばれることがよくあります。 すべてのイベントには、イベントのsource、イベントが発生したtime、および一意の識別子などの共通情報が含まれます。 すべてのイベントには type もあります。これは通常、イベントの使用目的であるアナウンスの種類を記述する一意識別子です。

たとえば、Azure Storage に作成される新しいファイルに関するイベントには、lastTimeModified 値などのファイルの詳細が含まれます。 Event Hubs イベントには、キャプチャ ファイルの URL が含まれます。 Orders マイクロサービスの新しい注文に関するイベントには、注文の状態表現を示す orderId 属性と URL 属性が含まれる場合があります。 イベントの種類には、com.yourcompany.Orders.OrderCreatedorg.yourorg.GeneralLedger.AccountChangedio.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 アプリケーション ページのクリックなど、データ ポイントを伝達するメッセージを "イベント" と言います。通常は、この種のイベントを時間枠内で分析して分析情報を導き出し、アクションを実行します。 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サブスクリプション内の単一のユニットとして管理できます。 一意の完全修飾ドメイン名 (FQDN) が提供されます。

名前空間は、次の 2 つのエンドポイントを公開します。

  • 名前空間トピックを用いて一般的なメッセージング要件をサポートするHTTPエンドポイントです。
  • MQTT を使用する IoT メッセージングまたはソリューション用の MQTT エンドポイント。

名前空間には、DNS 統合ネットワーク エンドポイントも用意されています。 そこでは、一連のアクセス制御およびネットワーク統合管理機能 (パブリック IP イングレス フィルタリング、プライベート リンクなど) も提供されます。 また、名前空間は、そこに含まれているリソースに使用されるマネージド ID のコンテナーでもあります。

名前空間に関するその他のポイントをいくつか次に示します。

  • 名前空間とは、プロパティ tags および location プロパティを持つトラッキングされたリソースのことです。 作成後は resources.azure.comで見つけることができます。
  • 名前空間の名前は、3 から 50 文字の長さにすることができます。 英数字文字、ハイフン(-)、スペースなしを含むことができます。
  • 名前はリージョンごとに一意である必要があります。

スループット単位

スループット ユニット (TU) は、名前空間のイングレスおよびエグレス イベント レート容量を定義します。 詳細については、「Azure Event Grid のクォータと制限」をご覧ください。

Autoscale

自動スケールは、リアルタイムのトラフィックとリソース利用状況に基づいて、イベントグリッド名前空間に割り当てられたスループットユニット数を自動的に調整します。 主要な業績評価指標を継続的に監視し、設定した最小・最大限度内で容量をスケールします。 この行動は、作業量の急増時に一貫したパフォーマンスを維持し、手作業を必要とせずに低活動期のコスト削減に役立っています。

Autoscaleを使うには、名前空間で有効にし、以下を指定します:

  • 最小処理量単位:容量の下限。 名前空間はこの値以下ではスケールしません。
  • 最大処理能力ユニット:容量の上限。 名前空間はこの値を超えるとスケールしません。

Event Gridは、イベント入力、イベント出口、MQTTのインバウンドおよびアウトバウンドの公開率、およびMQTT登録クライアント数の利用率を評価します。 どのカテゴリでもスケールアップの閾値を超えると、より多くのTUがプロビジョニングされます。 すべてのカテゴリーが縮小閾値を下回った場合、TUが解放されます。 スケーリング操作間のクールダウン期間は急速な発振を防ぎます。

自動スケールは、デバイスの接続・切断によってメッセージのファンアウトやサブスクリプションの増加が急速に変化するMQTTワークロードに有用です。 また、トラフィックが突発的に変動するイベントブローカーのワークロードにも有効です。

構成の詳細やTUごとの容量制限については、 Autoscaleの概要操作ガイドをご覧ください。

トピック

トピックには、Event Grid に発行されたイベントが保持されます。 通常、関連するイベントのコレクションにはトピック リソースを使用します。 名前空間内のトピックは、多くの場合、 名前空間トピックと呼ばれます。

名前空間トピック

名前空間トピックは、Event Grid 名前空間内に作成されるトピックです。 アプリケーションは、発行されたイベントが論理的に含まれる名前空間トピックを指定して、HTTP 名前空間エンドポイントにイベントを発行します。 アプリケーションを設計するときは、作成するトピックの数を決定します。 比較的大規模なソリューションの場合、関連するイベントのカテゴリごとに名前空間を作成します。 たとえば、ユーザー アカウントを管理するアプリケーションと、顧客の注文に関する別のアプリケーションを考えてみましょう。 すべてのイベント サブスクライバーが両方のアプリケーションのイベントを必要とする可能性は低いです。 懸念事項を分離するには、アプリケーションごとに 1 つずつ、2 つの名前空間トピックを作成します。 イベントコンシューマーが要件に応じてトピックを購読できるようにします。 小規模なソリューションの場合、すべてのイベントを 1 つのトピックに送信することをお勧めします。

名前空間トピックでは、プル配信プッシュ配信がサポートされます。 プル配信またはプッシュ配信を使用するタイミングを確認すると、要件に応じてプル配信が適切なアプローチかどうかを判断するのに役立ちます。

イベントのサブスクリプション

イベント サブスクリプションは、1 つのトピックに関連付けられた構成リソースです。 その他にも、イベントサブスクリプションを使って、トピック内のイベント全体の中から購読者が利用できるイベントコレクションを定義するためのイベント選択基準を設定することも可能です。 サブスクライバーの要件に従ってイベントをフィルター処理できます。 たとえば、イベントの種類でイベントをフィルター処理できます。 また、JSONオブジェクトを データ プロパティの値に使う場合、イベントデータプロパティのフィルター条件を定義することもできます。 リソースプロパティの詳細については、Event Grid REST API のドキュメントをご覧ください。

トピックと関連付けられたイベント サブスクリプションを表す図。

名前空間トピックのサブスクリプションを作成する例については、Publish and consume messages using namespace topics using CLI (CLI を使用して名前空間トピックを使用してメッセージを発行および使用する) をご覧ください。

ネームスペーストピックのイベントサブスクリプションは、カスタム、ドメイン、パートナー、システムトピック(Event Grid Basic)で用いられるモデルと比べて簡略化されたリソースモデルを採用しています。 詳細については、イベント サブスクリプションの作成、表示、および管理に関するページを参照してください。

プル配信

プル配信を使用すると、アプリケーションは Event Grid に接続し、キューに似たセマンティクスを使用してメッセージを読み取ります。 アプリケーションが Event Grid に接続してイベントを使用すると、イベントの消費率とタイミングが制御されます。 コンシューマー アプリケーションは、Event Grid に接続するときにプライベート エンドポイントを使用して、プライベート IP 空間を使用してイベントを読み取ることもできます。

プル配信では、メッセージを読み取り、メッセージの状態を制御するための次の操作がサポートされています: 受信確認リリース拒否ロックの更新。 詳細については、pull delivery overview (プル配信の概要) をご覧ください。

プル配信を使用してイベントを受信するときのデータ シェイプ

プル配信を使用してイベントを配信する場合、Event Grid には、 イベント オブジェクトと 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 を使用して、状態の変化が発生した時点でイベントを送信するようにできます。
  • 外部への呼び出しを行えないアプリケーションがある場合。 たとえば、組織がデータ流出を懸念している場合があります。 ただし、アプリケーションはパブリック エンドポイントを経由でイベントを受信できます。