使用任何配置禁用某些 Azure 功能

Rah*_*oni 3 azure azure-functions

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

https://learn.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
  }
}
Run Code Online (Sandbox Code Playgroud)

进行这些更改并重新部署后,不会对 UI 产生任何影响。我缺少什么?

Tur*_*rbo 7

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

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

选项 2:使用 host.json 因为您正在寻找从代码禁用功能,所以您可以尝试在 host.json 中执行此操作。请注意,这是用于本地开发,不建议用于产品,但它是有效的。 https://learn.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.
}
Run Code Online (Sandbox Code Playgroud)

请注意,门户不会正确显示此功能,并将“bar”列为已启用,但在点击该功能时您将收到 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)
{
}
Run Code Online (Sandbox Code Playgroud)

选项 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)
{
}
Run Code Online (Sandbox Code Playgroud)

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