Azure 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"
  }
]

イベントのプロパティ

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

プロパティ Type 必須 説明
topic string いいえ。ただし、追加する場合は、Event Grid トピックの Azure Resource Manager ID と完全に一致させる必要があります。 追加しなかった場合は、Event Grid によってイベントに記録されます。 イベント ソースの完全なリソース パス。 このフィールドは書き込み可能ではありません。 この値は Event Grid によって指定されます。
subject string はい 発行元が定義したイベントの対象のパス。
eventType string はい このイベント ソース用に登録されたイベントの種類のいずれか。
eventTime string はい プロバイダーの UTC 時刻に基づくイベントの生成時刻。
id string はい イベントの一意識別子。
data object いいえ リソース プロバイダーに固有のイベント データ。
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 でフィルター処理またはルーティングすることもできます。

次のステップ