Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Summary
This article helps you troubleshoot Azure Functions runtime upgrade issues that occur when you upgrade the runtime version or language version of a function app. It covers an unreachable runtime, missing modules, worker process failures, and functions that don't appear after an upgrade.
Use the following sections to validate your app before upgrading, change runtime and language version settings, and diagnose problems after migration.
Current end-of-support notices
The following Azure Functions features and runtime versions have active retirement deadlines. Running an unsupported version can lead to issues, performance implications, and ineligibility for security patches or bug fixes. Upgrade before the end-of-support date.
| Feature or version | End-of-support date | Action required |
|---|---|---|
| Azure Functions runtime v1 | September 14, 2026 | Migrate to runtime v4. See Migrate from v1 to v4. |
| .NET in-process model | November 10, 2026 | Migrate to the isolated worker model. This requires code changes, not just a settings change. See Migrate .NET apps to isolated worker model. |
| Runtime v3 on Linux Consumption plan | September 30, 2026 | Migrate to runtime v4 or move to the Flex Consumption plan. See Migrate from v3 to v4. |
For more information and migration guidance, see the following resources:
- Azure Functions language support policy
- Functions runtime versions
- Migrate apps from Azure Functions version 3.x to version 4.x
- Migrate apps from Azure Functions version 1.x to version 4.x
Validate function app compatibility for runtime v4
To validate your function app's compatibility with runtime v4, follow these steps:
- Go to your function app in the Azure portal. Select Diagnose and solve problems to open Azure Functions diagnostics. In the Search bar, type Updating Functions Language or Runtime Version to run it directly. The diagnostic report includes guidance on the update. After validation completes, follow the recommendations and address any issues in your app.
- Use the pre-upgrade validator to identify potential problems when migrating your function app to 4.x. From the same diagnostics search bar, type Functions 4.x Pre-Upgrade Validator to run it directly. After validation completes, follow the recommendations and address any issues in your app.
- Upgrade your local project environment to version 4.x. Fully test your app locally by using version 4.x of the Azure Functions core tools.
- Consider using a staging slot to test and verify your app in Azure on the new runtime version before deploying to a production slot. Remember to set
WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0for migration with slots. Don't markFUNCTIONS_WORKER_RUNTIMEas a deployment slot setting.
Change the Azure Functions runtime version for Windows
Follow these steps:
- Set FUNCTIONS_EXTENSION_VERSION, which is an app setting in the Azure portal Configuration pane, to
~4. For more information, see Change the runtime version. - Set the
netFrameworkVersionsite setting to target .NET 8.netFrameworkVersionis a SiteConfig setting, not an app setting. It's not directly available in the Azure portal. Set it by using Azure Resource Explorer or Azure CLI/PowerShell.
For more information, see Azure Functions runtime versions.
Change the Azure Functions runtime version for Linux
Follow these steps:
- Set FUNCTIONS_EXTENSION_VERSION, which is an app setting in the Azure portal Configuration pane, to
~4. For more information, see Change the runtime version. - Set
LinuxFxVersion, by using a command-line interface (CLI) tool, to<Language>|<LanguageVersion>, based on the language used. For more information, see Using LinuxFxVersion for Linux Function Apps. For example, to update to .NET 8 by using the isolated worker model, setLinuxFxVersiontoDOTNET-ISOLATED|8.0andFUNCTIONS_EXTENSION_VERSIONto~4.
For more information, see Azure Functions runtime versions.
Get supported languages by runtime version
See the list of supported languages by the runtime version.
Update the language version setting for the function app after updating the code
Use the option that best suits your scenario, and then follow the appropriate steps:
- PowerShell - In the Azure portal, set the
PowerShell Core version. For more information, see Change the PowerShell version. - Python - Running Python function apps on Windows isn't supported; use Linux hosting instead. Set
linuxFxVersiontopython|3.x. For more information, see Change the Python version. - Java - Specify the language version by using
-DjavaVersionas 11, 17, or 21. For more information, see Specify the deployment version. - Node, JavaScript - For Windows, set the
WEBSITE_NODE_DEFAULT_VERSIONapp setting to~22. For Linux, setlinuxFxVersion, by using CLI, tonode|22. For more information, see Set the Node version.
Use Azure Functions app proxies in version 4.x
Azure Functions proxies is a legacy feature for versions 1.x through 3.x. You can temporarily re-enable proxies in version 4.x to help you upgrade your function apps to the latest runtime version. However, proxies aren't automatically available in version 4.x — you must explicitly re-enable them by adding EnableProxies to the AzureWebJobsFeatureFlags application setting. Even when re-enabled, you can't manage proxies through the Azure portal. You must edit the proxies.json file directly. For more information, see Re-enable proxies in Functions v4.x.
We recommend that you switch to integrating your function apps with Azure API Management as soon as possible. API Management lets you take advantage of a more complete set of features to define, secure, manage, and monetize your Functions-based APIs. For more information, see How to migrate to APIM and Integrate Functions with APIM using Visual Studio.
Get a list of any instances of Azure Functions that use runtime version 1.x, 2.x, or 3.x
Follow these steps:
- Go to your function app in the Azure portal.
- Select Diagnose and solve problems to open Azure Functions diagnostics.
- In the Search bar, type Updating Functions Language or Runtime Version to run it directly.
- In the diagnostic report, scroll down and select List All Azure Functions > View Details.
- Set the search filters and select Show to get the list of functions apps in the current subscription.
You can also use App Service REST API calls (GetConfiguration) to determine this information. LinuxFxVersion and WindowsFxVersion provide the version information.
For bulk discovery across a subscription, see Keep your Azure Functions up to date - Identify apps running on retired versions.
Move a .NET Framework 4.6.1 app from Functions runtime v1 to v4
.NET Framework 4.6.1 reached end of life, so upgrade apps to .NET Framework 4.8. In Functions v4, you can run a .NET Framework 4.8 app in out-of-process mode. For more information, see the isolated process guide.
A migrated function app isn't starting or has some runtime issues
Use the following guidelines to troubleshoot and resolve common issues with migrated function apps:
- For .NET apps, update the code to .NET 8 (or a later supported version) before building and deploying.
- Double-check the runtime version of the app in the Azure portal.
- For Windows apps, set
netFrameworkVersionby using CLI or PowerShell. - Make sure you're using extension bundles version 4.x, as recommended. Version 4.x of the Azure Functions runtime requires extension bundle version
[4.0.0, 5.0.0). - Signing in to Azure Storage by using AzureWebJobsDashboard isn't supported in 4.x. Instead, use Application Insights for monitoring.
- If you receive a message that Azure Functions runtime is unreachable and you're sharing storage accounts, see Host ID considerations.
- Azure Functions 4.x doesn't support Node.js 10 and 12, Python 3.6, and PowerShell 6. For more information, see Language versions supported for the v4 runtime.
- For Python functions, if there are errors related to module collision and module not found, try setting
PYTHON_ISOLATE_WORKER_DEPENDENCIESto 1 in app settings. This setting has no effect on Python 3.13 and later, where dependency isolation is built-in. - For Node.js function apps on Windows, if the app fails to start after upgrading, check whether the app is running in a 32-bit worker process. Try setting
use32BitWorkerProcesstofalseunder Configuration > General Settings in the Azure portal. - If the Azure portal shows read-only mode or a deployment returns
HTTP 409 Conflict, the app is running from a deployment package. Updatehost.jsonin the source repository and redeploy rather than editing files in the portal. - If Secure Socket Layer (SSL) or connection errors occur at startup, confirm that outbound access to
functionscdn.azureedge.net(the extension bundle content delivery network (CDN) endpoint) and to your storage account endpoints isn't blocked. - Review Migrate existing function apps.
- For runtime issues, from the Diagnose and Solve Problems option in the Azure portal, search for Function app down or reporting errors and review the diagnostic report for error messages and solutions. Also review the Function Configuration checks detector to make sure that the configuration is correct.
- Review the blog Issues when upgrading Azure Functions to V4 for additional troubleshooting tips.
.NET in-process to isolated worker model migration
The following guidelines help you migrate a .NET in-process function app to the isolated worker model.
Symptoms
The following symptoms might indicate that a .NET in-process function app needs to be migrated to the isolated worker model:
- The portal shows a deprecation notification for the .NET in-process model.
- After changing
FUNCTIONS_WORKER_RUNTIMEtodotnet-isolated, the app fails to start. - Functions return
HTTP 500with JSON deserialization errors after migration. - Functions aren't listed in the portal after migration.
Cause
Migration from the in-process model to the isolated worker model requires both application code changes and platform configuration updates. Changing only the app setting without updating the code (or vice versa) causes a mismatch that prevents the function app from starting.
Common specific causes include the following:
FUNCTIONS_WORKER_RUNTIMEchanged todotnet-isolatedbut deployed artifacts still target the in-process model.- Project file not updated to reference isolated worker packages.
- Missing
Program.csstartup entry point required by the isolated worker host. - Function attributes not updated (for example, still using
[FunctionName]instead of[Function]).
Resolution
Follow these steps to migrate your .NET in-process function app to the isolated worker model:
Verify the execution model before making changes. Use Azure CLI to run the following command.
az functionapp config appsettings list --name <app-name> --resource-group <rg> --query "[?name=='FUNCTIONS_WORKER_RUNTIME'].value" -o tsvdotnet= in-process model (requires migration)dotnet-isolated= already using isolated worker model
Update the application code first. Make the necessary changes to your project file and code to target the isolated worker model:
- Update the project file target framework (for example,
net8.0ornet10.0). - Replace in-process SDK packages with isolated worker packages.
- Add a
Program.csfile with the isolated worker host builder. - Replace
[FunctionName]with[Function]attributes. - Update binding and trigger packages to isolated worker versions.
- Update the project file target framework (for example,
Update platform settings after code is ready. Run the following Azure CLI command to update the function app settings.
az functionapp config appsettings set --name <app-name> --resource-group <rg> --settings FUNCTIONS_WORKER_RUNTIME=dotnet-isolated FUNCTIONS_EXTENSION_VERSION=~4Deploy and validate. Follow these steps:
- Use a staging slot if available.
- Set
WEBSITE_OVERRIDE_STICKY_EXTENSION_VERSIONS=0when using slots for migration. - Don't mark
FUNCTIONS_WORKER_RUNTIMEas a slot setting. - Restart the function app after setting changes.
For complete migration guidance, see Migrate .NET apps from the in-process model to the isolated worker model.
Node.js version upgrade failures
The following guidelines help you troubleshoot Node.js version upgrade failures in Azure Functions.
Symptoms
The following symptoms might indicate Node.js version upgrade failures:
- Function app fails to start after upgrading to a newer Node.js version.
SyntaxErrorduring startup.- Functions not discovered or indexed.
- Trigger synchronization fails with "Bad Request" after changing Node.js version.
- Startup timeout (AZFD0005) after package upgrades.
Cause
The following table summarizes common causes for Node.js version upgrade failures.
| Symptom | Likely cause |
|---|---|
| SyntaxError at startup | Code uses syntax not supported by the configured Node.js version, or version mismatch between local development environment (dev) and cloud. |
| Functions not indexed | Older programming model used with a Node.js version that requires a newer model. Check supported languages for compatibility. |
| Trigger sync "Bad Request" | Certain newer Node.js versions require 64-bit platform on Windows. |
| Startup timeout (AZFD0005) | Heavy initialization in index.js exceeding host startup tolerance. |
| SSL connection errors during startup | Outdated extension bundle can't reach CDN endpoint. |
Resolution
Follow these steps to resolve Node.js version upgrade failures:
Check programming model compatibility. Newer Node.js versions might require a newer programming model. Check Supported languages in Azure Functions to verify which programming model your target Node.js version requires. If migration is needed, see Upgrade to Azure Functions Node.js programming model v4.
Verify version configuration matches deployment. Use the following steps as applicable to your scenario:
Windows - Check that the
WEBSITE_NODE_DEFAULT_VERSIONapp setting matches your code target.Linux - Check
LinuxFxVersion. Use Azure CLI and run the following command.az functionapp config show --name <app-name> --resource-group <rg> --query "linuxFxVersion" -o tsv
Ensure the platform is set correctly. If you're using a newer Node.js version on Windows, some versions require 64-bit. Use Azure CLI to run the following command.
az functionapp config set --name <app-name> --resource-group <rg> --use-32bit-worker-process falseUpdate the extension bundle and ensure
host.jsonuses extension bundle v4. Run the following command."extensionBundle": { "id": "Microsoft.Azure.Functions.ExtensionBundle", "version": "[4.0.0, 5.0.0)" }
Python version upgrade failures
The following section summarizes common causes for Python version upgrade failures.
Symptoms
The following symptoms indicate Python version upgrade failures:
ModuleNotFoundErrorafter changing Python version.ModuleNotFoundError: No module named '_cffi_backend'.- Functions not discovered: "No job functions found."
- ZIP deployment returns HTTP 503 after version change.
- Remote build fails for newer Python versions.
Important
Running Python functions on Windows function apps isn't supported. Use Linux hosting exclusively.
Cause
The following table maps common symptoms to their likely causes.
| Symptom | Likely cause |
|---|---|
| ModuleNotFoundError | Deployment package contains dependencies built for previous Python version. |
_cffi_backend missing |
Native C extension not compiled for target Python version. |
| Functions not found | Local dev container or Docker image not updated to target Python version. |
| 503 on ZIP deploy | Deploying a package built for an older Python version to a newer runtime. |
| Remote build failure | Network restrictions blocking Oryx build endpoints. |
Resolution
Follow these steps to resolve Python version upgrade failures:
Rebuild the deployment package for the target Python version. Run the following command.
# Rebuild with target Python version pip install -r requirements.txt --target .python_packages/lib/site-packagesDeploy with remote build enabled. Run the following command.
az functionapp deployment source config-zip --name <app-name> --resource-group <rg> --src <package.zip> --build-remote trueRequired app settings for remote build:
ENABLE_ORYX_BUILD=trueandSCM_DO_BUILD_DURING_DEPLOYMENT=true.Verify the runtime is set to the target version before deploying. Run the following command.
az functionapp config set --name <app-name> --resource-group <rg> --linux-fx-version "PYTHON|<target-version>"Important
Set the runtime version before deploying so the remote build compiles dependencies against the correct Python version.
For module collision or module-not-found errors, set
PYTHON_ISOLATE_WORKER_DEPENDENCIESto1in app settings. This setting has no effect on Python 3.13 and later, where isolation is built-in.
Extension bundle upgrade failures
The following section summarizes common causes for extension bundle upgrade failures.
Symptoms
The following symptoms indicate extension bundle upgrade failures:
- SSL connection errors during startup after Node.js or runtime upgrade.
HTTP 409 Conflictwhen trying to savehost.jsonchanges in the portal.- Portal shows "deprecated extension bundle version" warning.
- Functions fail after upgrading extension bundle version.
Cause
The following table maps common symptoms to their likely causes.
| Symptom | Likely cause |
|---|---|
| SSL or connection errors at startup | The outdated extension bundle range and runtime can't download bundle from CDN. |
HTTP 409 Conflict |
The function app uses run-from-package deployment and files are read-only. |
| Functions fail after bundle upgrade | There is a binding incompatibility between extension bundle v4 and legacy code patterns. |
Resolution
Follow these steps to resolve extension bundle upgrade failures:
Update the
host.jsonextension bundle configuration. Run the following command.{ "version": "2.0", "extensionBundle": { "id": "Microsoft.Azure.Functions.ExtensionBundle", "version": "[4.0.0, 5.0.0)" } }Note
The
"version": "2.0"at the root ofhost.jsonis the schema version, not the extension bundle version.If you're using run-from-package or at CI (Continuous Integration (CI)) or Continuous Delivery (CD) deployment, do the following:
- Don't edit
host.jsonin the portal. Update it in your source repository. - Redeploy after changes.
- Don't edit
Verify the CDN endpoint access. The function app must have outbound access to
functionscdn.azureedge.netfor extension bundle downloads. If you're using VNet integration with egress restrictions, allow list this endpoint.
SSL and TLS errors during startup
The following section describes common SSL and TLS errors that occur during function app startup and their resolutions.
Symptoms
The following are common symptoms of SSL and TLS errors during function app startup:
- Error: "The SSL connection could not be established."
- Error: "Unable to read data from the transport connection."
- Error: "Connection reset by peer."
- Error: "RemoteCertificateNameMismatch."
- Errors appear during function app startup before any customer code executes.
Cause
These errors typically occur when the function app can't reach required platform endpoints during startup. Common causes include the following:
- Egress restrictions block access to
functionscdn.azureedge.net(extension bundle CDN) or other platform endpoints. - Private DNS misconfiguration causes requests to resolve to wrong endpoints.
- Network Address Translation (NAT) gateway or forced tunneling routes startup traffic through a path that blocks or modifies TLS connections.
Resolution
Follow these steps to resolve SSL and TLS errors during function app startup:
- Allow required outbound endpoints, including:
functionscdn.azureedge.net— extension bundle downloads- Storage account endpoints (blob, file, queue, table)
login.microsoftonline.com— authentication- Platform-specific endpoints per App Service networking documentation
- For private endpoint or DNS issues, do the following:
- Verify DNS resolution from within the VNet returns correct private IP addresses.
- Check for duplicate or stale private endpoint A records.
- Confirm DNS zones are linked to the correct VNet.
- For NAT gateway issues, test with egress restrictions temporarily relaxed to confirm the endpoint is the issue.
Functions not appearing after version upgrade
The following sections describe common issues and resolutions when functions don't appear after a version upgrade.
Symptoms
The following symptoms might indicate that functions don't appear after a version upgrade:
- The functions list in the portal is empty after changing the language version.
- You see the message: "No job functions found."
- Azure Functions metadata fails to load during startup.
Cause
The following table summarizes common scenarios and their likely causes.
| Scenario | Likely cause |
|---|---|
| Python version changed without redeploying | Old dependencies are incompatible with the new Python version. |
| Node.js upgraded without programming model migration | The older programming model can't index functions on newer Node.js versions. |
| .NET isolated migration incomplete | The deployed artifacts still target the in-process model. |
| Runtime version changed to unsupported value | Check the Supported languages. |
Resolution
Follow these steps to resolve issues when functions don't appear after a version upgrade:
- Verify the configured runtime version is supported. For more information, seeSupported languages in Azure Functions.
- Check that deployed artifacts match the configuration. Follow these guidelines:
- For .NET: Ensure deployed DLLs target the correct framework.
- For Python: Ensure dependencies are rebuilt for the target version.
- For Node.js: Ensure you're using the correct programming model for your target version.
- Review startup logs. Follow these steps:
- Go to Diagnose and solve problems > Function App Down or Reporting Errors.
- Check Application Insights traces for worker startup errors.
- If functions disappeared after a version change, revert to the previous working version to restore functionality. Then, plan the upgrade with a proper rebuild and redeploy cycle.
Worker process exit codes
The following section describes common worker process exit codes, their causes, and resolutions.
Symptoms
The following errors might indicate worker process exit issues:
- Error: "dotnet exited with code 150 (0x96)."
- Error: "Failed to start language worker process for runtime: dotnet-isolated."
- Error: "Node process exited with code 1."
Cause
The following table summarizes common worker process exit codes, their likely causes, and suggested resolutions.
| Exit code | Likely cause |
|---|---|
| 150 (0x96) | .NET target framework isn't supported on the current hosting plan, or stale hosting artifacts from a previous runtime. Check Supported languages for plan compatibility. |
| 1 (Node.js) | There's a syntax error or module loading failure in the Node.js application. |
| General worker failure | Dependencies were compiled for the wrong OS, architecture, or network blocking required endpoints |
Resolution
Follow these steps to resolve common worker process exit issues:
For exit code 150, follow these steps:
- Verify the target framework is supported on your hosting plan.
- Ensure deployment produces a clean publish output without stale artifacts.
For Node.js exit code 1, follow these steps:
- Check that the Node.js version in the cloud matches your local development version.
- Review the application's entry point for syntax not supported by the configured version.
For general worker process failures, follow these steps:
- Check Application Insights for detailed startup exception traces.
- Go to Diagnose and solve problems > Function App Down or Reporting Errors.
- Verify outbound connectivity to required platform endpoints.
References
- Azure Functions language stack support policy
- Supported languages in Azure Functions
- Migrate .NET apps to isolated worker model
- Migrate from Functions v3 to v4
- Migrate from Functions v1 to v4
- Upgrade to Node.js programming model v4
- Update language stack versions in Azure Functions
- Keep Your Azure Functions Up to Date: Identify Apps Running on Retired Versions