你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

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

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

如果没有 Azure 订阅,请在开始之前创建一个 Azure 免费帐户

创建 Azure 函数应用

  1. 登录 Azure 门户

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

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

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

    屏幕截图显示为函数应用选择“创建”链接。

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

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

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

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

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

    5. 对于“版本”,请选择“6 (LTS),进程内模型”。

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

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

      屏幕截图显示“创建函数应用”页的“基本信息”选项卡。

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

    屏幕截图显示“创建函数应用”页的“存储”选项卡。

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

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

创建函数

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

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

    屏幕截图显示选择了“创建函数”链接。

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

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

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

    3. 选择页面底部的“下一步”。

      显示“选择事件网格触发器”的屏幕截图。

    4. 在“模板详细信息”页上,输入函数的名称。 本示例中为 HandleEventsFunc。

    5. 选择创建

      显示模板详细信息页的屏幕截图。

  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());
    }        
    

    图像显示了已选中 Azure 函数的“代码 + 测试”菜单。

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

    屏幕截图显示 Azure 函数的“监视器”视图。

创建自定义主题

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

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

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

    此图显示已选中“事件网格主题”。

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

    屏幕截图显示用于创建事件网格主题的“创建”按钮。

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

    1. 选择 Azure 订阅

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

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

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

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

      显示“创建主题”页的屏幕截图。

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

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

    图像显示了事件网格自定义主题的主页。

订阅自定义主题

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

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

    图像显示了工具栏上选中的“添加事件订阅”。

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

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

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

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

      图像显示了事件订阅值。

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

      图像显示“选择 Azure 函数”页,其中显示已选中之前创建的函数。

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

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

      图像显示了事件订阅的批处理设置。

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

向主题发送事件

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

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

Azure CLI

  1. 在 Azure 门户中选择“Cloud Shell”。 在 Cloud Shell 窗口的左上角选择“Bash”。

    图像显示了“Cloud Shell - Bash”窗口

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

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

    topicname="TOPICNAME"
    

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

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

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

    key=$(az eventgrid topic key list --name $topicname -g $resourcegroupname --query "key1" --output tsv)
    
  5. 复制以下包含事件定义的语句,然后按 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"} ]'
    
  6. 运行以下 Curl 命令以发布事件:

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

Azure PowerShell

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

  1. 在 Azure 门户中选择“Cloud Shell” (或者转到 https://shell.azure.com/)。 在 Cloud Shell 窗口的左上角选择“PowerShell”。 参阅“Azure CLI”部分的示例 Cloud Shell 窗口图像。

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

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

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

    $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)+"]"
    
  5. 使用 Invoke-WebRequest cmdlet 发送事件。

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

验证函数是否已收到事件

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

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

    显示“监视”页的“调用”选项卡的屏幕截图。

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

    显示“调用详细信息”的屏幕截图。

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

    图像显示了包含日志的 Azure 函数的“监视”视图。

清理资源

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

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

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

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

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

    资源组

    图中显示的另一个资源组是 Cloud Shell 窗口创建并使用的。 如果你以后不打算使用 Cloud Shell 窗口,请删除该资源组。

后续步骤

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

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