快速入门:使用 Azure CLI 和事件网格将自定义事件路由到 Web 终结点

在这个快速入门中,你使用Azure CLI在Azure 事件网格中创建自定义主题,订阅该自定义主题,并触发一个示例事件以查看结果。

通常,你会将事件发送到处理事件数据并执行操作的终结点。 不过,为了简化这个快速入门,你需要将示例事件发送到一个收集并显示消息的网页应用。 完成后,你会在网页应用中看到事件数据,如下图所示:

屏幕截图显示带有示例事件的事件网格查看器示例。

如果您没有 Azure 试用订阅,请在开始之前创建 试用订阅

先决条件

  • 如需在本地运行 CLI 参考命令,请安装 Azure CLI。 如果在 Windows 或 macOS 上运行,请考虑在 Docker 容器中运行 Azure CLI。 有关详细信息,请参阅如何在 Docker 容器中运行 Azure CLI

    • 如果使用的是本地安装,请使用 az login 命令登录到 Azure CLI。 若要完成身份验证过程,请遵循终端中显示的步骤。 有关其他登录选项,请参阅使用 Azure CLI 登录

    • 出现提示时,请在首次使用时安装 Azure CLI 扩展。 有关扩展详细信息,请参阅使用 Azure CLI 的扩展

    • 运行 az version 以查找安装的版本和依赖库。 若要升级到最新版本,请运行 az upgrade

  • 此快速入门要求使用 2.0.70 或更高版本的 Azure CLI。
  • 如果你是 Azure 事件网格 的新手,在开始这个快速入门之前,请先了解 What is Azure 事件网格 来了解该服务的概览。

创建资源组

事件网格主题是Azure资源,必须放置在Azure资源组中。 资源组是一个逻辑集合,用于部署和管理 Azure 资源。

使用“az group create”命令创建资源组。 以下示例在“chinanorth2”位置创建名为“gridResourceGroup”的资源组。 如果你愿意,可以更改资源组的名称和位置。

az group create --name gridResourceGroup --location chinanorth2

启用事件网格资源提供程序

  1. 如果这是首次在 Azure 订阅中使用事件网格,则可能需要注册事件网格资源提供程序。 运行以下命令,注册提供程序:

    az provider register --namespace Microsoft.EventGrid
    
  2. 完成注册可能需要一些时间。 若要查看状态,请运行以下命令:

    az provider show --namespace Microsoft.EventGrid --query "registrationState"
    

    registrationStateRegistered 后,即可继续。

创建自定义主题

事件网格主题提供用户定义的终结点,可向其发布事件。 以下示例在资源组中创建自定义主题。 将 <your-topic-name> 替换为你的主题的唯一名称。 自定义主题名称必须唯一,因为它是域名系统 (DNS) 条目的一部分。 此外,字符必须在3到50个字符之间,且仅包含数值 a-z、A-Z、0-9 和“-”

  1. 复制以下命令,指定主题名称,然后选择 回车 以执行该命令。

    topicname=<your-topic-name>
    
  2. 使用 az eventgrid topic create 命令创建自定义主题。

    az eventgrid topic create --name $topicname -l chinanorth2 -g gridResourceGroup
    

创建消息终结点

在订阅自定义主题之前,创建事件消息的终结点。 通常情况下,终结点基于事件数据执行操作。 为了简化这个快速启动,可以部署一个 预构建的网页应用 ,显示事件消息。 所部署的解决方案包括应用服务计划、应用服务 Web 应用和 GitHub 中的源代码。

  1. 复制以下命令,指定网页应用名称(事件网格查看器示例),然后选择 回车 执行该命令。 将 <your-site-name> 替换为 Web 应用的唯一名称。 Web 应用名称必须唯一,因为它是 DNS 条目的一部分。

    sitename=<your-site-name>
    
  2. 运行 az deployment group create,使用 Azure 资源管理器 模板部署 Web 应用。

    az deployment group create \
      --resource-group gridResourceGroup \
      --template-uri "https://raw.githubusercontent.com/Azure-Samples/azure-event-grid-viewer/main/azuredeploy.json" \
      --parameters siteName=$sitename hostingPlanName=viewerhost
    

