Azure Event Grid イベント スキーマ

この記事では Event Grid スキーマについて説明します。これは、拡張不能だが完全に機能する独自のイベント形式です。 Event Grid では依然としてこのイベント形式がサポートされており、今後も引き続きサポートされます。 ただし、使用が推奨されているイベント形式は CloudEvents です。 Event Grid 形式を使用するアプリケーションを使用している場合は、Event Grid と、Event Grid でサポートされている CloudEvents 形式との間の変換について説明されている [CloudEvents] セクションの情報が役立つことがあります。

この記事では、Event Grid 形式のプロパティとスキーマについて詳しく説明します。 イベントは、4 つの必須文字列プロパティから構成されます。 プロパティは、すべてのイベントに共通であり、公開元を問いません。 データ オブジェクトには、各公開元に固有のプロパティが含まれています。 システム トピックの場合、これらのプロパティは、リソース プロバイダー (Azure Storage や Azure Event Hubs など) に固有です。

イベント ソースは、複数のイベント オブジェクトを含めることができる配列で Azure Event Grid にイベントを送信します。 Event Grid トピックにイベントを送信するとき、配列の合計サイズは最大 1 MB です。 配列内の各イベントは 1 MB に制限されます。 イベントまたは配列がサイズ制限を超えた場合は、[413 ペイロードが大きすぎます] という応答を受信します。 ただし、操作は 64 KB 単位で課金されます。 そのため、64 KB を超えるイベントでは、複数のイベントが発生したかのように操作の料金が発生します。 たとえば、130 KB のイベントでは、3 つの独立したイベントの場合と同じ操作が発生します。

Event Grid は、1 つのイベントを含む配列でサブスクライバーにイベントを送信します。 この動作は、今後変更される可能性があります。

Event Grid イベントおよび各 Azure パブリッシャーのデータ ペイロードの JSON スキーマは、イベント スキーマ ストアにあります。

イベント スキーマ

すべてのイベント発行元に使用されているプロパティの例を次に示します。

[
  {
    "topic": string,
    "subject": string,
    "id": string,
    "eventType": string,
    "eventTime": string,
    "data":{
      object-unique-to-each-publisher
    },
    "dataVersion": string,
    "metadataVersion": string
  }
]

たとえば、Azure BLOB ストレージ イベントに対して次のようなスキーマが発行されます。

[
  {
    "topic": "/subscriptions/{subscription-id}/resourceGroups/Storage/providers/Microsoft.Storage/storageAccounts/xstoretestaccount",
    "subject": "/blobServices/default/containers/oc2d2817345i200097container/blobs/oc2d2817345i20002296blob",
    "eventType": "Microsoft.Storage.BlobCreated",
    "eventTime": "2017-06-26T18:41:00.9584103Z",
    "id": "831e1650-001e-001b-66ab-eeb76e069631",
    "data": {
      "api": "PutBlockList",
      "clientRequestId": "6d79dbfb-0e37-4fc4-981f-442c9ca65760",
      "requestId": "831e1650-001e-001b-66ab-eeb76e000000",
      "eTag": "0x8D4BCC2E4835CD0",
      "contentType": "application/octet-stream",
      "contentLength": 524288,
      "blobType": "BlockBlob",
      "url": "https://oc2d2817345i60006.blob.core.windows.net/oc2d2817345i200097container/oc2d2817345i20002296blob",
      "sequencer": "00000000000004420000000000028963",
      "storageDiagnostics": {
        "batchId": "b68529f3-68cd-4744-baa4-3c0498ec19f0"
      }
    },
    "dataVersion": "",
    "metadataVersion": "1"
  }
]

イベントのプロパティ

すべてのイベントには、次の同じ最上位レベルのデータが含まれています。

プロパティ タイプ Required Description
topic string いいえ。ただし、追加する場合は、Event Grid トピックの Azure Resource Manager ID と完全に一致させる必要があります。 追加しなかった場合は、Event Grid によってイベントに記録されます。 イベント ソースの完全なリソース パス。 このフィールドは書き込み可能ではありません。 この値は Event Grid によって指定されます。
subject string はい 発行元が定義したイベントの対象のパス。
eventType string はい このイベント ソース用に登録されたイベントの種類のいずれか。
eventTime string はい プロバイダーの UTC 時刻に基づくイベントの生成時刻。
id string はい イベントの一意識別子。
data オブジェクト はい リソース プロバイダーに固有のイベント データ。
dataVersion string いいえ。ただし、空の値が記録されます。 データ オブジェクトのスキーマ バージョン。 スキーマ バージョンは発行元によって定義されます。
metadataVersion string 必須ではありませんが、追加する場合は、Event Grid スキーマの metadataVersion と完全に一致させる必要があります (現在は 1 のみ)。 追加しなかった場合は、Event Grid によってイベントに記録されます。 イベント メタデータのスキーマ バージョン。 最上位プロパティのスキーマは Event Grid によって定義されます。 この値は Event Grid によって指定されます。

データ オブジェクトのプロパティの詳細については、イベント ソースを参照してください。

カスタム トピックの場合、イベントの発行元がデータ オブジェクトを決定します。 最上位レベルのデータには、リソースによって定義された標準のイベントと同じフィールドを含める必要があります。

イベントをカスタム トピックに発行する場合は、サブスクライバーがそのイベントに関心があるかどうかを簡単に知ることができるイベントの件名を作成してください。 サブスクライバーは、その件名を使用してイベントをフィルター処理したり、ルーティングしたりします。 そのイベントが発生したパスを示すことにより、サブスクライバーがそのパスのセグメントでフィルター処理できるように考慮してください。 このパスにより、サブスクライバーはイベントを狭く、または幅広くフィルター処理できます。 たとえば、/A/B/C のように件名に 3 つのセグメント パスを示した場合、サブスクライバーは最初のセグメント /A でフィルター処理して幅広い一連のイベントを取得できます。 これらのサブスクライバーは、/A/B/C/A/D/E などの件名を持つイベントを取得します。 他のサブスクライバーは、/A/B でフィルター処理して、より狭い一連のイベントを取得できます。

場合によっては、件名には発生した事象についてより詳細な情報が必要です。 たとえば、コンテナーにファイルが追加された場合、ストレージ アカウント パブリッシャーは件名 /blobServices/default/containers/<container-name>/blobs/<file> を指定します。 サブスクライバーはパス /blobServices/default/containers/testcontainer でフィルター処理することにより、ストレージ アカウント内の他のコンテナーではなく、そのコンテナーのすべてのイベントを取得できます。 サブスクライバーはまた、テキスト ファイルのみを操作するために、サフィックス .txt でフィルター処理またはルーティングすることもできます。

CloudEvents

CloudEvents は、使用が推奨されているイベント形式です。 Azure Event Grid では、少なくとも CloudEvents JSON 形式に関連する機能への投資が継続されています。 Azure サービスなどの一部のイベント ソースで Event Grid 形式が使用されているという事実を考慮し、CloudEvents 形式と Event Grid 形式を、トピックの入力スキーマとして、およびイベント サブスクリプションの出力スキーマとして使用する場合に、サポートされる変換を理解するのに役立つ次の表を示します。 CloudEvents では、Event Grid スキーマではサポートされていない拡張属性がサポートされているため、CloudEvents を入力スキーマとして使用する場合は Event Grid 出力スキーマを使用できません。

入力スキーマ 出力スキーマ
CloudEvents 形式 CloudEvents 形式
Event Grid 形式 CloudEvents 形式
Event Grid 形式 Event Grid 形式

次のステップ