イベント ドメインを使用してトピックを管理し、イベントを発行するManage topics and publish events using event domains

この記事では、次の方法について説明します。This article shows how to:

  • Event Grid ドメインを作成するCreate an Event Grid domain
  • Event Grid トピックをサブスクライブするSubscribe to event grid topics
  • キーのリストList keys
  • ドメインにイベントを発行するPublish events to a domain

イベント ドメインについて学習するには、「Event Grid トピックを管理するためのイベント ドメインについて」をご覧ください。To learn about event domains, see Understand event domains for managing Event Grid topics.

重要

PowerShell からこの Azure 機能を使用するには、AzureRM モジュールがインストールされている必要があります。Using this Azure feature from PowerShell requires that you have the AzureRM module installed. これは Windows PowerShell 5.x でのみ使用可能な古いモジュールで、重要な更新プログラムが提供されますが、新しい機能は今後追加されません。This is an older module only available for Windows PowerShell 5.x that receives critical updates, but no longer gets new features. Az モジュールがインストールされている場合は、AzureRM もインストールする必要があります。If you have the Az module installed, you will need to install AzureRM as well. AzureRM をインストールするには:To install AzureRM:

  1. Disable-AzAlias を使用して Az の AzureRM の別名を無効にします (有効になっている場合)。Disable AzureRM aliases in Az (if enabled) with Disable-AzAlias. Az がインストールされていない状態または別名が無効な状態でこのコマンドを実行しても問題はありません。Running this command without Az installed or with aliases disabled is harmless.
  2. AzureRM の最新のインストール手順に従います。Follow the latest install instructions for AzureRM. AzureRM がインストールされている場合でも、最新バージョンに更新します。Even if you have AzureRM installed, update to the latest version.

イベント ドメインを作成するCreate an Event Domain

大規模なトピック セットを管理するには、イベント ドメインを作成します。To manage large sets of topics, create an event domain.

Azure CLI では、次を使用します。For Azure CLI, use:

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

PowerShell では、次を使用します。For PowerShell, use:

New-AzureRmEventGridDomain `
  -ResourceGroupName <my-resource-group> `
  -Name <my-domain-name> `
  -Location <location>

正常に作成された場合、次の値が返されます。Successful creation returns the following values:

{
  "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 を書き留めておきます。Note the endpoint and id as they're required to manage the domain and publish events.

トピックへのアクセスを管理するManage access to topics

トピックへのアクセスの管理は、ロールの割り当てを使用して行われます。Managing access to topics is done via role assignment. ロールの割り当てではロールベースのアクセス制御を使用して、Azure リソースに対する操作を、特定のスコープの承認されたユーザーに制限します。Role assignment uses role-based access control to limit operations on Azure resources to authorized users at a certain scope.

Event Grid には、ドメイン内のさまざまなトピックへのアクセスを特定のユーザーに割り当てるために使用できる 2 つの組み込みロールがあります。Event Grid has two built-in roles, which you can use to assign particular users access on various topics within a domain. これらのロールは、サブスクリプションの作成と削除を許可する EventGrid EventSubscription Contributor (Preview) と、イベント サブスクリプションのリストのみを許可する EventGrid EventSubscription Reader (Preview) です。These roles are EventGrid EventSubscription Contributor (Preview), which allows for creation and deletion of subscriptions, and EventGrid EventSubscription Reader (Preview), which only allows for listing of event subscriptions.

次の Azure CLI コマンドでは、alice@contoso.com によるイベント サブスクリプションの作成と削除を、トピック demotopic1 のみに制限します。The following Azure CLI command limits alice@contoso.com to creating and deleting event subscriptions only on topic 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

次の PowerShell コマンドでは、alice@contoso.com によるイベント サブスクリプションの作成と削除を、トピック demotopic1 のみに制限します。The following PowerShell command limits alice@contoso.com to creating and deleting event subscriptions only on topic demotopic1:

New-AzureRmRoleAssignment `
  -SignInName alice@contoso.com `
  -RoleDefinitionName "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 のセキュリティと認証」をご覧ください。For more information about managing access for Event Grid operations, see Event Grid security and authentication.

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

Event Grid サービスでは、ドメイン トピックのイベント サブスクリプションを作成するための呼び出しに基づいて、ドメインで対応するトピックが自動的に作成および管理されます。The Event Grid service automatically creates and manages the corresponding topic in a domain based on the call to create an event subscription for a domain topic. ドメインでトピックを作成する別の手順はありません。There's no separate step to create a topic in a domain. 同様に、トピックの最後のイベント サブスクリプションが削除されたときに、トピックも削除されます。Similarly, when the last event subscription for a topic is deleted, the topic is deleted as well.

ドメインのトピックをサブスクライブすることは、他のすべての Azure リソースをサブスクライブするのと同じです。Subscribing to a topic in a domain is the same as subscribing to any other Azure resource. ソース リソース ID としては、前にドメインを作成するときに返されたイベント ドメイン ID を指定します。For the source resource ID, specify the event domain ID returned when creating the domain earlier. サブスクライブするトピックを指定するには、ソース リソース ID の末尾に /topics/<my-topic> を追加します。To specify the topic you want to subscribe to, add /topics/<my-topic> to the end of the source resource ID. ドメイン内のすべてのイベントを受け取るドメイン スコープのイベント サブスクリプションを作成するには、トピックを指定せずに、イベント ドメイン ID を指定します。To create a domain scope event subscription that receives all events in the domain, specify the event domain ID without specifying any topics.

通常、前のセクションでアクセスを許可されたユーザーが、サブスクリプションを作成します。Typically, the user you granted access to in the preceding section would create the subscription. この記事では、簡単にするため自分でサブスクリプションを作成します。To simplify this article, you create the subscription.

Azure CLI では、次を使用します。For Azure CLI, use:

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

PowerShell では、次を使用します。For PowerShell, use:

New-AzureRmEventGridSubscription `
  -ResourceId "/subscriptions/<sub-id>/resourceGroups/<my-resource-group>/providers/Microsoft.EventGrid/domains/<my-domain-name>/topics/demotopic1" `
  -EventSubscriptionName <event-subscription> `
  -Endpoint https://contoso.azurewebsites.net/api/updates

