如何在 Azure Functions 中禁用函数

本文介绍如何在 Azure Functions 中禁用函数。 禁用函数意味着使运行时忽略旨在触发该函数的事件。 此功能使你能够阻止特定函数运行,而无需修改和重新发布整个函数应用。

可以通过创建格式为 AzureWebJobs.<FUNCTION_NAME>.Disabled 的应用设置,并设置为 true 来禁用函数。 可以通过多种方式创建和修改此应用程序设置,包括使用 Azure CLIAzure PowerShell 以及 Azure 门户中函数的“概述”选项卡。

更改应用程序设置会导致函数应用重启。 有关详细信息,请参阅 Azure Functions 的应用设置参考

禁用函数

使用以下模式之一创建一个应用设置,该设置会禁用名为 QueueTrigger 的示例函数:

请使用函数的“概述”页上的“启用”和“禁用”按钮 。 这两个按钮通过更改 AzureWebJobs.QueueTrigger.Disabled 应用设置的值来工作。 首次禁用函数时会创建特定于函数的应用设置。

函数状态开关

即使从本地项目发布到函数应用时,仍可以使用门户来禁用函数应用中的函数。

注意

仍可以使用主密钥通过调用 REST 终结点来运行已禁用的函数。 有关详细信息,请参阅运行已禁用的函数。 这意味着,当使用主密钥(主机密钥)从门户中的“测试/运行”窗口启动时,已禁用的函数仍会运行。

禁用槽中的函数

在默认情况下,应用设置还会应用于在部署槽位中运行的应用。 但是,可以通过设置特定于槽位的应用设置来替代该槽位使用的应用设置。 例如,你可能希望函数在生产环境中处于活动状态,但在部署测试期间不处于活动状态。 通常情况下,我们会禁用槽中计时器触发的函数,以防止同时执行。

若要只在过渡槽中禁用函数,请执行以下操作:

导航到函数应用的槽位实例,方法是:选择“部署”下的“部署槽位”,选择槽位,然后选择槽位实例中的“函数” 。 选择函数,然后使用函数的“概述”页上的“启用”和“禁用”按钮 。 这两个按钮通过更改 AzureWebJobs.<FUNCTION_NAME>.Disabled 应用设置的值来工作。 首次禁用函数时会创建此特定于函数的设置。

还可以在该槽位实例的“配置”中直接添加名为 AzureWebJobs.<FUNCTION_NAME>.Disabled 且值为 true 的应用设置。 在添加特定于槽位的应用设置时,请确保选中“部署槽位设置”框。 此选项可在交换期间保留槽位的设置值。

若要了解详细信息,请参阅 Azure Functions 部署槽位

运行已禁用的函数

通过将 REST 请求中的主访问密钥 (_master) 提供给禁用函数的终结点 URL,仍可导致禁用函数运行。 这样,就可以在 Azure 中开发和验证处于已禁用状态的函数,同时防止其他人访问这些函数。 在请求中使用任何其他类型的密钥将返回 HTTP 404 响应。

注意

由于主密钥在函数应用中授予提升的权限,不应与第三方共享此密钥或在本机客户端应用程序中分发此密钥。 选择管理访问级别时请慎重。

若要详细了解主密钥,请参阅了解密钥。 若要详细了解如何调用非 HTTP 触发的函数,请参阅手动运行非 HTTP 触发的函数

在本地禁用函数

在本地运行时,可以用相同的方式禁用函数。 若要禁用名为 QueueTrigger 的函数,请在 local.settings.json 文件的“值”集合中添加一个条目,如下所示:

{
  "IsEncrypted": false,
  "Values": {
    "FUNCTIONS_WORKER_RUNTIME": "python",
    "AzureWebJobsStorage": "UseDevelopmentStorage=true", 
    "AzureWebJobs.QueueTrigger.Disabled": true
  }
}

注意事项

禁用函数时,请谨记以下注意事项:

  • 如果使用本文中所述方法禁用 HTTP 触发的函数,则当终结点在本地计算机上和在门户中运行时,你依然可以访问终结点。

  • 目前,对于函数名称包含连字符 (-) 的函数,当其在 Linux 上运行时,我们无法禁用。 如果系统正在 Linux 上运行函数,而你计划在这种情况下禁用相应函数,则请不要在函数名称中使用连字符。

后续步骤

本文介绍了如何禁用自动触发器。 有关触发器的详细信息,请参阅触发器和绑定