Langages .NET
Il est possible d'écrire une fonction dans différents langages .NET (C#, Visual Basic ou F#). Commune à tous les langages, la tâche de base consiste à créer une classe mettant en œuvre l'une des interfaces du framework des fonctions :
IHttpFunction
- L'interface générique
ICloudEvent<T>
- L'interface non générique
ICloudEvent
Ce document fournit des exemples pour F# et Visual Basic.
Modèles
Notez que pour exécuter les exemples de ce document, vous utiliserez les modèles :
Installez le SDK .NET.
Installez le package de modèles :
dotnet new install Google.Cloud.Functions.Templates
Des modèles sont fournis pour les trois types de fonctions en C# (par défaut), F# et Visual Basic. Lorsque vous créez un projet à partir d'un modèle, spécifiez -lang f#
pour créer un projet F# ou -lang vb
pour créer un projet Visual Basic. Par exemple, pour créer une fonction CloudEvent sans type pour Visual Basic, exécutez la commande suivante :
dotnet new gcf-untyped-event -lang vb
Exemples de fonctions HTTP
Les fonctions HTTP vous permettent d'appeler votre fonction via une requête HTTP(S). Les exemples suivants génèrent le message "Hello World!"
.
F#
namespace HelloWorldFSharp open Google.Cloud.Functions.Framework open Microsoft.AspNetCore.Http type Function() = interface IHttpFunction with member this.HandleAsync context = async { do! context.Response.WriteAsync "Hello World!" |> Async.AwaitTask } |> Async.StartAsTask :> _
Visual Basic
Imports Google.Cloud.Functions.Framework Imports Microsoft.AspNetCore.Http Public Class CloudFunction Implements IHttpFunction Public Async Function HandleAsync(context As HttpContext) As Task Implements IHttpFunction.HandleAsync Await context.Response.WriteAsync("Hello World!") End Function End Class
Fichiers de projet pour les exemples HTTP
Voici les fichiers de projet pour les exemples ci-dessus :
F#
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net6.0</TargetFramework> </PropertyGroup> <ItemGroup> <Compile Include="Function.fs" /> </ItemGroup> <ItemGroup> <PackageReference Include="Google.Cloud.Functions.Hosting" Version="2.2.1" /> </ItemGroup> </Project>
Visual Basic
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <RootNamespace>HelloWorldVb</RootNamespace> <TargetFramework>net6.0</TargetFramework> </PropertyGroup> <ItemGroup> <PackageReference Include="Google.Cloud.Functions.Hosting" Version="2.2.1" /> </ItemGroup> </Project>
Déployer les fonctions HTTP
F#
gcloud functions deploy fsharp-helloworld --no-gen2 --entry-point HelloWorldFSharp.Function --runtime dotnet6 --trigger-http --allow-unauthenticated
Visual Basic
gcloud functions deploy vb-helloworld --no-gen2 --entry-point HelloWorldVb.CloudFunction --runtime dotnet6 --trigger-http --allow-unauthenticated
Exemples CloudEvent
Utilisez les fonctions CloudEvent lorsque vous souhaitez que votre fonction Cloud Run soit appelée indirectement en réponse à un événement asynchrone, tel qu'un message sur un sujet Pub/Sub, une modification dans un bucket Cloud Storage ou un événement Firebase.
F#
namespace HelloPubSubFSharp open Google.Cloud.Functions.Framework open Google.Events.Protobuf.Cloud.PubSub.V1 open Microsoft.Extensions.Logging open System open System.Threading.Tasks type Function(logger: ILogger<Function>) = interface ICloudEventFunction<MessagePublishedData> with member this.HandleAsync(cloudEvent, data, cancellationToken) = let nameFromMessage = data.Message.TextData let name = if String.IsNullOrEmpty(nameFromMessage) then "world" else nameFromMessage logger.LogInformation("Hello {name}", name) Task.CompletedTask
Visual Basic
Imports System.Threading Imports CloudNative.CloudEvents Imports Google.Cloud.Functions.Framework Imports Google.Events.Protobuf.Cloud.PubSub.V1 Imports Microsoft.Extensions.Logging Public Class CloudFunction Implements ICloudEventFunction(Of MessagePublishedData) Private _logger As ILogger Public Sub New(ByVal logger As ILogger(Of CloudFunction)) _logger = logger End Sub Public Function HandleAsync(cloudEvent As CloudEvent, data As MessagePublishedData, cancellationToken As CancellationToken) As Task _ Implements ICloudEventFunction(Of MessagePublishedData).HandleAsync Dim nameFromMessage = data.Message?.TextData Dim name = If(String.IsNullOrEmpty(nameFromMessage), "world", nameFromMessage) _logger.LogInformation("Hello {name}", name) Return Task.CompletedTask End Function End Class
Déployer les fonctions CloudEvent
F#
gcloud functions deploy fsharp-hello-pubsub --no-gen2 --entry-point HelloPubSubFSharp.Function --runtime dotnet6 --trigger-topic my-topic --allow-unauthenticated
Visual Basic
gcloud functions deploy vb-hello-pubsub --no-gen2 --entry-point HelloPubSubVb.CloudFunction --runtime dotnet6 --trigger-topic my-topic --allow-unauthenticated
Tester les exemples CloudEvent
Vous pouvez tester les exemples de fonctions CloudEvent comme suit :
Publiez un message sur votre sujet Pub/Sub pour déclencher votre fonction :
gcloud pubsub topics publish my-topic --message Flurry
Examinez les journaux :
gcloud functions logs read --limit 10
Un message semblable au suivant doit s'afficher, contenant le nom que vous avez publié dans le sujet Pub/Sub :
D my-function ... Function execution started
I my-function ... Hello Flurry!
D my-function ... Function execution took 39 ms, finished with status: 'ok'