部署可能需要几分钟时间才能完成。 部署成功后,请查看 Web 应用以确保它正在运行。 在 Web 浏览器中导航到 https://<your-site-name>.chinacloudsites.cn

你应该会看到网站上没有显示任何消息。

订阅自定义主题

订阅事件网格主题,以告知事件网格要跟踪哪些事件,以及要将这些事件发送到何处。 以下示例将订阅所创建的自定义主题,并将 Web 应用中的 URL 作为事件通知的终结点传递。

Web 应用的终结点必须包括后缀 /api/updates/

  1. 复制以下命令,替换 $sitename 为你在前一步创建的网页应用名称,然后选择 回车 键执行该命令。

    endpoint=https://$sitename.chinacloudsites.cn/api/updates
    
  2. 运行以下命令以获取所创建主题的资源 ID。

    topicresourceid=$(az eventgrid topic show --resource-group gridResourceGroup --name $topicname --query "id" --output tsv)
    
  3. 运行以下命令,使用终结点创建自定义主题的订阅。

    az eventgrid event-subscription create \
      --source-resource-id $topicresourceid \
      --name demoViewerSub \
      --endpoint $endpoint
    

    再次查看 Web 应用,并注意现已向该应用发送了订阅验证事件。 选择眼睛图标以展开事件数据。 事件网格发送验证事件,以便终结点可以验证它是否想要接收事件数据。 Web 应用包含用于验证订阅的代码。

    截图显示了事件网格查看器示例和订阅验证事件。

向自定义主题发送事件

让我们触发一个事件,看看事件网格如何将消息分发到终结点。 首先,获取自定义主题的URL和密钥。

endpoint=$(az eventgrid topic show --name $topicname -g gridResourceGroup --query "endpoint" --output tsv)
key=$(az eventgrid topic key list --name $topicname -g gridResourceGroup --query "key1" --output tsv)

为了简化本快速入门,请使用示例事件数据并将其发送到自定义主题。 通常,应用程序或 Azure 服务发送事件数据。 以下示例创建示例事件数据:

event='[ {"id": "'"$RANDOM"'", "eventType": "recordInserted", "subject": "myapp/vehicles/motorcycles", "eventTime": "'`date +%Y-%m-%dT%H:%M:%S%z`'", "data":{ "make": "Ducati", "model": "Monster"},"dataVersion": "1.0"} ]'

JSON 的 data 元素是事件的有效负载。 可以将任何格式正确的 JSON 置于此字段中。 也可将主题字段用于高级路由和筛选。

cURL 是一个发送 HTTP 请求的工具。 在这个快速入门中,使用 cURL 向主题发送事件。

curl -X POST -H "aeg-sas-key: $key" -d "$event" $endpoint

你已触发事件,并且事件网格已将消息发送到订阅时配置的终结点。 查看 Web 应用以查看刚刚发送的事件。

[{
  "id": "1807",
  "eventType": "recordInserted",
  "subject": "myapp/vehicles/motorcycles",
  "eventTime": "2017-08-10T21:03:07+00:00",
  "data": {
    "make": "Ducati",
    "model": "Monster"
  },
  "dataVersion": "1.0",
  "metadataVersion": "1",
  "topic": "/subscriptions/{subscription-id}/resourceGroups/{resource-group}/providers/Microsoft.EventGrid/topics/{topic}"
}]

清理资源

如果你打算继续使用这个活动或活动查看器应用,不要清理你在快速入门中创建的资源。 否则,请使用以下命令删除你在快速入门中创建的资源。

az group delete --name gridResourceGroup --yes --no-wait

了解如何创建主题和事件订阅以后,即可进一步学习事件网格的功能:

想了解如何在不同编程语言中发布事件到事件网格,以及从事件网格中获取事件,请参见以下示例: