手动运行非 HTTP 触发的函数

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

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

以下示例中使用了 Postman,但也可以使用 cURLFiddler 或任何其他类似的工具来发送 HTTP 请求。

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

定义请求位置

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

Define the request location: host name + folder path + function name

  • 主机名: 函数应用的公共位置,由函数应用的名称和“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 密钥。

    Locate the master key to copy.

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

    Copy the master key to the clipboard.

调用该函数

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

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

    Screenshot that shows the 'Code + Test' page with a message from the logs displayed.

  3. 打开 Postman(或等效的 HTTP 撰写工具),并在 URL 文本框中输入请求位置

  4. 确保 HTTP 方法设置为“POST”,选择“标头”选项卡,并添加以下两个标头键值对:

    密钥
    x-functions-key 粘贴自剪贴板的主密钥值。
    Content-Type application/json

    Postman headers settings.

  5. 选择“正文”选项卡,然后输入 { "input": "<TRIGGER_INPUT>" } 作为请求的正文。

    Postman body settings.

    你提供的具体 <TRIGGER_INPUT> 取决于触发器的类型,但它只能是字符串、数字或布尔值。 对于使用 JSON 有效负载的服务,例如 Azure 服务总线,应将测试 JSON 有效负载转义并序列化为字符串。

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

  6. 选择 Send

    Send a request with Postman.

    Postman 然后会报告状态“202 已接受”。

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

    View the logs to see the master key test results.

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

后续步骤