手动运行非 HTTP 触发的函数

本文演示如何通过特殊格式的 HTTP 请求手动运行非 HTTP 触发的函数。

在某些上下文中,例如在开发和故障排除期间,可能需要运行间接触发的 Azure 函数“按需”。 例如,按计划函数或者根据事件来运行的函数属于间接触发的函数。

本文中所述的过程等效于在 Azure 门户中使用函数的“代码 + 测试”选项卡的“测试/运行”功能。 还可以使用 Visual Studio Code 手动运行函数

先决条件

本文中的示例使用 HTTP 测试工具。 请确保选择一个可保护数据安全的工具。 有关详细信息,请参阅 HTTP 测试工具

定义请求位置

若要运行非 HTTP 触发的函数,需要通过某种方式向 Azure 发送运行函数的请求。 用于发出该请求的 URL 采用特定的形式。

定义请求位置:主机名 + 文件夹路径 + 函数名

  • 主机名: 函数应用的公共位置,由函数应用的名称和“chinacloudsites.cn”或自定义域组成。 使用用于暂存的部署槽位时,主机名部分是追加了 -<slotname> 的生产主机名。 在前面的示例中,URL 将为名为 staging 的槽的 myfunctiondemos-staging.chinacloudsites.cn
  • 文件夹路径:若要通过 HTTP 请求访问非 HTTP 触发的函数,需通过路径 admin/functions 发送请求。 /admin/ 路径下的 API 只能通过授权进行访问。
  • 函数名: 要运行的函数的名称。

在函数应用中向管理员终结点发出请求时,需要注意以下事项:

  • /admin/ 路径下的任何终结点发出请求时,必须在请求的 x-functions-key 标头中提供应用的主密钥。
  • 在本地运行时,不会强制实施授权,并且不需要函数的主密钥。 可以直接调用函数,省略 x-functions-key 标头。
  • 部署槽中访问函数应用终结点时,请确保在请求 URL 中使用槽特定的主机名以及特定于槽的主密钥。

获取主密钥

可以从 Azure 门户或使用 Azure CLI 获取主密钥。

注意

由于函数应用中提升的权限由主密钥授予,因此不应与第三方共享此密钥或在应用程序中分发此密钥。 此密钥应仅发送到 HTTPS 终结点。

  1. Azure 门户中导航到函数应用,选择“应用密钥”,然后选择 _master 密钥。

    找到要复制的主密钥。

  2. 在“编辑密钥”部分中,将密钥值复制到剪贴板,然后选择“确定”。

    将主密钥复制到剪贴板。

调用该函数

  1. 在 Azure 门户中,导航到函数应用顶部并选择函数。

  2. 选择“代码 + 测试”,然后选择“日志”。 手动从 HTTP 测试工具运行已记录函数时,会在此处看到该函数中的消息。

    此屏幕截图显示了“代码 + 测试”页,其中显示了日志中的消息。

  3. 在 HTTP 测试工具中,使用定义的请求位置作为请求 URL,确保 HTTP 请求方法为 POST,并包含以下两个请求标头:

    密钥
    x-functions-key 粘贴自剪贴板的主密钥值。
    Content-Type application/json
  4. 确保 POST 请求有效负载/正文为 { "input": "<TRIGGER_INPUT>" }。 你提供的具体 <TRIGGER_INPUT> 取决于触发器的类型,但它只能是字符串、数字或布尔值。 对于使用 JSON 有效负载的服务,例如 Azure 服务总线,应将测试 JSON 有效负载转义并序列化为字符串。

    如果不想将输入数据传入函数,仍必须将空字典 {} 作为 POST 请求的正文提供。 有关详细信息,请参阅特定非 HTTP 触发器的参考文章。

  5. 发送 HTTP POST 请求。 响应应为 HTTP 202(已接受)响应。

  6. 接下来,返回到 Azure 门户中的函数。 查看日志,你会看到手动调用函数后显示的消息。

    查看日志以了解主密钥测试结果。

访问发送到触发器的数据的方式取决于触发器的类型和函数语言。 有关详细信息,请参阅特定触发器的参考示例。

后续步骤