快速入门:使用 PowerShell 和事件网格将自定义事件路由到 Web 终结点Quickstart: Route custom events to web endpoint with PowerShell and Event Grid

Azure 事件网格是针对云的事件处理服务。Azure Event Grid is an eventing service for the cloud. 在本文中,请使用 Azure PowerShell 创建一个自定义主题,然后订阅该主题,再触发可查看结果的事件。In this article, you use the Azure PowerShell to create a custom topic, subscribe to the topic, and trigger the event to view the result. 通常,你会将事件发送到处理事件数据并执行操作的终结点。Typically, you send events to an endpoint that processes the event data and takes actions. 但是,为了简化本文,你将事件发送到收集并显示消息的 Web 应用。However, to simplify this article, you send the events to a web app that collects and displays the messages.

完成后即可看到事件数据已发送到 Web 应用。When you're finished, you see that the event data has been sent to the web app.



本文已经过更新,以便使用 Azure Az PowerShell 模块。This article has been updated to use the Azure Az PowerShell module. 若要与 Azure 交互,建议使用的 PowerShell 模块是 Az PowerShell 模块。The Az PowerShell module is the recommended PowerShell module for interacting with Azure. 若要开始使用 Az PowerShell 模块,请参阅安装 Azure PowerShellTo get started with the Az PowerShell module, see Install Azure PowerShell. 若要了解如何迁移到 Az PowerShell 模块,请参阅 将 Azure PowerShell 从 AzureRM 迁移到 AzTo learn how to migrate to the Az PowerShell module, see Migrate Azure PowerShell from AzureRM to Az.

如果没有 Azure 订阅,可在开始前创建一个试用帐户If you don't have an Azure subscription, create a trial account before you begin.

本文要求运行最新版本的 Azure PowerShell。This article requires that you are running the latest version of Azure PowerShell. 如需进行安装或升级,请参阅安装和配置 Azure PowerShellIf you need to install or upgrade, see Install and configure Azure PowerShell.

创建资源组Create a resource group

事件网格主题是 Azure 资源,必须放置在 Azure 资源组中。Event Grid topics are Azure resources, and must be placed in an Azure resource group. 该资源组是在其中部署和管理 Azure 资源的逻辑集合。The resource group is a logical collection into which Azure resources are deployed and managed.

使用 New-AzResourceGroup 命令创建资源组。Create a resource group with the New-AzResourceGroup command.

以下示例在“chinanorth2”位置创建名为“gridResourceGroup”的资源组。The following example creates a resource group named gridResourceGroup in the chinanorth2 location.

New-AzResourceGroup -Name gridResourceGroup -Location chinanorth2

启用事件网格资源提供程序Enable Event Grid resource provider

如果以前未在 Azure 订阅中使用过事件网格,则可能需要注册事件网格资源提供程序。If you haven't previously used Event Grid in your Azure subscription, you may need to register the Event Grid resource provider. 运行以下命令:Run the following command:

Register-AzResourceProvider -ProviderNamespace Microsoft.EventGrid

完成注册可能需要一些时间。It may take a moment for the registration to finish. 若要检查状态,请运行:To check the status, run:

Get-AzResourceProvider -ProviderNamespace Microsoft.EventGrid

RegistrationStatusRegistered 后,即可继续。When RegistrationStatus is Registered, you're ready to continue.

创建自定义主题Create a custom topic

事件网格主题提供用户定义的终结点,可向其发布事件。An event grid topic provides a user-defined endpoint that you post your events to. 以下示例在资源组中创建自定义主题。The following example creates the custom topic in your resource group. 用主题的唯一名称替换 <your-topic-name>Replace <your-topic-name> with a unique name for your topic. 主题名称必须唯一,因为它是 DNS 条目的一部分。The topic name must be unique because it's part of the DNS entry. 此外,它必须介于 3 到 50 个字符之间,并且只包含值 a-z、A-Z、0-9 和“-”Additionally, it must be between 3-50 characters and contain only values a-z, A-Z, 0-9, and "-"


New-AzEventGridTopic -ResourceGroupName gridResourceGroup -Location chinanorth2 -Name $topicname

创建消息终结点Create a message endpoint

在订阅主题之前,让我们创建事件消息的终结点。Before subscribing to the topic, let's create the endpoint for the event message. 通常情况下,终结点基于事件数据执行操作。Typically, the endpoint takes actions based on the event data. 为了简化此快速入门,将部署用于显示事件消息的预建的 Web 应用To simplify this quickstart, you deploy a pre-built web app that displays the event messages. 所部署的解决方案包括应用服务计划、应用服务 Web 应用和 GitHub 中的源代码。The deployed solution includes an App Service plan, an App Service web app, and source code from GitHub.

<your-site-name> 替换为 Web 应用的唯一名称。Replace <your-site-name> with a unique name for your web app. Web 应用名称必须唯一,因为它是 DNS 条目的一部分。The web app name must be unique because it's part of the DNS entry.


