为运行时版本 3.x 从 C# 禁用 Azure 函数?

Disable Azure Function from C# for runtime version 3.x?

如何使用 C# 中的代码禁用 Azure 函数?

我使用的是 Azure Functions 运行时版本 3.x

我正在实施受 Serverless circuit breakers with Durable Entities 启发的分布式断路器。当电路打开时,我需要禁用队列触发的 Azure 函数,而不是停止整个函数应用程序。

我从 How to disable functions in Azure Functions 了解到,禁用功能的推荐方法是设置 AzureWebJobs.<FUNCTION_NAME>.Disabled 应用程序设置。但我还没有找到在 C# 中执行此操作的 API。我希望我可以从我的 C# 代码中调用一些与 Azure CLI 的 az functionapp config appsettings set 命令等效的东西。

我在 SO 上看到类似的问题,例如: 但是那些在 2017 年使用 kudu APIs 更改 function.json 文件中的 disabled 属性 的答案,我希望有更好的方法现在就去做。特别是因为 How to disable functions in Azure Functions 的文档说:

The generated function.json file for a class library function is not meant to be edited directly. If you edit that file, whatever you do to the disabled property will have no effect.

很遗憾,我找不到任何此类文档。我得到的最接近的是

https://docs.microsoft.com/en-us/rest/api/appservice/webapps/createfunction

例如创建函数: https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Web/sites/{name}/functions/{functionName}?api-version=2019-08-01

但是,该文档也没有让我接近您更新配置文件的要求。或者我可能忽略了几个模块。请您在执行以下步骤之前进一步检查

这就是我所做的,我试图进行逆向工程,我 运行 Azure CLI 中的命令并捕获了痕迹 - 我的思维过程 - Azure CLI 内部 运行在 python 上向 Azure 发出 API 请求。

运行 下面的命令和捕获的 Fiddler :

az functionapp config appsettings set --name <myFunctionApp> \
--resource-group <myResourceGroup> \
--settings AzureWebJobs.QueueTrigger.Disabled=true

是的! python 进程正在向 https://management.azure.com 发出更新应用程序设置的请求:

集合属性在请求Body中发送:

我们可以对属性进行硬编码或动态获取。

所以我 运行 下面的 Azure CLI 命令

az functionapp config appsettings list --name <> --resource-group <>

我能够看到随 PUT 请求传递的上述属性

使用上述命令的 fiddler

看到有一个 POST 到以下端点的请求: https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.Web/sites//config/appsettings/list?api-version=2019-08-01

这些是同一组 属性 包,它们在 PUT 中作为请求主体发送,以设置 属性.

因此,在您的情况下,您将必须请求上述端点以获取属性列表。它是 json 输出。将 AzureWebJobs.QueueTrigger.Disabled 的值更新为 True。

使用 PUT 方法连同 headers 发布更新属性,例如 Bearer Token & Content-Type: application/json;字符集=utf-8

请求 URI : https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.Web/sites//config/appsettings?api-version=2019-08-01

Headers : 授权:承载 <> Content-Type: application/json; 字符集=utf-8`

请求Body:

{“种类”:“”,“属性”:}

希望你能达到你的要求。

希望对您有所帮助:)

我不推荐您使用此产品。请尝试在您的开发环境中进行监控。