HTTP-Cloud Run Functions-Funktion mit Ruby erstellen und bereitstellen

Dieser Leitfaden erläutert den Prozess zum Schreiben einer Cloud Run Functions-Funktion mithilfe der Ruby-Laufzeit. Es gibt zwei Arten von Cloud Run-Funktionen:

  • Eine HTTP-Funktion, die Sie über Standard-HTTP-Anfragen aufrufen.
  • Eine durch ein Ereignis ausgelöste Funktion, mit der Sie Ereignisse aus Ihrer Cloud-Infrastruktur verarbeiten können, 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 Ruby aufrufen

Funktion erstellen

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

    Linux oder MacOS X

    mkdir ~/helloworld
    cd ~/helloworld
    

    Windows

    mkdir %HOMEPATH%\helloworld
    cd %HOMEPATH%\helloworld
    
  2. Erstellen Sie eine app.rb-Datei im Verzeichnis helloworld mit folgendem Inhalt:

    require "functions_framework"
    require "cgi"
    require "json"
    
    FunctionsFramework.http "hello_http" do |request|
      # The request parameter is a Rack::Request object.
      # See https://www.rubydoc.info/gems/rack/Rack/Request
      name = request.params["name"] ||
             (request.body.rewind && JSON.parse(request.body.read)["name"] rescue nil) ||
             "World"
      # Return the response body as a string.
      # You can also return a Rack::Response object, a Rack response array, or
      # a hash which will be JSON-encoded into a response.
      "Hello #{CGI.escape_html name}!"
    end

    Diese Beispielfunktion verwendet einen in der HTTP-Anfrage angegebenen Namen und gibt eine Begrüßung bzw. „Hello World!“, wenn kein Name angegeben wird, zurück.

Abhängigkeiten angeben

Abhängigkeiten in Ruby werden mit Bundler verwaltet und in einer Datei namens Gemfile ausgedrückt.

Wenn Sie die Funktion bereitstellen, lädt Cloud Run Functions die in Gemfile und Gemfile.lock deklarierten Abhängigkeiten mithilfe von bundler herunter und installiert sie.

Unter Gemfile sind die für Ihre Funktion erforderlichen Pakete sowie optionale Versionseinschränkungen aufgelistet. Bei einer Cloud Run Functions-Funktion muss eines dieser Pakete das Gem functions_framework sein.

Erstellen Sie für diese Übung eine Datei mit dem Namen Gemfile im selben Verzeichnis wie die Datei app.rb, die den Funktionscode enthält:

source "https://rubygems.org"
gem "functions_framework", "~> 0.7"

Führen Sie den folgenden Befehl aus, um das Gem functions_framework und andere Abhängigkeiten zu installieren:

bundle install

Funktion lokal erstellen und testen

Bevor Sie die Funktion bereitstellen, können Sie sie lokal erstellen und testen:

  1. Führen Sie den folgenden Befehl aus, um die ausführbare Datei functions-framework-ruby zu verwenden, um einen lokalen Webserver zu starten, auf dem die hello_http-Funktion ausgeführt wird:

    bundle exec functions-framework-ruby --target hello_http
    
  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.

Siehe auch Funktionen testen in der Dokumentation zu Ruby Functions Framework.

Funktion bereitstellen

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

  gcloud functions deploy ruby-http-function \
    --gen2 \
    --runtime=ruby32 \
    --region=REGION \
    --entry-point=hello_http \
    --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).

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 ruby-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. Rufen Sie diese URL in Ihrem Browser auf: Die Funktion gibt die Nachricht „Hello World!“ zurück.

Logs der Funktion ansehen

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

Logs mit dem Befehlszeilentool ansehen

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 \
      ruby-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: hello-http
TIME_UTC: 2023-06-01 00:09:41.477
LOG: Default STARTUP TCP probe succeeded after 1 attempt for container "hello__http-1" on port 8080.

LEVEL:
NAME: hello-http
TIME_UTC: 2023-06-01 00:09:41.451
LOG: I, [2023-06-01T00:09:41.451784 #1]  INFO -- : FunctionsFramework: Serving function "hello_http" on port 8080...

LEVEL:
NAME: hello-http
TIME_UTC: 2023-06-01 00:09:41.364
LOG: I, [2023-06-01T00:09:41.363923 #1]  INFO -- : FunctionsFramework: Starting server...

LEVEL:
NAME: hello-http
TIME_UTC: 2023-06-01 00:09:41.363
LOG: I, [2023-06-01T00:09:41.363855 #1]  INFO -- : FunctionsFramework: Looking for function name "hello_http"...

LEVEL:
NAME: hello-http
TIME_UTC: 2023-06-01 00:09:41.354
LOG: I, [2023-06-01T00:09:41.354150 #1]  INFO -- : FunctionsFramework: Loading functions from "./app.rb"...

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.