In a recent blog post, Microsoft announced Azure Functions 3.0 go-live release is now available, making it possible to build and deploy 3.0 functions in production. The new capabilities in this release include support for .NET Core 3.1 and Node 12. In addition, Microsoft claims previous versions of Azure Functions should be able to run in the version 3.0 runtime without code changes due to this latest release being highly backwards compatible.
While the runtime is ready for production, there are some additional tooling and performance optimizations being rolled out soon. The product team explains:
While the runtime is now ready for production, and most of the tooling and performance optimizations are rolling out soon, there are still some tooling improvements to come before we announce Functions 3.0 as the default for new apps. We plan to announce Functions 3.0 as the default version for new apps in January 2020.
Microsoft has published the tooling and performance gaps that they are tracking, including better support for Visual Studio, Azure portal and Azure CLI.
Even though some tooling is still to be made available, the new release addresses some concerns for developers who are using .NET Core inside of Azure Functions. Up until this release, Azure Functions 2.0 only supported .NET Core 2.2 and .NET Core 2.2 reached end of support on December 23rd, 2019. In a recent Twitter post, Rick van den Bosh, a Microsoft MVP and cloud architect, explains:
The initial planning for Functions V3 GA was Q1 of 2020. This would cause issues since there wouldn't be a supported .NET Core version to run Azure Functions on, possibly for a few months. This doesn't just solve that; Functions V3 will be the default in January 2020.
Even though .NET Core 2.2 has reached end of support, previous versions of Azure Functions will continue to be supported, Microsoft explains:
Users running on earlier versions of Azure Functions will continue to be supported and we’re not deprecating either 1.0 or 2.0 at this time. Customers running Azure Functions targeting 1.0 or 2.0 will also continue to receive security updates and patches moving forward—to both the Azure Functions runtime and the underlying .NET runtime—for apps running in Azure.
Depending upon the language runtime, developers may see some improved performance in the form of invocation overhead, when moving to Azure Functions 3.0, particularly when using the Python language. Adir Shemesh, a software engineer at Nuweba, explains:
Python functions see the most drastic invocation overhead reduction in Azure Functions 3.0. Using FaaStest's line view, we can see that in Azure Functions 2.0, the invocation overhead grew with the number of concurrent invocations.
Overall, Shemesh is excited for Azure Functions 3.0 and offers the following summary:
Azure Functions 3.0 is, indeed, a very exciting update. It allows using newer function runtimes and it brings some performance improvements, but it currently seems that .NET functions on Linux suffer from an increase in the invocation overhead.
Developers who experience challenges while upgrading to Azure Functions 3.0 can log issues at the Azure Functions’ GitHub repository.