イベント ドメインを使用してトピックを管理し、イベントを発行する

この記事では、次の方法について説明します。

  • Event Grid ドメインを作成する
  • Event Grid トピックをサブスクライブする
  • キーのリスト
  • ドメインにイベントを発行する

イベント ドメインについて学習するには、「Event Grid トピックを管理するためのイベント ドメインについて」をご覧ください。

イベント ドメインを作成する

大規模なトピック セットを管理するには、イベント ドメインを作成します。

az eventgrid domain create \
  -g <my-resource-group> \
  --name <my-domain-name> \
  -l <location>

正常に作成された場合、次の値が返されます。

{
  "endpoint": "https://<my-domain-name>.westus2-1.eventgrid.azure.net/api/events",
  "id": "/subscriptions/<sub-id>/resourceGroups/<my-resource-group>/providers/Microsoft.EventGrid/domains/<my-domain-name>",
  "inputSchema": "EventGridSchema",
  "inputSchemaMapping": null,
  "location": "westus2",
  "name": "<my-domain-name>",
  "provisioningState": "Succeeded",
  "resourceGroup": "<my-resource-group>",
  "tags": null,
  "type": "Microsoft.EventGrid/domains"
}

ドメインを管理してイベントを発行するために必要なので、endpointid を書き留めておきます。

トピックへのアクセスを管理する

トピックへのアクセスの管理は、ロールの割り当てを使用して行われます。 ロールの割り当てでは Azure ロールベースのアクセス制御を使用して、Azure リソースに対する操作を、特定のスコープの認可されたユーザーに制限します。

Event Grid には、ドメイン内のさまざまなトピックへのアクセスを特定のユーザーに割り当てるために使用できる 2 つの組み込みロールがあります。 これらのロールは、サブスクリプションの作成と削除を許可する EventGrid EventSubscription Contributor (Preview) と、イベント サブスクリプションのリストのみを許可する EventGrid EventSubscription Reader (Preview) です。

次の Azure CLI コマンドでは、alice@contoso.com によるイベント サブスクリプションの作成と削除を、トピック demotopic1 のみに制限します。

az role assignment create \
  --assignee alice@contoso.com \
  --role "EventGrid EventSubscription Contributor (Preview)" \
  --scope /subscriptions/<sub-id>/resourceGroups/<my-resource-group>/providers/Microsoft.EventGrid/domains/<my-domain-name>/topics/demotopic1

Event Grid の操作に対するアクセスの管理について詳しくは、「Event Grid のセキュリティと認証」をご覧ください。

トピックとサブスクリプションを作成する

Event Grid サービスでは、ドメイン トピックのイベント サブスクリプションを作成するための呼び出しに基づいて、ドメインで対応するトピックが自動的に作成および管理されます。 ドメインでトピックを作成する別の手順はありません。 同様に、トピックの最後のイベント サブスクリプションが削除されたときに、トピックも削除されます。

ドメインのトピックをサブスクライブすることは、他のすべての Azure リソースをサブスクライブするのと同じです。 ソース リソース ID としては、前にドメインを作成するときに返されたイベント ドメイン ID を指定します。 サブスクライブするトピックを指定するには、ソース リソース ID の末尾に /topics/<my-topic> を追加します。 ドメイン内のすべてのイベントを受け取るドメイン スコープのイベント サブスクリプションを作成するには、トピックを指定せずに、イベント ドメイン ID を指定します。

通常、前のセクションでアクセスを許可されたユーザーが、サブスクリプションを作成します。 この記事では、簡単にするため自分でサブスクリプションを作成します。

az eventgrid event-subscription create \
  --name <event-subscription> \
  --source-resource-id "/subscriptions/<sub-id>/resourceGroups/<my-resource-group>/providers/Microsoft.EventGrid/domains/<my-domain-name>/topics/demotopic1" \
  --endpoint https://contoso.azurewebsites.net/api/updates

イベントをサブスクライブするテスト エンドポイントが必要な場合は、受信イベントを表示するビルド済みの Web アプリをいつでもデプロイすることができます。 https://<your-site-name>.azurewebsites.net/api/updates のテスト Web サイトにイベントを送信できます。

Azure にデプロイするボタン。

トピックに設定されているアクセス許可は Azure Active Directory で格納され、明示的に削除する必要があります。 ユーザーにトピックへの書き込みアクセス権がある場合、イベント サブスクリプションを削除しても、イベント サブスクリプションを作成するためのアクセス権は取り消されません。

Event Grid ドメインにイベントを発行する

ドメインにイベントを発行することは、カスタム トピックに発行することと同じです。 ただし、カスタム トピックに発行するのではなく、すべてのイベントをドメイン エンドポイントに発行します。 JSON イベント データでは、イベントの送信先のトピックを指定します。 次のイベントの配列では、"id": "1111" のイベントが demotopic1 に送信され、"id": "2222" のイベントはトピック demotopic2 に送信されます。

[{
  "topic": "demotopic1",
  "id": "1111",
  "eventType": "maintenanceRequested",
  "subject": "myapp/vehicles/diggers",
  "eventTime": "2018-10-30T21:03:07+00:00",
  "data": {
    "make": "Contoso",
    "model": "Small Digger"
  },
  "dataVersion": "1.0"
},
{
  "topic": "demotopic2",
  "id": "2222",
  "eventType": "maintenanceCompleted",
  "subject": "myapp/vehicles/tractors",
  "eventTime": "2018-10-30T21:04:12+00:00",
  "data": {
    "make": "Contoso",
    "model": "Big Tractor"
  },
  "dataVersion": "1.0"
}]

Azure CLI を使用してドメイン エンドポイントを取得するには、以下を使用します。

az eventgrid domain show \
  -g <my-resource-group> \
  -n <my-domain>

ドメインのキーを取得するには、以下を使用します。

az eventgrid domain key list \
  -g <my-resource-group> \
  -n <my-domain>

次に、HTTP POST を実行するための任意のメソッドを使用して、Event Grid ドメインにイベントを発行します。

トピックまたはサブスクリプションの検索一覧

多数のトピックまたはサブスクリプションの検索および管理を行うために、Event Grid の API では一覧表示と改ページがサポートされています。

CLI の使用

たとえば、次のコマンドを実行すると、mytopic を含む名前を持つすべてのトピックが一覧表示されます。

az eventgrid topic list --odata-query "contains(name, 'mytopic')"

このコマンドの詳細については、「az eventgrid topic list」を参照してください。

次のステップ