HTTP-Cloud Run Functions-Funktion mit Ruby (1. Generation) 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.

Das Beispiel zeigt, wie Sie eine einfache HTTP-Funktion erstellen.

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 and Cloud Build 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 and Cloud Build APIs.

    Enable the APIs

  8. Installieren und initialisieren Sie die gcloud CLI.
  9. Aktualisieren und installieren Sie gcloud-Komponenten:
    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

Build lokal erstellen und testen

Bevor Sie die Funktion bereitstellen, können Sie sie lokal erstellen und testen: 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
# ...starts the web server in the foreground

Wenn die Funktion erfolgreich erstellt wird, wird die URL angezeigt, die Sie in Ihrem Webbrowser aufrufen können, um die Funktion in Aktion zu sehen: http://localhost:8080/. Die Meldung Hello World! sollte angezeigt werden.

Alternativ können Sie Anfragen mit curl von einem anderen Terminalfenster aus an diese Funktion senden:

curl localhost:8080
# Output: Hello World!

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

Funktion implementieren

Stellen Sie die Funktion mit einem HTTP-Trigger mit diesem Befehl im Verzeichnis helloworld bereit:

gcloud functions deploy hello_http --no-gen2 --runtime ruby33 --trigger-http --allow-unauthenticated

Mit dem Flag --allow-unauthenticated können Sie die Funktion ohne Authentifizierung aufrufen. Wenn Sie eine Authentifizierung anfordern möchten, lassen Sie das Flag weg.

So testen Sie die bereitgestellte Funktion

  1. Notieren Sie sich nach der Bereitstellung der Funktion das Attribut von httpsTrigger.url oder suchen Sie es mit diesem Befehl:

    gcloud functions describe hello_http
    

    Dies sollte so aussehen:

    https://GCP_REGION-PROJECT_ID.cloudfunctions.net/hello_http
  2. Rufen Sie diese URL in Ihrem Browser auf: Jetzt sollten Sie die Meldung "Hello World!" sehen.

    Geben Sie einen Namen in die HTTP-Anfrage ein, z. B. mithilfe der folgenden URL:

    https://GCP_REGION-PROJECT_ID.cloudfunctions.net/hello_http?name=NAME

    Jetzt sollten Sie die Meldung "Hello NAME!" sehen.

Logs ansehen

Sie können Logs für Cloud Run-Funktionen in der Cloud Logging-UI oder über die Google Cloud CLI aufrufen.

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, gefolgt vom Namen der Funktion:

gcloud functions logs read hello_http

Die Ausgabe sollte in etwa so aussehen:

LEVEL  NAME       EXECUTION_ID  TIME_UTC                 LOG
D      helloHttp  rvb9j0axfclb  2019-09-18 22:06:25.983  Function execution started
D      helloHttp  rvb9j0axfclb  2019-09-18 22:06:26.001  Function execution took 19 ms, finished with status code: 200

Logs im Logging-Dashboard ansehen

Sie können Logs für Cloud Run Functions-Funktionen auch über die Google Cloud Console aufrufen.