イベントをサブスクライブするテスト エンドポイントが必要な場合は、受信イベントを表示するビルド済みの Web アプリをいつでもデプロイすることができます。If you need a test endpoint to subscribe your events to, you can always deploy a pre-built web app that displays the incoming events. https://<your-site-name>.azurewebsites.net/api/updates のテスト Web サイトにイベントを送信できます。You can send your events to your test website at https://<your-site-name>.azurewebsites.net/api/updates.

トピックに設定されているアクセス許可は Azure Active Directory で格納され、明示的に削除する必要があります。Permissions that are set for a topic are stored in Azure Active Directory and must be deleted explicitly. ユーザーにトピックへの書き込みアクセス権限がある場合、イベント サブスクリプションを削除しても、イベント サブスクリプションを作成するためのアクセスは取り消されません。Deleting an event subscription won't revoke a users access to create event subscriptions if they have write access on a topic.

Event Grid ドメインにイベントを発行するPublish events to an Event Grid Domain

ドメインにイベントを発行することは、カスタム トピックに発行することと同じです。Publishing events to a domain is the same as publishing to a custom topic. ただし、カスタム トピックに発行するのではなく、すべてのイベントをドメイン エンドポイントに発行します。However, instead of publishing to the custom topic, you publish all events to the domain endpoint. JSON イベント データでは、イベントの送信先のトピックを指定します。In the JSON event data, you specify the topic you wish the events to go to. 次のイベントの配列では、"id": "1111" のイベントが demotopic1 に送信され、"id": "2222" のイベントはトピック demotopic2 に送信されます。The following array of events would result in event with "id": "1111" to topic demotopic1 while event with "id": "2222" would be sent to topic 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 を使用してドメイン エンドポイントを取得するには、以下を使用します。To get the domain endpoint with Azure CLI, use

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

ドメインのキーを取得するには、以下を使用します。To get the keys for a domain, use:

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

PowerShell を使用してドメイン エンドポイントを取得するには、以下を使用します。To get the domain endpoint with PowerShell, use

Get-AzureRmEventGridDomain `
  -ResourceGroupName <my-resource-group> `
  -Name <my-domain>

ドメインのキーを取得するには、以下を使用します。To get the keys for a domain, use:

Get-AzureRmEventGridDomainKey `
  -ResourceGroupName <my-resource-group> `
  -Name <my-domain>

次に、HTTP POST を実行するための任意のメソッドを使用して、Event Grid ドメインにイベントを発行します。And then use your favorite method of making an HTTP POST to publish your events to your Event Grid domain.

トピックまたはサブスクリプションの検索一覧Search lists of topics or subscriptions

多数のトピックまたはサブスクリプションの検索および管理を行うために、Event Grid の API は改ページの一覧表示をサポートしています。In order to make searching and managing of large numbers of topics or subscriptions, Event Grid's APIs support list an pagination.

CLI の使用Using CLI

これを使用するには、Azure CLI Event Grid 拡張機能バージョン 0.4.1 以降を使用していることを確認してください。To use it make sure you’re using the Azure CLI Event Grid extension version 0.4.1 or newer.

# If you haven't already installed the extension, do it now.
# This extension is required for preview features.
az extension add --name eventgrid

az eventgrid topic list \
    --odata-query "contains(name, 'my-test-filter')"

次の手順Next steps