HTTP-Cloud Run Functions-Funktion mit PHP (1. Generation) erstellen und bereitstellen

Dieser Leitfaden erläutert den Prozess zum Schreiben einer Cloud Run Functions-Funktion mithilfe der PHP-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.

    Erste Schritte mit PHP

Funktion erstellen

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

    Linux oder MacOS X

    mkdir ~/helloworld_http
    cd ~/helloworld_http
    

    Windows

    mkdir %HOMEPATH%\helloworld_http
    cd %HOMEPATH%\helloworld_http
    
  2. Erstellen Sie eine index.php-Datei im Verzeichnis helloworld_http mit folgendem Inhalt:

    <?php
    
    use Google\CloudFunctions\FunctionsFramework;
    use Psr\Http\Message\ServerRequestInterface;
    
    // Register the function with Functions Framework.
    // This enables omitting the `FUNCTIONS_SIGNATURE_TYPE=http` environment
    // variable when deploying. The `FUNCTION_TARGET` environment variable should
    // match the first parameter.
    FunctionsFramework::http('helloHttp', 'helloHttp');
    
    function helloHttp(ServerRequestInterface $request): string
    {
        $name = 'World';
        $body = $request->getBody()->getContents();
        if (!empty($body)) {
            $json = json_decode($body, true);
            if (json_last_error() != JSON_ERROR_NONE) {
                throw new RuntimeException(sprintf(
                    'Could not parse body: %s',
                    json_last_error_msg()
                ));
            }
            $name = $json['name'] ?? $name;
        }
        $queryString = $request->getQueryParams();
        $name = $queryString['name'] ?? $name;
    
        return sprintf('Hello, %s!', htmlspecialchars($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 werden mit Composer in PHP verwaltet. Wenn Composer noch nicht installiert ist, gehen Sie so vor:

  1. Laden Sie Composer an einen beliebigen Speicherort herunter.

  2. Nach dem Download verschieben Sie die Datei composer.phar in ein Verzeichnis, das sich in Ihrem Systempfad befindet. Beispiel:

    mv composer.phar /usr/local/bin/composer
    

Geben Sie als Nächstes die Abhängigkeiten der Funktion an:

  1. Fügen Sie eine composer.json-Datei mit Abhängigkeiten zum Funktionscodeverzeichnis hinzu, wobei FUNCTION_TARGET=FUNCTION_NAME den Namen der Funktion angibt. In diesem Beispiel ist FUNCTION_NAME helloHttp.

    {
        "require": {
            "php": ">= 8.1",
            "google/cloud-functions-framework": "^1.1"
        },
        "scripts": {
            "start": [
               "Composer\\Config::disableProcessTimeout",
               "FUNCTION_TARGET=helloHttp php -S localhost:${PORT:-8080} vendor/google/cloud-functions-framework/router.php"
            ]
        }
    }
    
  2. Führen Sie im Verzeichnis mit dem Funktionscode, das auch die soeben erstellte Datei composer.json enthalten muss, den folgenden Befehl aus:

    composer require google/cloud-functions-framework
    

    Dadurch wird das Functions Framework zu composer.json hinzugefügt. Außerdem wird in Ihrem Funktionscodeverzeichnis ein vendor/-Verzeichnis erstellt, das die Abhängigkeiten enthält.

Build lokal erstellen und testen

Wenn Sie die Schritte unter Abhängigkeiten angeben ausgeführt haben, können Sie die Funktion lokal erstellen und testen.

Der folgende Befehl erstellt einen lokalen Webserver, auf dem die Funktion helloHttp ausgeführt wird:

export FUNCTION_TARGET=helloHttp
php -S localhost:8080 vendor/bin/router.php

Wird die Funktion erfolgreich erstellt, wird eine URL angezeigt. Sie können diese URL mit Ihrem Webbrowser aufrufen: 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!

Funktion implementieren

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

gcloud functions deploy helloHttp --no-gen2 --runtime php82 --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 helloHttp
    

    Dies sollte so aussehen:

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

    Übergeben Sie einen Namen in der HTTP-Anfrage, wie in dieser Beispiel-URL gezeigt:

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

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

Logs ansehen

Logs für Cloud Run Functions-Funktionen können über die Google Cloud CLI und in der Cloud Logging-UI aufgerufen werden.

Befehlszeilentool verwenden

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

gcloud functions logs read helloHttp

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

Logging-Dashboard verwenden

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