.NET 6 on Cloud Functions (2nd gen)


Back in August, we announced the 2nd generation of Cloud Functions with longer request processing times, larger instances, new event sources with Eventarc, and more.

A few weeks ago, .NET 6 support (public preview) was silently added to Cloud Functions.

Let’s see how to deploy some .NET 6 functions to Cloud Functions 2nd gen.

Functions Framework for .NET

Functions Framework for .NET is the easiest way to create .NET functions for consuming HTTP or CloudEvent requests.

Install the template package into the .NET tooling:

dotnet new -i Google.Cloud.Functions.Templates

This installs three templates for .NET. You can verify that templates are installed by running:

dotnet new --list

Templates                                            Short Name
----------------------------------------------------------------------
Google Cloud Functions CloudEvent Function           gcf-event
Google Cloud Functions CloudEvent Function (Untyped) gcf-untyped-event
Google Cloud Functions HttpFunction                  gcf-http

Note: Functions Framework for .NET currently supports .NET Core 3.1, but .NET 6.0 support is coming soon. You need to change the target framework of generated projects to .NET 6.0 later (see below).

HTTP Function

Create a function that handles HTTP requests using the gcf-http template:

mkdir HelloHttp
cd HelloHttp
dotnet new gcf-http

This creates a project and a Function.cs file for responding to HTTP requests.

Change the target framework to net6.0 in the .csproj file:

<TargetFramework>net6.0</TargetFramework>

Deploy to Cloud Functions using --trigger-http --gen2 flags and the dotnet6 runtime:

gcloud functions deploy hello-http-function \
    --allow-unauthenticated \
    --entry-point HelloHttp.Function \
    --gen2 \
    --region us-central1 \
    --runtime dotnet6 \
    --trigger-http

After a minute or two, you should see the Cloud Function deployed in Cloud Console:

HTTP Cloud Function

You can call the function by sending an HTTP request with gcloud:

gcloud functions call hello-http-function \
    --gen2 \
    --region us-central1

CloudEvent Function

Alternatively, you can create a function that consumes CloudEvent requests using the gcf-event template:

mkdir HelloGcs
cd HelloGcs
dotnet new gcf-event

This creates a project and a Function.cs file for responding to CloudEvent requests. The function also parses the data of the CloudEvent into StorageObjectData.

Change the target framework to net6.0 in the .csproj file:

<TargetFramework>net6.0</TargetFramework>

Deploy to Cloud Functions using --trigger-event --gen2 flags and the dotnet6 runtime:

gcloud functions deploy hello-gcs-function \
    --allow-unauthenticated \
    --entry-point HelloGcs.Function \
    --gen2 \
    --region us-central1 \
    --runtime dotnet6 \
    --trigger-event google.storage.object.finalize \
    --trigger-resource ${BUCKET_NAME}

In this case, you specify google.storage.object.finalize in --trigger-event and the bucket name in --trigger-resource to listen for new file creations in a bucket.

After a couple of minutes, the function should be visible in Cloud Console:

CloudEvent Cloud Function

You can trigger the function by uploading a file to the storage bucket:

echo "Hello from Storage" > random.txt
gsutil cp random.txt gs://${BUCKET_NAME}

If you want to learn more about .NET 6 and Cloud Functions, you can find more samples in our .NET on Google Cloud Functions repo on GitHub and try out the Google Cloud Functions in C# codelab.

For questions or feedback, feel free to reach out to me on Twitter @meteatamel.


See also