简体   繁体   中英

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

How can I disable an Azure Function using code in C#?

I'm using Azure Functions Runtime version 3.x

I'm implementing a distributed circuit-breaker inspired by Serverless circuit breakers with Durable Entities . When the circuit opens I need to disable a queue-trigged Azure Function, instead of stopping the entire function app.

I see from How to disable functions in Azure Functions that the recommended way to disable a function is to set the AzureWebJobs.<FUNCTION_NAME>.Disabled app setting. But I haven't found an API for doing that in C#. I'm hoping there is something that I can call from my C# code that is equivalent to the Azure CLI's az functionapp config appsettings set command.

I saw similar questions on SO like: azure set environment variable programmatically to disable an azure function and How to Enable/Disable Azure Function programmatically But those have answers from back in 2017 that use kudu APIs to change the disabled property in the function.json file, and I'm hoping that there is a better way to do that now. Especially because the Docs at How to disable functions in Azure Functions say:

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.

Unfortunately I was not able to find any documentation as such. The closest I got was

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

For instance to create the function: https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Web/sites/{name}/functions/{functionName}?api-version=2019-08-01

However this documentation also did not take me near to your requirement of updating the Config File. Or I may have overlooked few modules. Request you check further before implementing the below steps

So here's is what I did, I was kind of trying to reverse engineer, I ran the commands in Azure CLI and captured the traces - my thought process - the Azure CLI internally run on python and issues the API request to the Azure.

Ran the below command and captured Fiddler:

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

And Yes ! The python process was issuing request to https://management.azure.com to update appsetting:

在此处输入图像描述

The set property is sent in the Request Body:

在此处输入图像描述

We can hardcode the properties or get it dynamically.

So I ran the below Azure CLI command

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

I was able to see the above properties that was passed along the PUT request在此处输入图像描述

Took the fiddler for the above command

Saw there is a POST Request to the below endpoint: https://management.azure.com/subscriptions/ /resourceGroups//providers/Microsoft.Web/sites//config/appsettings/list?api-version=2019-08-01

在此处输入图像描述

These are the same set of property bags which are sent as the request bodies in the PUT in order to set the property.

So in your case you will have to request the above end point to get the list of properties. It is json output. Update the value of AzureWebJobs.QueueTrigger.Disabled to True.

Issue the Updated properties using the PUT method along with the headers such as Bearer Token & Content-Type: application/json; charset=utf-8

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

Headers: Authorization: Bearer <> Content-Type: application/json; charset=utf-8`

Request Body:

{"kind": "<class 'str'>", "properties": }

I hope you will be able to achieve your requirement.

I hope this helps you:)

I don't recommend this for your prod. Pls try and monitor in your Dev env.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM