如何在 Azure Functions 中禁用函数

本文介绍如何在 Azure Functions 中禁用函数。 禁用某个函数意味着运行时将忽略针对该函数定义的自动触发器。 这使你可以在不停止整个函数应用的情况下阻止特定函数运行。

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

禁用函数

请使用函数的“概述”页上的“启用”和“禁用”按钮 。 这两个按钮通过更改 AzureWebJobs.<FUNCTION_NAME>.Disabled 应用设置的值来工作。 此特定于函数的设置是在第一次禁用它时创建的。

Function state switch

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

注意

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

槽位中的函数

在默认情况下,应用设置还会应用于在部署槽位中运行的应用。 但是,可以通过设置特定于槽位的应用设置来替代该槽位使用的应用设置。 例如,可能需要让某个函数(例如计时器触发的函数)在生产中处于活动状态,但不希望它在部署测试过程中处于活动状态。

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

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

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

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

运行已禁用的函数

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

注意

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

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

local.settings.json

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

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

其他方法

虽然我们建议你将应用程序设置方法用于所有语言和所有运行时版本,但是你也可以使用其他几种方法来禁用函数。 这些方法因语言和运行时版本而异,为了后向兼容而保留。

C# 类库

在类库函数中,还可以使用 Disable 属性来防止函数被触发。 通过此属性可自定义用于禁用函数的设置的名称。 使用可定义引用布尔应用设置的构造函数参数的属性版本,如以下示例中所示:

public static class QueueFunctions
{
    [Disable("MY_TIMER_DISABLED")]
    [FunctionName("QueueTrigger")]
    public static void QueueTrigger(
        [QueueTrigger("myqueue-items")] string myQueueItem, 
        TraceWriter log)
    {
        log.Info($"C# function processed: {myQueueItem}");
    }
}

使用此方法可以通过更改应用设置来启用和禁用函数,而无需重新编译或重新部署。 更改应用设置会导致函数应用重启,因此,可立即识别到禁用状态的更改。

还有一个参数的构造函数,该参数不接受设置名称的字符串。 不建议使用此版本的属性。 如果使用此版本,则必须重新编译并重新部署项目,以更改函数的禁用状态。

Functions 1.x - 脚本语言

在版本 1.x 中,还可以使用 function.json 文件的 disabled 属性来指示运行时不要触发函数。 此方法仅适用于脚本语言(例如,C# 脚本和 JavaScript)。 disabled 属性可设置为 true 或某个应用设置的名称:

{
    "bindings": [
        {
            "type": "queueTrigger",
            "direction": "in",
            "name": "myQueueItem",
            "queueName": "myqueue-items",
            "connection":"MyStorageConnectionAppSetting"
        }
    ],
    "disabled": true
}

    "bindings": [
        ...
    ],
    "disabled": "IS_DISABLED"

在第二个示例中,当存在名为 IS_DISABLED 的应用设置且其值设置为 true 或 1 时,将禁用相应的函数。

重要

门户使用应用程序设置来禁用 v1.x 函数。 当应用程序设置与 function.json 文件冲突时,可能会出现错误。 应从 function.json 文件中删除 disabled 属性,以防止出现错误。

注意事项

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

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

  • 目前,在 Linux 计划上运行时,不能禁用包含连字符 (-) 的函数名称。 如果在 Linux 计划上运行时需要禁用函数,请不要在函数名称中使用连字符。

后续步骤

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