.NET-Sprachen
Sie können die Funktion in verschiedenen .NET-Sprachen (C#, Visual Basic oder F#) schreiben. Die Hauptaufgabe ist in allen Sprachen gleich: Sie erstellen eine Klasse, die eine der Functions Framework-Schnittstellen implementiert:
IHttpFunction
- Die generische
ICloudEvent<T>
- Die nicht generische
ICloudEvent
Dieses Dokument enthält Beispiele für F# und Visual Basic.
Vorlagen
Zum Ausführen der Beispiele in diesem Dokument verwenden Sie die Vorlagen:
Installieren Sie das .NET SDK.
Installieren Sie das Vorlagenpaket:
dotnet new install Google.Cloud.Functions.Templates
Für die drei Arten von Funktionen in C# (Standardeinstellung), F# und Visual Basic werden Vorlagen bereitgestellt. Geben Sie beim Erstellen eines neuen Projekts aus einer Vorlage -lang f#
an, um ein F#-Projekt zu erstellen, oder -lang vb
, um ein Visual Basic-Projekt zu erstellen. Wenn Sie beispielsweise eine neue CloudEvent-Funktion ohne Typ für Visual Basic erstellen möchten, führen Sie Folgendes aus:
dotnet new gcf-untyped-event -lang vb
Beispiele für HTTP-Funktionen
Wenn Sie Ihre Funktion über eine HTTP(S)-Anfrage aufrufen möchten, verwenden Sie HTTP-Funktionen. In den folgenden Beispielen wird die Nachricht "Hello World!"
ausgegeben.
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
Projektdateien für HTTP-Beispiele
Hier sind die Projektdateien für die obigen Beispiele:
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>
HTTP-Funktionen bereitstellen
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
CloudEvent-Beispiele
Sie verwenden CloudEvent-Funktionen, wenn die Cloud Run Functions-Funktion indirekt als Reaktion auf ein asynchrones Ereignis wie eine Nachricht in einem Pub/Sub-Thema, eine Änderung in einem Cloud Storage-Bucket oder ein Firebase-Ereignis aufgerufen werden soll.
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
CloudEvent-Funktionen bereitstellen
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
CloudEvent-Beispiele testen
So können Sie die CloudEvent-Beispiele testen:
Veröffentlichen Sie eine Nachricht in Ihrem Pub/Sub-Thema, um die Funktion auszulösen:
gcloud pubsub topics publish my-topic --message Flurry
Sehen Sie sich die Logs an:
gcloud functions logs read --limit 10
Sie sollten in etwa so etwas mit einer Nachricht mit dem Namen sehen, den Sie im Pub/Sub-Thema veröffentlicht haben:
D my-function ... Function execution started
I my-function ... Hello Flurry!
D my-function ... Function execution took 39 ms, finished with status: 'ok'