首页 > 解决方案 > 使用任何配置禁用某些 Azure 功能

问题描述

在使用 Azure 函数时,我有一种情况,我希望函数应用程序的一些函数处于“禁用”模式,而其他函数则要启用。问题是,我不想使用可以轻松启用/禁用各个功能的功能屏幕手动执行此操作。有这篇文章说 Functions 2.x 支持这一点(Functions 1.x 不是我的选择)。

https://docs.microsoft.com/en-us/azure/azure-functions/disable-function

只是文章对需要做什么有点模糊。它说,我引用>

在 Functions 2.x 中,您可以使用应用设置禁用某个功能。例如,要禁用名为 QueueTrigger 的函数,请创建名为 AzureWebJobs.QueueTrigger.Disabled 的应用设置,并将其设置为 true。要启用该功能,请将应用设置设置为 false。

我试过这个,但它不像记录的那样工作。我有一个名为的函数应用程序foo和一个名为bar. 我都试过了:

disabled: true在函数.json

也:

foo: { 
  bar: {
    disabled: true
  }
}

进行这些更改并重新部署后,对 UI 没有任何影响。我错过了什么?

标签: azureazure-functions

解决方案


推荐的方法是使用应用程序设置,您可以通过访问门户来完成。[注意:当他们说应用程序设置时,他们并不是指 function.json。]

选项 1:使用应用程序设置 在 azure 门户中,导航到您的函数应用程序foo-> Confuguration,您应该会看到Application Settings已定义一些变量的选项卡。您需要通过单击New application setting按钮创建一个新变量。将名称设置为AzureWebJobs.bar.Disabled并将值设置为true。请注意,函数应用名称foo不在变量名称中。

选项 2:使用 host.json 因为您正在寻找从代码中禁用功能,您可以尝试在 host.json 中执行此操作。请注意,这适用于本地开发,不推荐用于 prod,但它可以工作。 https://docs.microsoft.com/en-us/azure/azure-functions/functions-host-json#functions

{
    "functions": [ "function1", "function2" ] // Don't list function "bar" here, and it would get disabled.
}

请注意,门户将无法正确显示此内容,并将“栏”列为已启用,但在点击该功能时您将获得 404。

选项 3:使用禁用属性 如果您使用 C#,您也可以使用该[Disable]属性。这是一个 Functions 1.x 构造,但它也适用于 2.x。与上面类似,门户 UI 将无法正确显示。

    [Disable]
    [FunctionName("Function1")]
    public static async Task<IActionResult> Run(
    [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
    ILogger log)
{
}

选项 4:仅在使用 C# 时删除 FunctionName 属性。这听起来可能违反直觉,但如果您从函数中删除 FunctionName 属性,则不会被这样对待。

    // [FunctionName("Function1")]  // Comment this or delete this line to disable this function
    public static async Task<IActionResult> Run(
    [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
    ILogger log)
{
}

这应该在两个运行时都有效。该功能不会显示在 azure 门户中。


推荐阅读