如何在 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 请求中向已禁用函数的终结点 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 上运行函数,而你计划在这种情况下禁用对应函数,则请不要在函数名称中使用连字符。

后续步骤

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