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

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

Azure 事件网格是针对云的事件路由服务。 Azure Functions 是受支持的事件处理程序之一。

在此快速入门中,将使用 Azure 门户创建一个自定义主题,然后订阅该自定义主题,再触发可查看结果的事件。 将事件发送至 Azure 函数。

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

使用 Visual Studio Code 通过事件网格触发器创建函数

在本部分中,使用 Visual Studio Code 通过事件网格触发器创建函数。

先决条件

创建函数

  1. 打开 Visual Studio Code。

  2. 在左侧栏中,选择“Azure”

  3. 在左窗格中的“工作区”部分中,选择命令栏上的“Azure Functions”按钮,然后选择“创建函数”

    显示 Visual Studio Code 的 Azure 选项卡的屏幕截图,其中包含用于创建函数的菜单命令。

  4. 选择要在其中保存函数代码的文件夹。

  5. 对于“新建项目”命令,对于“语言”,选择“C#”,然后选择 Enter 键

    显示选择 C Sharp 作为用于开发 Azure 函数的语言的屏幕截图。

  6. 对于“.NET 运行时”,选择“.NET 8.0 独立 LTS”,然后选择 Enter 键

  7. 对于“函数的模板”,选择“Azure 事件网格触发器”,然后选择 Enter 键

  8. 对于“函数名称”,输入函数的名称,然后选择 Enter 键

  9. 对于“命名空间”,输入函数的命名空间的名称,然后选择 Enter 键

  10. 在当前窗口或新窗口中打开项目,或将其添加到工作区。

  11. 等待函数创建完毕。 函数创建的状态显示在右下角。

    显示函数创建状态的屏幕截图。

  12. 查看 YourFunctionName.cs 文件中的代码,特别是 Run 方法。 它使用记录器打印信息。

    [Function(nameof(MyEventGridTriggerFunc))]
    public void Run([EventGridTrigger] CloudEvent cloudEvent)
    {
        _logger.LogInformation("Event type: {type}, Event subject: {subject}", cloudEvent.Type, cloudEvent.Subject);
    }
    

将函数部署到 Azure

  1. 如果“Azure”窗格尚未打开,请选择左侧栏中的“Azure”按钮

  2. 将鼠标悬停在项目上,然后选择“部署到 Azure”按钮

    显示用于部署到 Azure 的按钮的屏幕截图。

  3. 在命令面板的下拉列表中,选择“+ 新建函数应用”,然后选择 Enter 键

  4. 对于“名称”,请输入新函数应用的全局唯一名称,然后选择 Enter 键

  5. 对于“运行时堆栈”,请选择“.NET 8 (独立)”

  6. 对于 Azure 资源的“位置”,请选择离你近的区域

  7. 函数应用创建的状态显示在底部窗格的“AZURE”选项卡上。 创建函数应用后,可看到将本地创建的函数部署到函数应用的状态。

  8. 部署成功后,展开“创建函数应用成功”消息,然后选择“单击以查看资源”。 确认函数已在左侧窗格的“资源”部分选中

  9. 右键单击函数,然后选择“在门户中打开”

    显示在门户中打开函数的选项的屏幕截图。

  10. 如有必要,请登录到 Azure,并确认显示针对你的函数的“函数应用”页面

  11. 在底部窗格中,选择你的函数。

    显示在“函数应用”页上选择 Azure 函数的屏幕截图。

  12. 切换到“日志”选项卡。保持此选项卡的打开状态,以便在本教程稍后部分向事件网格主题发送事件时查看记录的消息。

    显示 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. 对于“事件架构”,请选择“云事件架构 v1.0”

    3. 对于“终结点类型”,请选择“Azure Function” 。

    4. 选择“配置终结点”

      显示事件订阅值的屏幕截图。

    5. 在“选择 Azure 函数”窗格上执行以下步骤

      1. 对于“订阅”,选择具有该函数的 Azure 订阅

      2. 对于“资源组”,选择具有该函数的资源组

      3. 对于“函数应用”,选择你的函数应用

      4. 对于“函数”,选择函数应用中的函数

      5. 选择“确认所选内容” 。

        显示用于选择以前创建的 Azure 函数的窗格的屏幕截图。

    6. 此步骤是可选的,但我们建议将其用于生产方案。 在“创建事件订阅”窗格上,转到“附加功能”选项卡,并设置“每批最大事件数”和“首选批大小(KB)”的值。

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

      显示事件订阅的批处理设置的屏幕截图。

    7. 在“创建事件订阅”窗格上,选择“创建”。

向主题发送事件

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

第一个示例使用 Azure CLI。 它获取自定义主题的 URL 和密钥,以及示例事件数据。 将自定义主题名称用于 topicname。 它将创建示例事件数据。

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

cURL 工具发送 HTTP 请求。 本文使用 cURL 向自定义主题发送事件。

Azure CLI

  1. 在 Azure 门户中选择“Cloud Shell”。 如果你处于 Azure PowerShell 模式,请选择“切换到 Bash”

    显示 Azure 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
    
  7. 确认函数中的消息显示在 Azure 门户中函数的“日志”选项卡上

    显示 Azure 函数的“日志”选项卡的屏幕截图。

Azure PowerShell

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

  1. 在 Azure 门户中,选择“Cloud Shell”(或转到 Azure Cloud Shell 页面。 在 Cloud Shell 窗口的左上角,选择“切换到 PowerShell”

  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 the body by using a hash table
    $htbody = @{
        id= $eventID
        eventType="recordInserted"
        subject="myapp/vehicles/motorcycles"
        eventTime= $eventDate   
        data= @{
            make="Ducati"
            model="Monster"
        }
        dataVersion="1.0"
    }
    
    #Use ConvertTo-Json to convert the event body from a hash table to a JSON object
    #Append square brackets to the converted JSON payload because they're 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}
    
  6. 确认函数中的消息显示在 Azure 门户中函数的“日志”选项卡上

    显示函数的“日志”选项卡的屏幕截图。

验证函数是否已收到事件

你已触发事件,而事件网格则已将消息发送到你在订阅时配置的终结点。 现在,你可以检查函数是否收到了它。

  1. 在函数的“监控”页面上,找到调用

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

  2. 选择调用以显示详细信息。

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

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

    显示具有日志的函数的“监控”视图的屏幕截图。

清理资源

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

  1. 在左侧菜单上,选择“资源组”

    显示资源组页面的屏幕截图

    另一种方法是在左侧菜单中选择“所有服务”,然后选择“资源组”

  2. 选择资源组,打开其详细信息窗格。

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

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

Cloud Shell 窗口已创建并使用了显示在“资源组”页面上的另一个资源组。 如果以后不打算使用 Cloud Shell 窗口,请删除此资源组。

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

若要了解如何使用各种编程语言将事件发布到事件网格以及如何在事件网格中使用事件,请查看以下示例: