HTTP Cloud Functions-Funktion mit PHP erstellen und bereitstellen

HTTP Cloud Functions-Funktion mit PHP erstellen und bereitstellen

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

  • 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. Melden Sie sich bei Ihrem Google Cloud-Konto an. Wenn Sie mit Google Cloud noch nicht vertraut sind, erstellen Sie ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
  2. Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.

    Zur Projektauswahl

  3. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

  4. Cloud Functions, Cloud Build, Artifact Registry, Cloud Run und Cloud Logging APIs aktivieren.

    Aktivieren Sie die APIs

  5. Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.

    Zur Projektauswahl

  6. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

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

    Aktivieren Sie die 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.

    PHP in Google Cloud verwenden

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. Weitere Informationen zur Struktur und zu den erforderlichen Elementen in einer PHP-HTTP-Funktion finden Sie unter HTTP-Funktionen schreiben.

Abhängigkeiten angeben

  1. PHP verwendet Composer zum Verwalten von Abhängigkeiten. Wenn Sie Cloud Shell verwenden, ist Composer bereits vorinstalliert. Andernfalls können Sie es mit den folgenden Befehlen installieren:

    1. Führen Sie das Installationsskript für die PHP-Befehlszeile auf der Composer-Downloadseite aus, um Composer in den Entwicklungscomputer herunterzuladen.

    2. Verschieben Sie die Datei composer.phar in Ihr Arbeitsverzeichnis /usr/local/bin.

      sudo mv composer.phar /usr/local/bin/composer
      
  2. Geben Sie die Abhängigkeiten der Funktion an:

    1. Fügen Sie dem Verzeichnis helloworld_http eine Datei composer.json mit folgendem Inhalt hinzu:

      {
          "require": {
              "php": ">= 7.4",
              "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"
              ]
          }
      }
      

    Die Zeile FUNCTION_TARGET gibt den Einstiegspunkt der Funktion an.

    1. Führen Sie den folgenden Befehl im Verzeichnis helloworld_http aus:
    composer require google/cloud-functions-framework
    

    Dadurch wird Functions Framework zu composer.json hinzugefügt und ein vendor-Verzeichnis in helloworld_http erstellt, das die Abhängigkeiten enthält.

Funktion lokal erstellen und testen

Führen Sie die folgenden Schritte aus, um die Funktion vor der Bereitstellung lokal zu erstellen und zu testen:

  1. Erstellen Sie einen lokalen Webserver, auf dem die Funktion helloHttp ausgeführt wird:

    export FUNCTION_TARGET=helloHttp
    composer start
    
  2. Testen Sie Ihre 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.

Diese Beispielfunktion gibt eine freundliche Nachricht "Hello, World!" zurück. angezeigt.

Funktion bereitstellen

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

  gcloud functions deploy php-http-function \
    --gen2 \
    --runtime=php82 \
    --region=REGION \
    --source=. \
    --entry-point=helloHttp \
    --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 php-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.

    Sie finden diese URL auch in der Google Cloud Console. Rufen Sie die Übersichtsseite „Cloud Functions“ auf und klicken Sie auf den Namen der Funktion, um die Seite Funktionsdetails zu öffnen. Öffnen Sie den Tab TRIGGER, um die URL Ihrer Funktion zu sehen.

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 \
      php-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: hellohttp
TIME_UTC: 2023-06-02 19:01:36.067
LOG:

LEVEL: I
NAME: hellohttp
TIME_UTC: 2023-06-02 19:01:22.814
LOG: Default STARTUP TCP probe succeeded after 1 attempt for container "hello_http-1" on port 8080.

LEVEL: I
NAME: hellohttp
TIME_UTC: 2023-06-02 19:01:22.777
LOG: [pid1-nginx] Starting nginx (pid 17): /usr/sbin/nginx -c /tmp/nginxconf-953701689/nginx.conf [session:R8F8ZJ5]

LEVEL: I
NAME: hellohttp
TIME_UTC: 2023-06-02 19:01:22.766
LOG: [pid1-nginx] Successfully connected to /tmp/google-config/app.sock after 556.430499ms [session:R8F8ZJ5]

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.