I’ve recently been working with Azure Isolated Functions for .Net 6. This is a kind of getting started guide – especially if you’re coming across from non-isolated.
What’s an Isolated Function
As is explained here, an isolated function is a function that runs out of process and self-hosted. Previously, there were issues with dependency conflicts because you were married to the function host.
What’s the Difference Between an Isolated an Non-Isolated Function?
A non-isolated function can have just one file in the project; for example:
And in that file, you can have a single method, decorated with a Function attribute:
[FunctionName("Function1")] public async Task<HttpResponseData> Run(. . .
However, for an Isolated Function, you’ll need a Program.cs, with something along the lines of the following as a minimum:
public static async Task Main(string[] args) { var host = new HostBuilder() .ConfigureFunctionsWorkerDefaults() .Build(); await host.RunAsync(); }
Further, the dependency libraries change; Isolated Functions use the following libraries (these obviously depend slightly on your bindings, but are a good start):
<PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.Abstractions" Version="1.1.0" /> <PackageReference Include="Microsoft.Azure.Functions.Worker.Sdk" Version="1.3.0" /> <PackageReference Include="Microsoft.Azure.Functions.Worker" Version="1.6.0" /> <PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.Http" Version="3.0.13" />
Finally, you’ll need to change your decorator to:
[Function("Function1")]
From:
[FunctionName("Function1")]
FunctionName uses the old WebJobs namespace.
Some possible errors…
At least one binding must be declared.
This error typically happens in the following scenario: the method has a [Function] decorator, but within the method signature, there are no valid Bindings – that is, nothing that the Azure Function ecosystem understands. For example; the following signature would give that error:
[Function("Function1")] public void MyFunc() { }
Specified condition “$(SelfContained)” evaluates to “” instead of a boolean.
For this, you need to specify the output type to be an executable:
<PropertyGroup> <TargetFramework>net6.0</TargetFramework> <AzureFunctionsVersion>v4</AzureFunctionsVersion> <OutputType>Exe</OutputType> <Nullable>enable</Nullable> </PropertyGroup>