Read more of this story at Slashdot.
Read more of this story at Slashdot.
Read more of this story at Slashdot.
Azure Functions is a powerful serverless compute service that enables you to run event-driven code without managing infrastructure. When you deploy functions to Azure, you expect to see them listed in the Azure Portal under your Function App. However, there are situations where your functions may not appear in the portal, even though they were successfully deployed.
This issue can be frustrating, especially when your functions are actually running and processing requests correctly, but you cannot see them in the portal UI. In this blog, we will explore the common causes of functions not appearing in the Azure Portal and provide step-by-step solutions to help you troubleshoot and resolve this issue.
Before diving into troubleshooting, it's important to understand how the Azure Portal discovers and displays your functions.
When you open a Function App in the Azure Portal, the following process occurs:
If any step in this process fails, your functions may not appear in the portal.
| File | Purpose | Location |
|---|---|---|
| host.json | Host configuration | Root of function app |
| function.json | Function metadata (script languages) | Each function folder |
| *.dll or compiled code | Function implementation | bin folder or function folder |
| extensions.json | Extension bindings | bin folder |
| Category | Common Causes |
|---|---|
| Deployment | Failed deployment, missing files, package issues |
| Function Configuration | Invalid function.json, binding errors, disabled |
| Host/Runtime | Host startup failure, runtime errors, worker issues |
| Storage | AzureWebJobsStorage issues, connectivity |
| Portal/Sync | Sync triggers failure, cache issues, ARM API |
| Networking | VNET, private endpoints, firewall blocking |
Symptoms:
Why This Happens:
The Functions host must be running for the portal to discover functions. If the host fails to start, functions won't be visible.
How to Verify:
You can check the host status using the following URL: Function API
https://<your-function-app>.azurewebsites.net/admin/host/status?code=<master-key>
Expected healthy response:
{ "state": "Running" }Solution:
Common fixes:
Symptoms:
Why This Happens:
Deployment problems can result in incomplete or corrupted deployments where function files are missing or incorrectly placed.
How to Verify:
The verification method depends on your hosting plan:
For Windows plans (Consumption, Premium, Dedicated) - Use Kudu:
Kudu is not available for Linux Consumption and Flex Consumption plans. Use alternatives such as SSH or Azure CLI instead. refer Deployment technologies in Azure Functions
For compiled languages (C#, F#), verify:
site/wwwroot/ ├── host.json ├── bin/ │ ├── <YourAssembly>.dll │ └── extensions.json └── function1/ └── function.json
Similarly for script languages (JavaScript, Python, PowerShell), verify:
Solution:
# Using Azure CLI az functionapp restart
az functionapp restart --name <app-name> --resource-group <resource-group>Symptoms:
Why This Happens:
Each function requires a valid function.json file (generated at build time for compiled languages, or manually created for script languages). If this file is missing, malformed, or contains errors, the function won't be discovered.
Example of Valid function.json for http trigger:
{ "bindings": [ { "authLevel": "function", "type": "httpTrigger", "direction": "in", "name": "req", "methods": ["get", "post"] }, { "type": "http", "direction": "out", "name": "$return" } ] }
Common function.json Errors:
| Error | Example | Fix |
|---|---|---|
| Missing type | {"bindings": [{"name": "req"}]} | Add "type": "httpTrigger" |
| Invalid direction | "direction": "input" | Use "in" or "out" |
| Syntax error | Missing comma or bracket | Validate JSON syntax |
| Wrong binding name | Mismatched parameter names | Match code parameter names |
Solution:
Symptoms:
Why This Happens:
The V2 programming model for Python and v4 model for Node.js define functions using decorators/code instead of function.json files. The portal requires the host to be running to discover these functions dynamically.
Python V2 Example:
import azure.functions as func import logging app = func.FunctionApp() @app.function_name(name="HttpTrigger1") @app.route(route="hello", auth_level=func.AuthLevel.FUNCTION) def hello(req: func.HttpRequest) -> func.HttpResponse: logging.info('Python HTTP trigger function processed a request.') return func.HttpResponse("Hello!")Node.js V4 Example:
const { app } = require('@azure/functions'); app.http('HttpTrigger1', { methods: ['GET', 'POST'], authLevel: 'function', handler: async (request, context) => { context.log('HTTP trigger function processed a request.'); return { body: 'Hello!' }; } });Solution:
Symptoms:
Why This Happens:
Azure Functions uses extension bundles to provide trigger and binding implementations. If the bundle is missing or incorrectly configured, functions using those triggers won't work.
How to Verify:
Check your host.json for extension bundle configuration: extension bundle
{ "version": "2.0", "extensionBundle": { "id": "Microsoft.Azure.Functions.ExtensionBundle", "version": "[4.*, 5.0.0)" } }Solution:
Symptoms:
Why This Happens:
The Azure Portal caches function metadata. Sometimes this cache becomes stale or the sync process between the function host and the portal fails.
Solution:
Symptoms:
Why This Happens:
Azure Functions requires access to the storage account specified in AzureWebJobsStorage for:
If the function app cannot connect to storage, the host may fail to start properly.
How to Verify:
Check the Application Settings: Storage considerations for Azure Functions
Solution:
Check for more details - Storage considerations for Azure Functions
Symptoms:
Why This Happens:
When WEBSITE_RUN_FROM_PACKAGE is configured, Azure Functions runs directly from a deployment package (ZIP file) instead of extracting files to wwwroot. If the package is inaccessible, corrupted, or misconfigured, the host cannot load your functions.
Understanding WEBSITE_RUN_FROM_PACKAGE Values:
| Value | Behavior |
|---|---|
| 1 | Indicates that the function app runs from a local package file deployed in the c:\home\data\SitePackages (Windows) or /home/data/SitePackages (Linux) folder of your function app. |
| <URL> | Sets a URL that is the remote location of the specific package file you want to run. Required for functions apps running on Linux in a Consumption plan |
| Not set | Traditional deployment (files extracted to wwwroot) |
How to Verify:
Common Issues:
| Issue | Symptom | Solution |
|---|---|---|
| Expired SAS token | Package URL returns 403 | Generate new SAS with longer expiry |
| Package URL not accessible | Package URL returns 404 | Verify blob exists and URL is correct |
| Wrong package structure | Files in subfolder | Ensure files are at ZIP root, not in a nested folder |
| Corrupted package | Host startup errors | Re-deploy with fresh package |
| Storage firewall blocking | Timeout errors | Allow Function App access to storage |
Symptoms:
Why This Happens:
Azure Functions provides configuration options to filter which functions are loaded. If these are misconfigured, functions may be excluded.
Configuration Options to Check:
Solution:
Symptoms:
Why This Happens:
When your Function App has networking restrictions configured (VNet integration, private endpoints, access restrictions), the Azure Portal may not be able to communicate with your function app to discover and display functions. The portal needs to reach your app's admin endpoints to enumerate functions.
Common Networking Configurations That Cause Issues:
| Configuration | Impact | Portal Behavior |
|---|---|---|
| Private Endpoint only (no public access) | Portal can't reach admin APIs | "Unable to reach function app" |
| Access Restrictions (IP filtering) | Portal IPs blocked | Timeout loading functions |
| VNet Integration with forced tunneling | Outbound calls fail | Host can't start properly |
| Storage account behind firewall | Host can't access keys/state | Host startup failures |
| NSG blocking outbound traffic | Can't reach Azure services | Various failures |
Important Note:
When your Function App is fully private (no public access), you won't be able to see functions in the Azure Portal from outside your network. This is expected behavior.
The Azure Portal provides built-in diagnostics to help troubleshoot function visibility issues.
How to Access:
Function App Down or Reporting Errors
Use this checklist to quickly diagnose functions not appearing in the portal:
If you cannot see functions in the portal but believe they're deployed, you can verify directly: Functions API
List All Functions:
curl "https://<app>.azurewebsites.net/admin/functions?code=<master-key>"
Or directly from here with auth: List Functions
Check Specific Function:
curl "https://<app>.azurewebsites.net/admin/functions/<function-name>?code=<master-key>"Get Host Status:
curl "https://<app>.azurewebsites.net/admin/host/status?code=<master-key>"If these APIs return your functions but the portal doesn't show them, the issue is likely a portal caching/sync problem (see Solution #6).
Functions not appearing in the Azure Portal can be caused by various issues, from deployment problems to configuration filtering. By following the troubleshooting steps outlined in this article, you should be able to identify and resolve the issue.
Key Takeaways:
If you continue to experience issues after following these steps, consider opening a support ticket with Microsoft Azure Support, providing:
Have questions or feedback? Leave a comment below.
Let us kick things off in the Azure portal. To get our OpenClaw agent thinking like a genius, we need to deploy our models in Microsoft Foundry. For this guide, we are going to focus on deploying gpt-5.2-codex on Microsoft Foundry with OpenClaw.
Navigate to your AI Hub, head over to the model catalog, choose the model you wish to use with OpenClaw and hit deploy. Once your deployment is successful, head to the endpoints section.
Important: Grab your Endpoint URL and your API Keys right now and save them in a secure note. We will need these exact values to connect OpenClaw in a few minutes.
Next up, we need to get OpenClaw running on your machine. Open up your terminal and run the official installation script:
curl -fsSL https://openclaw.ai/install.sh | bashThe wizard will walk you through a few prompts. Here is exactly how to answer them to link up with our Azure setup:
Now for the fun part. We need to manually configure OpenClaw to talk to Microsoft Foundry. Open your configuration file located at ~/.openclaw/openclaw.json in your favorite text editor.
Replace the contents of the models and agents sections with the following code block:
{ "models": { "providers": { "azure-openai-responses": { "baseUrl": "https://<YOUR_RESOURCE_NAME>.openai.azure.com/openai/v1", "apiKey": "<YOUR_AZURE_OPENAI_API_KEY>", "api": "openai-responses", "authHeader": false, "headers": { "api-key": "<YOUR_AZURE_OPENAI_API_KEY>" }, "models": [ { "id": "gpt-5.2-codex", "name": "GPT-5.2-Codex (Azure)", "reasoning": true, "input": ["text", "image"], "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 }, "contextWindow": 400000, "maxTokens": 16384, "compat": { "supportsStore": false } }, { "id": "gpt-5.2", "name": "GPT-5.2 (Azure)", "reasoning": false, "input": ["text", "image"], "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 }, "contextWindow": 272000, "maxTokens": 16384, "compat": { "supportsStore": false } } ] } } }, "agents": { "defaults": { "model": { "primary": "azure-openai-responses/gpt-5.2-codex" }, "models": { "azure-openai-responses/gpt-5.2-codex": {} }, "workspace": "/home/<USERNAME>/.openclaw/workspace", "compaction": { "mode": "safeguard" }, "maxConcurrent": 4, "subagents": { "maxConcurrent": 8 } } } }
You will notice a few placeholders in that JSON. Here is exactly what you need to swap out:
| Placeholder Variable | What It Is | Where to Find It |
| <YOUR_RESOURCE_NAME> | The unique name of your Azure OpenAI resource. | Found in your Azure Portal under the Azure OpenAI resource overview. |
| <YOUR_AZURE_OPENAI_API_KEY> | The secret key required to authenticate your requests. | Found in Microsoft Foundry under your project endpoints or Azure Portal keys section. |
| <USERNAME> | Your local computer's user profile name. | Open your terminal and type whoami to find this. |
After saving the configuration file, you must restart the OpenClaw gateway for the new Foundry settings to take effect. Run this simple command:
openclaw gateway restartIf you are curious about why we configured the JSON that way, here is a quick breakdown of the technical details.
Authentication Differences Azure OpenAI uses the api-key HTTP header for authentication. This is entirely different from the standard OpenAI Authorization: Bearer header. Our configuration file addresses this in two ways:
Important Note: Your API key must appear in both the apiKey field AND the headers.api-key field within the JSON for this to work correctly.
The Base URL Azure OpenAI's v1-compatible endpoint follows this specific format: https://<your_resource_name>.openai.azure.com/openai/v1
The beautiful thing about this v1 endpoint is that it is largely compatible with the standard OpenAI API and does not require you to manually pass an api-version query parameter.
Model Compatibility Settings
If you want OpenClaw to accurately track your token usage costs, you can update the cost fields from 0 to the current Azure pricing. Here are the specs and costs for the models we just deployed:
Model Specifications
| Model | Context Window | Max Output Tokens | Image Input | Reasoning |
| gpt-5.2-codex | 400,000 tokens | 16,384 tokens | Yes | Yes |
| gpt-5.2 | 272,000 tokens | 16,384 tokens | Yes | No |
Current Cost (Adjust in JSON)
| Model | Input (per 1M tokens) | Output (per 1M tokens) | Cached Input (per 1M tokens) |
| gpt-5.2-codex | $1.75 | $14.00 | $0.175 |
| gpt-5.2 | $2.00 | $8.00 | $0.50 |
And there you have it! You have successfully bridged the gap between the enterprise-grade infrastructure of Microsoft Foundry and the local autonomy of OpenClaw. By following these steps, you are not just running a chatbot; you are running a sophisticated agent capable of reasoning, coding, and executing tasks with the full power of GPT-5.2-codex behind it.
The combination of Azure's reliability and OpenClaw's flexibility opens up a world of possibilities. Whether you are building an automated devops assistant, a research agent, or just exploring the bleeding edge of AI, you now have a robust foundation to build upon.
Now it is time to let your agent loose on some real tasks. Go forth, experiment with different system prompts, and see what you can build. If you run into any interesting edge cases or come up with a unique configuration, let me know in the comments below. Happy coding!
On this episode we dive into Tiny Tool Town — a GeoCities‑style app hub for tiny developer utilities — and James walks us through building Tiny Clips, a Mac toolbar screen‑capture app he prototyped and shipped using Copilot, agentic workflows, and a plan‑implement‑review cycle. Expect practical takeaways on multi‑model AI pipelines (planning with 5.2, coding with Codex/Opus), CI/publishing tips, sandboxing/TestFlight pitfalls, and why tiny apps are booming.
⭐⭐ Review Us ⭐⭐
Machine transcription available on http://mergeconflict.fm
Links: