快速入门:使用事件网格将自定义事件路由到 Azure 函数

Azure 事件网格是一项用于云的事件处理服务, Azure Functions 是受支持的事件处理程序之一。 在本文中,将使用 Azure 门户创建一个自定义主题,然后订阅该自定义主题,再触发可查看结果的事件。 将事件发送至 Azure 函数。

如果没有 Azure 订阅,可在开始前创建一个试用帐户

创建 Azure 函数应用

  1. 登录 Azure 门户

  2. 在左侧导航菜单中,选择“所有服务”。

  3. 在“类别”列表中选择“计算”。

  4. 将鼠标悬停(不选择)在“函数应用”上,然后选择“+”。

    Screenshot showing the select of Create link for a Function App.

  5. 在创建函数应用向导的“基本信息”页上,执行以下步骤:

    1. 选择要在其中创建函数应用的 Azure 订阅。

    2. 创建新的资源组,或选择现有资源组。

    3. 指定函数应用的名称。

    4. 为“运行时堆栈”选择“.NET”。

    5. 选择离你最近的区域。

    6. 在页面底部选择“下一步: 存储”

      Screenshot showing the Basics tab of the Create Function App page.

  6. 在“存储”页上,创建新的存储帐户或选择要与函数应用关联的现有存储帐户,然后选择页面底部的“查看 + 创建”。

    Screenshot showing the Storage tab of the Create Function App page.

  7. 在“查看 + 创建”页上,查看设置,然后选择页面底部的“创建”以创建函数应用。

  8. 部署成功后,选择“转到资源”以导航到函数应用的主页。

创建函数

在订阅自定义主题之前,创建一个函数来处理事件。

  1. 在“函数应用”页上,选择右窗格中的“在 Azure 门户中创建”链接。

    Screenshot showing the selection of Create function link.

  2. 在“创建函数”页上执行以下步骤:

    1. 在“选择模板”部分的筛选器或搜索框中,键入“Azure 事件网格触发器”。

    2. 在模板列表中,选择“Azure 事件网格触发器”模板。

    3. 在底部窗格的“模板详细信息”部分,输入函数的名称。 本示例中为 HandleEventsFunc。

    4. 选择创建

      Screenshot showing select Event Grid trigger.

  3. HandleEventsFunc函数页上,选择左侧导航菜单上的“代码 + 测试”,将代码替换为以下代码,然后在命令栏上选择“保存”。

    #r "Azure.Messaging.EventGrid"
    #r "System.Memory.Data"
    
    using Azure.Messaging.EventGrid;
    using System;
    
    public static void Run(EventGridEvent eventGridEvent, ILogger log)
    {
        log.LogInformation(eventGridEvent.Data.ToString());
    }        
    

    Image showing the selection Code + Test menu for an Azure function.

  4. 选择左侧菜单的“监视”,并使浏览器的此窗口或选项卡保持打开状态,以便可以查看收到的事件信息。

    Screenshot showing the Monitor view the Azure function.

创建自定义主题

事件网格主题提供用户定义的终结点,可向其发布事件。

  1. 在 Web 浏览器窗口的新选项卡上,登录到 Azure 门户

  2. 在主题的搜索栏中,搜索“事件网格主题”,然后选择“事件网格主题”。

    Image showing the selection of Event Grid topics.

  3. 在“事件网格主题”页上的命令栏中选择“+ 创建”。

    Screenshot showing the Create button to create an Event Grid topic.

  4. 在“创建主题”页上执行以下步骤:

    1. 选择 Azure 订阅

    2. 选择与前面的步骤一致的资源组。

    3. 为自定义主题提供唯一的名称。 主题名称必须唯一,因为它由 DNS 条目表示。 请不要使用图中所示的名称。 而是创建自己的名称 - 它必须介于 3 到 50 个字符之间,并且只包含值 a-z、A-Z、0-9 和“-”。

    4. 选择事件网格主题的位置。

    5. 选择“查看 + 创建”。

      Screenshot showing the Create Topic page.

    6. 在“查看 + 创建”页上查看设置,然后选择“创建” 。

  5. 创建自定义主题后,选择“转到资源”链接以查看创建的主题的以下“事件网格主题”页。

    Image showing the home page for your Event Grid custom topic.

订阅自定义主题

