Hi @Ade Jabar ,
You re-enabled the CREATE function through its app setting, the management plane reports it as enabled, a GET to another route on the same app answers normally, and yet the POST to api/guard/objects returns an empty 404 from Kestrel without reaching the handler. The successful GET confirms that the app can serve requests, but it does not establish that the CREATE function is registered or enabled on the instance that handled the POST.
@Rukshan edirisinghe 's answer covers the restart timing: the POST most likely reached a host that still ran with the previous disable setting. On Flex Consumption, three further points apply.
Why the management plane and the runtime disagree on Flex Consumption
The values you checked (the AzureWebJobs.guardCreateObject.Disabled app setting and the management-plane isDisabled value) do not establish which configuration a particular running host instance has loaded. On Flex Consumption, changing an app setting is a site update, and the site update strategies article describes both strategies as asynchronous. With the default Recreate strategy, new instances are provisioned while original instances might still be deprovisioning in the background. With RollingUpdate, instances are drained and replaced in batches at regular intervals. For both, the article states that there is no built-in completion signal, and it provides a best-effort KQL query that compares the instances active before the update with the instances active now. Running that query around the time of your test can show whether instances from before the update were still active. It does not, by itself, identify which instance handled the failed POST.
A test to narrow down disable state versus routing
The disable function documentation states that a disabled function can still be called with the master key, and that a request with any other key receives HTTP 404. You can use this as a controlled diagnostic without enabling anything: while the function is disabled and no settings change is in progress, send the same POST twice, once without a key and once with the master key in the x-functions-key header (both with the Easy Auth token). As you describe it, your handler returns 428 for the missing If-None-Match header before any storage access, so neither call writes anything. The master key grants elevated access to the whole app, so use it only for this test and keep it out of logs, screenshots, and posts.
- Empty 404 without the key, 428 with it: the function is registered and executable, and the disable setting alone produces exactly the response signature you observed. This does not prove that the original 404 had the same cause, but it makes a stale disable state the explanation that matches the evidence.
- 404 with the master key as well: the request did not reach the handler despite the master key. Assuming the key was accepted, this points toward registration, routing, or the deployed package content rather than the disable gate alone. For the v4 model, one concrete check is whether the
main entry in package.json includes the file that calls app.http.
Trigger synchronisation
A manual trigger sync is unlikely to help here. The trigger syncing section describes it as updating trigger metadata after a deployment adds, removes, or changes functions; it is not documented as a mechanism for reloading app settings on running host instances, which is where a stale disable state would sit. The scenarios that require a manual sync (external package URL, local Git, and FTPS) do not apply to Flex Consumption, which uses its own package deployment. The documented manual operation, the syncfunctiontriggers POST against the Microsoft.Web/sites resource, is described for function apps in general; the article does not name a separate operation for Flex Consumption.
References
Drafted with help from Claude, disclosed per the Q&A AI usage policy. Documented: Flex Consumption site update behavior, master-key access to disabled functions, and trigger sync requirements (Learn). Inference from the symptoms: that the POST was served by an instance with the previous configuration; the master-key test is proposed to narrow this down, not to prove it.