Bahasa .NET
Anda dapat menulis fungsi menggunakan bahasa .NET yang berbeda (C#, Visual Basic, atau F#). Tugas intinya sama untuk semua bahasa—Anda membuat class yang mengimplementasikan salah satu antarmuka Functions Framework:
IHttpFunction
ICloudEvent<T>
generikICloudEvent
non-generik
Dokumen ini menyediakan contoh untuk F# dan Visual Basic.
Template
Perhatikan bahwa untuk menjalankan contoh dalam dokumen ini, Anda akan menggunakan template:
Instal .NET SDK.
Instal paket template:
dotnet new install Google.Cloud.Functions.Templates
Template disediakan untuk tiga jenis fungsi di C# (default), F#, dan Visual Basic. Saat membuat project baru dari template, tentukan -lang f#
untuk membuat project F#, atau -lang vb
untuk membuat project Visual Basic. Misalnya, untuk membuat fungsi CloudEvent tak berjenis baru untuk Visual Basic, Anda akan menjalankan:
dotnet new gcf-untyped-event -lang vb
Contoh fungsi HTTP
Anda menggunakan fungsi HTTP ketika ingin memanggil fungsi melalui permintaan HTTP(S). Contoh berikut menampilkan pesan "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
File project untuk contoh HTTP
Berikut adalah file project untuk contoh di atas:
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>
Men-deploy fungsi 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
Contoh CloudEvent
Anda menggunakan fungsi CloudEvent saat ingin Cloud Run Function dipanggil secara tidak langsung sebagai respons terhadap peristiwa asinkron, seperti pesan pada topik Pub/Sub, perubahan dalam bucket Cloud Storage, atau peristiwa 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
Men-deploy fungsi 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
Menguji contoh CloudEvent
Anda dapat menguji contoh CloudEvent sebagai berikut:
Publikasikan pesan ke topik Pub/Sub untuk memicu fungsi Anda:
gcloud pubsub topics publish my-topic --message Flurry
Lihat log:
gcloud functions logs read --limit 10
Anda akan melihat sesuatu seperti ini, dengan pesan yang menyertakan nama yang Anda publikasikan ke topik 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'