שפות .NET
אפשר לכתוב את הפונקציה בשפות שונות של .NET (C#, Visual Basic או F#). המשימה העיקרית זהה בכל השפות – יוצרים מחלקה שמיישמת אחד מהממשקים של Functions Framework:
IHttpFunction- הלוגו הכללי
ICloudEvent<T> - ה-builder הלא גנרי
ICloudEvent
במסמך הזה מופיעות דוגמאות ל-F# ול-Visual Basic.
תבניות
שימו לב: כדי להריץ את הדוגמאות במסמך הזה, תצטרכו להשתמש בתבניות:
מתקינים את .NET SDK.
מתקינים את חבילת התבנית:
dotnet new install Google.Cloud.Functions.Templates
יש תבניות לשלושת סוגי הפונקציות ב-C# (ברירת המחדל), ב-F# וב-Visual Basic. כשיוצרים פרויקט חדש מתבנית, מציינים -lang f# כדי ליצור פרויקט F# , או -lang vb כדי ליצור פרויקט Visual Basic. לדוגמה, כדי ליצור פונקציה חדשה של CloudEvent ללא הקלדה עבור Visual Basic, מריצים את הפקודה:
dotnet new gcf-untyped-event -lang vb
דוגמאות לפונקציות HTTP
משתמשים בפונקציות HTTP כשרוצים להפעיל את הפונקציה באמצעות בקשת HTTP(S). בדוגמאות הבאות מוצגת ההודעה "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
קבצים בפרויקט לדוגמאות של HTTP
אלה קובצי הפרויקט של הדוגמאות שלמעלה:
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
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
משתמשים בפונקציות CloudEvent כשרוצים שהפונקציה של Cloud Run תופעל באופן עקיף בתגובה לאירוע אסינכרוני, כמו הודעה בנושא Pub/Sub, שינוי בקטגוריה של Cloud Storage או אירוע 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
פריסת הפונקציות של 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
בדיקת הדוגמאות של CloudEvent
כדי לבדוק את הדוגמאות של CloudEvent:
מפרסמים הודעה בנושא Pub/Sub כדי להפעיל את הפונקציה:
gcloud pubsub topics publish my-topic --message Flurry
מעיינים ביומנים:
gcloud functions logs read --limit 10
אמורה להופיע הודעה דומה לזו שבהמשך, שכוללת את השם שפרסמתם בנושא 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'