HTTP-Cloud Functions-Funktion mit Python erstellen und bereitstellen

HTTP-Cloud Functions-Funktion mit Python erstellen und bereitstellen

Dieser Leitfaden erläutert den Prozess zum Schreiben einer Cloud Function-Funktion mithilfe der Python-Laufzeit. Es gibt zwei Arten von Cloud Functions-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.

Hinweise

  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. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

  4. Enable the Cloud Functions, Cloud Build, Artifact Registry, Cloud Run und 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. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

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

    Enable the APIs

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

    Zum Einrichtungsleitfaden für Python

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 main.py-Datei im Verzeichnis helloworld mit folgendem Inhalt:

    
    import functions_framework
    
    from markupsafe import escape
    @functions_framework.http
    def hello_http(request):
        """HTTP Cloud Function.
        Args:
            request (flask.Request): The request object.
            <https://flask.palletsprojects.com/en/1.1.x/api/#incoming-request-data>
        Returns:
            The response text, or any set of values that can be turned into a
            Response object using `make_response`
            <https://flask.palletsprojects.com/en/1.1.x/api/#flask.make_response>.
        """
        request_json = request.get_json(silent=True)
        request_args = request.args
    
        if request_json and "name" in request_json:
            name = request_json["name"]
        elif request_args and "name" in request_args:
            name = request_args["name"]
        else:
            name = "World"
        return f"Hello {escape(name)}!"
    
    

    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 Python werden mit pip verwaltet und in einer Metadatendatei mit dem Namen requirements.txt ausgedrückt. Diese Datei muss sich im selben Verzeichnis wie die Datei main.py befinden, die den Funktionscode enthält.

  1. Erstellen Sie eine requirements.txt-Datei im Verzeichnis helloworld mit folgendem Inhalt:

      # An example requirements file. If your function has other dependencies,
      # add them below
      functions-framework==3.*
    

Funktion lokal erstellen und testen

So erstellen Sie die Funktion lokal und testen sie vor der Bereitstellung:

  1. Führen Sie das Paket-Installationsprogramm für Python (pip) aus, um die Abhängigkeiten Ihres Pakets zu installieren:

    pip install -r requirements.txt
    PATH=$PATH:~/.local/bin
    
  2. Führen Sie die Funktion lokal mit dem Functions Framework aus:

    functions-framework-python --target hello_http
    
  3. 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.

Funktion bereitstellen

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

  gcloud functions deploy python-http-function \
    --gen2 \
    --runtime=python312 \
    --region=REGION \
    --source=. \
    --entry-point=hello_http \
    --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 python-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

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 \
    python-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 so aussehen:

LEVEL: I
NAME: hello-http
TIME_UTC: 2023-06-01 19:33:42.991
LOG: Default STARTUP TCP probe succeeded after 1 attempt for container "hello__http-1" on port 8080.

LEVEL: I
NAME: hello-http
TIME_UTC: 2023-06-01 19:33:41.933
LOG:

LEVEL: I
NAME: hello-http
TIME_UTC: 2023-06-01 19:33:26.475
LOG: Default STARTUP TCP probe succeeded after 1 attempt for container "hello__http-1" on port 8080.

Logs mit dem Logging-Dashboard ansehen

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