New-AzResourceGroupDeployment `
  -ResourceGroupName gridResourceGroup `
  -TemplateUri "https://raw.githubusercontent.com/Azure-Samples/azure-event-grid-viewer/master/azuredeploy.json" `
  -siteName $sitename `
  -hostingPlanName viewerhost

部署可能需要几分钟才能完成。The deployment may take a few minutes to complete. 部署成功后,请查看 Web 应用以确保它正在运行。After the deployment has succeeded, view your web app to make sure it's running. 在 Web 浏览器中导航到 https://<your-site-name>.chinacloudsites.cnIn a web browser, navigate to: https://<your-site-name>.chinacloudsites.cn

应会看到站点上当前未显示任何消息。You should see the site with no messages currently displayed.

订阅主题Subscribe to a topic

订阅主题,以告知事件网格要跟踪哪些事件以及要将这些事件发送到哪个位置。You subscribe to a topic to tell Event Grid which events you want to track and where to send those events. 以下示例将订阅所创建的主题,并将 Web 应用中的 URL 作为事件通知的终结点传递。The following example subscribes to the topic you created, and passes the URL from your web app as the endpoint for event notification.

Web 应用的终结点必须包括后缀 /api/updates/The endpoint for your web app must include the suffix /api/updates/.


New-AzEventGridSubscription `
  -EventSubscriptionName demoViewerSub `
  -Endpoint $endpoint `
  -ResourceGroupName gridResourceGroup `
  -TopicName $topicname

再次查看 Web 应用,并注意现已向该应用发送了订阅验证事件。View your web app again, and notice that a subscription validation event has been sent to it. 选择眼睛图标以展开事件数据。Select the eye icon to expand the event data. 事件网格发送验证事件,以便终结点可以验证它是否想要接收事件数据。Event Grid sends the validation event so the endpoint can verify that it wants to receive event data. Web 应用包含用于验证订阅的代码。The web app includes code to validate the subscription.


向主题发送事件Send an event to your topic

让我们触发一个事件,看看事件网格如何将消息分发到终结点。Let's trigger an event to see how Event Grid distributes the message to your endpoint. 首先,让我们获取主题的 URL 和密钥。First, let's get the URL and key for the topic.

$endpoint = (Get-AzEventGridTopic -ResourceGroupName gridResourceGroup -Name $topicname).Endpoint
$keys = Get-AzEventGridTopicKey -ResourceGroupName gridResourceGroup -Name $topicname

在本文中,为简便起见,请将示例事件数据设置为发送到自定义主题。To simplify this article, let's set up sample event data to send to the custom topic. 通常情况下,应用程序或 Azure 服务会发送事件数据。Typically, an application or Azure service would send the event data. 以下示例使用 Hashtable 来构造事件的数据 htbody,然后将其转换为正确格式的 JSON 有效负载对象 $bodyThe following example uses Hashtable to construct the event's data htbody and then coverts it to well-formed JSON payload object $body:

$eventID = Get-Random 99999

#Date format should be SortableDateTimePattern (ISO 8601)
$eventDate = Get-Date -Format s

#Construct body using Hashtable
$htbody = @{
    id= $eventID
    eventTime= $eventDate   
    data= @{

#Use ConvertTo-Json to convert event body from Hashtable to JSON Object
#Append square brackets to the converted JSON payload since they are expected in the event's JSON payload syntax
$body = "["+(ConvertTo-Json $htbody)+"]"

如果查看 $body,则可看到完整的事件。If you view $body, you see the full event. JSON 的 data 元素是事件的有效负载。The data element of the JSON is the payload of your event. 可以将任何格式正确的 JSON 置于此字段中。Any well-formed JSON can go in this field. 也可将主题字段用于高级路由和筛选。You can also use the subject field for advanced routing and filtering.

现在,请向主题发送事件。Now, send the event to your topic.

Invoke-WebRequest -Uri $endpoint -Method POST -Body $body -Headers @{"aeg-sas-key" = $keys.Key1}

现已触发事件,并且事件网格已将消息发送到订阅时配置的终结点。You've triggered the event, and Event Grid sent the message to the endpoint you configured when subscribing. 查看 Web 应用以查看刚刚发送的事件。View your web app to see the event you just sent.

  "id": "1807",
  "eventType": "recordInserted",
  "subject": "myapp/vehicles/motorcycles",
  "eventTime": "2018-01-25T15:58:13",
  "data": {
    "make": "Ducati",
    "model": "Monster"
  "dataVersion": "1.0",
  "metadataVersion": "1",
  "topic": "/subscriptions/{subscription-id}/resourceGroups/{resource-group}/providers/Microsoft.EventGrid/topics/{topic}"

清理资源Clean up resources

如果打算继续处理此事件或事件查看器应用,请不要清除本文中创建的资源。If you plan to continue working with this event or the event viewer app, don't clean up the resources created in this article. 否则,请使用以下命令删除本文中创建的资源。Otherwise, use the following command to delete the resources you created in this article.

Remove-AzResourceGroup -Name gridResourceGroup

后续步骤Next steps

了解如何创建主题和事件订阅以后,即可进一步学习事件网格的功能:Now that you know how to create topics and event subscriptions, learn more about what Event Grid can help you do: