HTTP-Cloud Run Functions-Funktion mit .NET erstellen und bereitstellen

In dieser Anleitung erfahren Sie, wie Sie mit der .NET-Laufzeitsprache C# eine Cloud Run Functions-Funktion schreiben. Es gibt zwei Arten von Cloud Run Functions-Funktionen:

  • Eine HTTP-Funktion, die Sie über Standard-HTTP-Anfragen aufrufen.
  • Eine ereignisgesteuerte Funktion, die durch Ereignisse in Ihrer Cloud-Infrastruktur ausgelöst wird, z. B. Nachrichten in einem Pub/Sub-Thema oder Änderungen in einem Cloud Storage-Bucket.

Weitere Informationen finden Sie unter HTTP-Funktionen schreiben und Ereignisgesteuerte Funktionen schreiben.

Vorbereitung

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Cloud Functions, Cloud Build, Artifact Registry, Cloud Run, and Cloud Logging APIs.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the Cloud Functions, Cloud Build, Artifact Registry, Cloud Run, and Cloud Logging APIs.

    Enable the APIs

  8. Installieren und initialisieren Sie das Google Cloud SDK.
  9. Aktualisieren und installieren Sie gcloud-Komponenten mit dem folgenden Befehl.
    gcloud components update
  10. Bereiten Sie die Entwicklungsumgebung vor.

    Einrichtungsleitfaden für .NET aufrufen

Funktion erstellen

In diesem Abschnitt wird beschrieben, wie Sie eine .NET-Funktion manuell erstellen. Alternativ können Sie die Functions Framework-Vorlagen verwenden, um Ihre Funktion zu erstellen.

So erstellen Sie eine Funktion:

  1. Erstellen Sie in Ihrem lokalen System ein Verzeichnis für den Funktionscode:

    Windows

    mkdir %HOMEPATH%\helloworld
    cd %HOMEPATH%\helloworld
    

    Linux oder MacOS X

    mkdir ~/helloworld
    cd ~/helloworld
    
  2. Erstellen Sie eine Function.cs-Datei im Verzeichnis helloworld mit folgendem Inhalt:

    using Google.Cloud.Functions.Framework;
    using Microsoft.AspNetCore.Http;
    using System.Threading.Tasks;
    
    namespace HelloWorld;
    
    public class Function : IHttpFunction
    {
        public async Task HandleAsync(HttpContext context)
        {
            await context.Response.WriteAsync("Hello World!", context.RequestAborted);
        }
    }

Abhängigkeiten angeben

Cloud Run Functions-Funktionen benötigen eine Reihe von Bibliotheken, die als Functions-Framework bezeichnet werden. Führen Sie die folgenden Schritte aus, um das Functions-Framework für Ihren Build verfügbar zu machen:

  1. Wechseln Sie in das Verzeichnis helloworld, das Sie gerade erstellt haben:

     cd ~/helloworld
    
  2. Erstellen Sie eine HelloWorld.csproj-Datei im Verzeichnis helloworld mit folgendem Inhalt:

    <Project Sdk="Microsoft.NET.Sdk">
      <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>net6.0</TargetFramework>
      </PropertyGroup>
    
      <ItemGroup>
        <PackageReference Include="Google.Cloud.Functions.Hosting" Version="2.2.1" />
      </ItemGroup>
    </Project>

Weitere Informationen dazu, wie Sie andere Bibliotheken für Ihren Build verfügbar machen, entweder über Projektdateien oder innerhalb des Codes durch Abhängigkeitsinjektion, finden Sie unter Anpassung über Functions-Startklassen.

Funktion lokal erstellen und testen

  1. Erstellen und führen Sie die Funktion mit dem folgenden Befehl lokal aus:

    dotnet run
    
  2. Testen Sie die Funktion. Rufen Sie dazu http://localhost:8080 in einem Browser auf oder führen Sie curl localhost:8080 in einem anderen Fenster aus. Wenn Sie Cloud Shell verwenden, klicken Sie auf das Symbol Schaltfläche für Webvorschau und wählen Sie Vorschau auf Port 8080 aus, um die Funktionsausgabe aufzurufen.

    Weitere Informationen finden Sie unter Anfragen an lokale Funktionen senden.

Funktion bereitstellen

Führen Sie den Befehl im Verzeichnis helloworld aus, um die Funktion bereitzustellen:

  gcloud functions deploy csharp-http-function \
    --gen2 \
    --entry-point=HelloWorld.Function \
    --runtime=dotnet6 \
    --region=REGION \
    --source=. \
    --trigger-http \
    --allow-unauthenticated

Ersetzen Sie REGION durch den Namen der Google Cloud-Region, in der Sie die Funktion bereitstellen möchten (z. B. us-west1).

csharp-http-function ist der registrierte Name, mit dem die Funktion in der Google Cloud Console identifiziert wird. --entry-point gibt den vollständig qualifizierten Klassennamen (FQN) der Funktion an.

Mit dem optionalen Flag --allow-unauthenticated können Sie die Funktion ohne Authentifizierung aufrufen.

Bereitgestellte Funktion testen

  1. Beachten Sie nach dem Bereitstellen der Funktion das Attribut uri in der Ausgabe des Befehls gcloud functions deploy oder rufen Sie es mit dem folgenden Befehl ab:

    gcloud functions describe csharp-http-function \
      --region=REGION
    

    Ersetzen Sie REGION durch den Namen der Google Cloud-Region, in der Sie die Funktion bereitgestellt haben (z. B. us-west1).

  2. Testen Sie die Funktion. Rufen Sie dazu http://localhost:8080 in einem Browser auf oder führen Sie curl localhost:8080 in einem anderen Fenster aus.

    Weitere Informationen finden Sie unter Anfragen an lokale Funktionen senden.

Logs der Funktion ansehen

Logs mit dem Befehlszeilentool ansehen

Sie können die Logs Ihrer Funktion über die Cloud Logging-UI oder die Google Cloud CLI prüfen.

Wenn Sie mit der gcloud CLI Logs für Ihre Funktion aufrufen möchten, verwenden Sie den Befehl logs read:

  gcloud functions logs read \
    --gen2 \
    --limit=10 \
    --region=REGION \
    csharp-http-function

Ersetzen Sie REGION durch den Namen der Google Cloud-Region, in der Sie die Funktion bereitgestellt haben (z. B. us-west1).

Die Ausgabe sollte in etwa so aussehen:

LEVEL: I
NAME: my-first-function
TIME_UTC: 2023-06-01 12:47:42.221
LOG: Request finished HTTP/1.1 GET http://my-first-function-l5vqvupfzq-uw.a.run.app/favicon.ico - - - 404 0 - 0.9393ms

LEVEL: I
NAME: my-first-function
TIME_UTC: 2023-06-01 12:47:42.220
LOG: Request starting HTTP/1.1 GET http://my-first-function-l5vqvupfzq-uw.a.run.app/favicon.ico - -

Logs mit dem Logging-Dashboard ansehen

Um die Logs für Ihre Funktion mit dem Logging-Dashboard aufzurufen, öffnen Sie die Übersichtsseite zu Cloud Run Functions. Klicken Sie in der Liste auf den Namen Ihrer Funktion und dann auf den Tab Logs.

Funktion mit dem Vorlagenpaket erstellen

Anhand dieser Anleitung haben Sie eine einfache Funktion erstellt. In der Praxis verwenden Sie wahrscheinlich lieber die Functions Framework-Vorlagen, um Ihre Funktionen zu erstellen.

So erstellen und testen Sie eine Funktion mithilfe von Functions Framework-Vorlagen:

  1. Installieren Sie das .NET SDK. Wenn Sie Cloud Shell verwenden, können Sie diesen Schritt überspringen.

  2. Installieren Sie das Vorlagenpaket:

    dotnet new install Google.Cloud.Functions.Templates
    
  3. Erstellen Sie ein Verzeichnis für Ihr Projekt und eine leere HTTP-Funktion:

    mkdir HelloFunctions
    cd HelloFunctions
    dotnet new gcf-http
    

    Dadurch werden HelloFunctions.csproj und Function.cs im aktuellen Verzeichnis erstellt. Öffnen Sie Function.cs, um den Code zu prüfen, und geben Sie bei Bedarf eine benutzerdefinierte Nachricht ein.

  4. Optional können Sie der Anleitung oben folgen, um die Funktion lokal zu erstellen und zu testen.

  5. Führen Sie den folgenden gcloud deploy-Befehl aus, um die Funktion bereitzustellen:

    gcloud functions deploy HelloFunctions.Function \
      --gen2 \
      --entry-point=HelloWorld.Function \
      --runtime=dotnet6 \
      --region=REGION \
      --source=. \
      --trigger-http \
      --allow-unauthenticated
    

    Ersetzen Sie REGION durch den Namen der Google Cloud-Region, in der Sie die Funktion bereitgestellt haben (z. B. us-west1).

Weitere Informationen zum Functions-Framework finden Sie in der Dokumentation zum Functions-Framework.