イベント ドメインを使用してトピックを管理し、イベントを発行する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 the AzureRM module installed. これはもう新しい機能が追加されることのない古いモジュールであり、Windows PowerShell 5.1 でのみ使用可能です。This is an older module only available for Windows PowerShell 5.1 that no longer receives new features. 同じバージョンの PowerShell でインストールした場合、AzAzureRM のモジュールは同時に使用 "できません"。The Az and AzureRM modules are not compatible when installed for the same versions of PowerShell. 両方のバージョンが必要な場合:If you need both versions:

  1. PowerShell 5.1 セッションで Az モジュールをアンインストールしますUninstall the Az module from a PowerShell 5.1 session.
  2. PowerShell 5.1 セッションで AzureRM モジュールをインストールしますInstall the AzureRM module from a PowerShell 5.1 session.
  3. PowerShell Core 6.x 以降をダウンロードしてインストールしますDownload and install PowerShell Core 6.x or later.
  4. PowerShell Core セッションで Az モジュールをインストールしますInstall the Az module in a PowerShell Core session.

プレビュー機能のインストールInstall preview feature

この機能はプレビュー段階にあります。This feature is in preview. これを使用するには、プレビュー拡張機能またはモジュールをインストールする必要があります。To use it, you must install a preview extension or module.

Azure CLI 用の拡張機能のインストールInstall extension for Azure CLI

Azure CLI の場合は、Event Grid 拡張機能が必要です。For Azure CLI, you need the Event Grid extension.

CloudShell の場合:In CloudShell:

  • 拡張機能を以前にインストールしている場合は、az extension update -n eventgrid で拡張機能を更新します。If you've installed the extension previously, update it az extension update -n eventgrid
  • 拡張機能を以前にインストールしていない場合は、az extension add -n eventgrid で拡張機能をインストールします。If you haven't installed the extension previously, install it az extension add -n eventgrid

ローカル インストールの場合:For a local installation:

  1. Azure CLI のインストールを実行します。Install the Azure CLI. az --version をチェックして、最新バージョンがあることを確認します。Make sure that you have the latest version, by checking with az --version.
  2. az extension remove -n eventgrid で以前のバージョンの拡張機能をアンインストールします。Uninstall previous versions of the extension az extension remove -n eventgrid
  3. az extension add -n eventgrideventgrid 拡張機能をインストールしますInstall the eventgrid extension with az extension add -n eventgrid

PowerShell 用のモジュールのインストールInstall module for PowerShell

PowerShell の場合は、AzureRM.EventGrid モジュールが必要です。For PowerShell, you need the AzureRM.EventGrid module.

CloudShell の場合:In CloudShell:

  • モジュールをインストールします。Install-Module -Name AzureRM.EventGrid -AllowPrerelease -Force -Repository PSGalleryInstall the module Install-Module -Name AzureRM.EventGrid -AllowPrerelease -Force -Repository PSGallery

ローカル インストールの場合:For a local installation:

  1. 管理者として PowerShell コンソールを開きます。Open PowerShell console as administrator
  2. モジュールをインストールします。Install-Module -Name AzureRM.EventGrid -AllowPrerelease -Force -Repository PSGalleryInstall the module Install-Module -Name AzureRM.EventGrid -AllowPrerelease -Force -Repository PSGallery

-AllowPrereleaseパラメーターが使用可能でない場合は、次のステップを実行します。If the -AllowPrerelease parameter isn't available, use the following steps:

  1. Install-Module PowerShellGet -Force を実行します。Run Install-Module PowerShellGet -Force
  2. Update-Module PowerShellGet を実行します。Run Update-Module PowerShellGet
  3. PowerShell コンソールを閉じます。Close the PowerShell console
  4. 管理者として PowerShell を再起動します。Restart PowerShell as administrator
  5. モジュールをインストールします。Install-Module -Name AzureRM.EventGrid -AllowPrerelease -Force -Repository PSGalleryInstall the module Install-Module -Name AzureRM.EventGrid -AllowPrerelease -Force -Repository PSGallery

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

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

# 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 domain create \
  -g <my-resource-group> \
  --name <my-domain-name> \
  -l <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

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.

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 アプリをいつでもデプロイすることができます。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>

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

次の手順Next steps