订阅事件网格主题,以告知事件网格你要跟踪哪些事件,以及要将事件发送到何处。

  1. 现在,请在自定义主题的“事件网格主题”页上的工具栏中,选择“+ 事件订阅”。

    Image showing the selection of Add Event Subscription on the toolbar.

  2. 在“创建事件订阅”页上执行以下步骤:

    1. 输入事件订阅的“名称” 。

    2. 选择“Azure 函数”作为“终结点类型” 。

    3. 选择“配置终结点”。

      Image showing event subscription values.

    4. 对于函数终结点,选择你的函数应用所在的 Azure 订阅和资源组,然后选择之前创建的函数应用和函数。 选择“确认所选内容” 。

      Image showing the Select Azure Function page showing the selection of function you created earlier.

    5. 此步骤是可选的,但建议在生产方案中使用。 在“创建事件订阅”页上,切换到“高级功能”选项卡,并设置“每批最大事件数”和“首选批大小(KB)”的值。

      批处理可提高吞吐量。 对于“每批最大事件数”,请设置订阅要在一个批中包含的事件的最大数目。 首选批大小设置批大小的首选上限(以 KB 为单位),但如果单个事件大于此阈值,则可以超出此上限。

      Image showing batching settings for an event subscription.

    6. 在“创建事件订阅”页上,选择“创建”。

向主题发送事件

现在,让我们触发一个事件,看事件网格如何将消息分发到终结点。 使用 Azure CLI 或 PowerShell 向自定义主题发送测试性事件。 通常情况下,应用程序或 Azure 服务会发送事件数据。

第一个示例使用 Azure CLI。 它获取自定义主题的 URL 和密钥,以及示例事件数据。 将自定义主题名称用于 <topic name>。 它将创建示例事件数据。 JSON 的 data 元素是事件的有效负载。 可以将任何格式正确的 JSON 置于此字段中。 也可将主题字段用于高级路由和筛选。 CURL 是发送 HTTP 请求的实用工具。

Azure CLI

  1. 设置将在命令中使用的 topicnameresourcegroupname 变量。

    TOPICNAME 替换为事件网格主题的名称。

    topicname="TOPICNAME"
    

    RESOURCEGROUPNAME 替换为包含事件网格主题的 Azure 资源组的名称。

    resourcegroupname="RESOURCEGROUPNAME"
    
  2. 运行以下命令以获取主题的终结点:复制并粘贴该命令后,更新主题名称资源组名称,然后运行该命令。

    endpoint=$(az eventgrid topic show --name $topicname -g $resourcegroupname --query "endpoint" --output tsv)
    
  3. 运行以下命令以获取自定义主题的密钥:复制并粘贴该命令后,更新主题名称资源组名称,然后运行该命令。

    key=$(az eventgrid topic key list --name $topicname -g $resourcegroupname --query "key1" --output tsv)
    
  4. 复制以下包含事件定义的语句,然后按 ENTER

    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"} ]'
    
  5. 运行以下 Curl 命令以发布事件:

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

Azure PowerShell

第二个示例使用 PowerShell,执行的步骤类似。

  1. 设置以下变量。 复制并粘贴每个命令后,更新主题名称资源组名称,然后运行该命令:

    $resourceGroupName = "RESOURCEGROUPNAME"
    
    $topicName = "TOPICNAME"
    
  2. 运行以下命令以获取主题的终结点密钥

    $endpoint = (Get-AzEventGridTopic -ResourceGroupName $resourceGroupName -Name $topicName).Endpoint
    $keys = Get-AzEventGridTopicKey -ResourceGroupName $resourceGroupName -Name $topicName
    
  3. 准备事件。 在 PowerShell 窗口中复制并运行这些语句。

    $eventID = Get-Random 99999
    
    #Date format should be SortableDateTimePattern (ISO 8601)
    $eventDate = Get-Date -Format s
    
    #Construct body using Hashtable
    $htbody = @{
        id= $eventID
        eventType="recordInserted"
        subject="myapp/vehicles/motorcycles"
        eventTime= $eventDate   
        data= @{
            make="Ducati"
            model="Monster"
        }
        dataVersion="1.0"
    }
    
    #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)+"]"
    
  4. 使用 Invoke-WebRequest cmdlet 发送事件。

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

验证函数是否已收到事件

现已触发事件,并且事件网格已将消息发送到订阅时配置的终结点。

  1. 在 Azure 函数的“监视器”页上,会看到调用。

    Screenshot showing the Invocations tab of the Monitor page.

  2. 选择调用以查看详细信息。

    Screenshot showing the Invocation details.

  3. 还可以在右侧窗格中使用“日志”选项卡,在向主题的终结点发布事件时查看记录的消息。

    Image showing the Monitor view of the Azure function with a log.

清理资源

如果打算继续处理此事件,请不要清除本文中创建的资源。 否则,请删除本文中创建的资源。

  1. 在左侧菜单中选择“资源组”。 如果左侧菜单中未显示此选项,请在左侧菜单中选择“所有服务”,然后选择“资源组”。

  2. 选择资源组以启动“资源组”页。

  3. 在工具栏中选择“删除资源组”。

  4. 输入资源组的名称以确认删除,然后选择“删除”。

    Resource groups

后续步骤

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

请查看以下示例,了解如何使用不同的编程语言将事件发布到事件网格以及如何从事件网格使用事件。