Lokale Funktionen aufrufen

Einrichtung

In diesem Dokument wird davon ausgegangen, dass Sie mithilfe von Functions Frameworks oder Buildpacks eine lokal ausgeführte Funktion in localhost eingerichtet haben. Außerdem wird angenommen, dass das curl-Tool auf Ihrem lokalen Computer installiert ist.

Anfragen an lokale Funktionen senden

Sie können lokal ausgeführte Funktionen auslösen, indem Sie HTTP-Anfragen senden, die über einen lokalen Bereitstellungsprozess weitergeleitet werden.

Sie können bestimmen, wo Ihre Funktion lokal ausgeführt wird. Dazu prüfen Sie die URL, die beim Starten der Funktion angezeigt wurde. Standardmäßig wird Ihre Funktion unter localhost:8080 gehostet.

HTTP-Funktionen

Wenn Sie Ihre HTTP-Funktion in Ihrer Entwicklungsumgebung testen, wartet sie normalerweise auf Anfragen unter localhost:8080. Diese Schnittstelle ist nur von dem Computer oder der VM aus zugänglich, auf dem bzw. der Ihre Funktion ausgeführt wird. Anfragen, die von einem anderen System gesendet werden, können sie nicht erreichen. Aus diesem Grund müssen Sie die HTTP-Anfrage von demselben System aus senden, auf dem Ihre Funktion ausgeführt wird. Wenn Ihre Funktion in den folgenden Beispielen einen anderen Port als 8080 überwacht, ersetzen Sie 8080 im Beispiel durch die Portnummer für Ihre Funktion.

HTTP-Funktionen mit Cloud Shell testen

Wenn Sie Cloud Shell zum Erstellen und Testen Ihrer Funktion verwenden, starten Sie die Funktion lokal im Cloud Shell-Terminalfenster und senden Sie dann die HTTP-Triggeranfrage über einen Browser oder eine curl-Instanz wie unten beschrieben:

Browser

Klicken Sie in der Cloud Shell-Symbolleiste auf das Symbol Schaltfläche für Webvorschau und wählen Sie Port 8080 oder Port ändern aus, um einen anderen Port auszuwählen. Dadurch wird ein Browserfenster auf dem richtigen System geöffnet und ein GET-Request an den angegebenen Port gesendet.

Curl

Wenn Sie das Format Ihrer HTTP-Anfrage steuern oder die unformatierte Antwort sehen möchten, verwenden Sie curl:

  1. Klicken Sie in der Cloud Shell-Menüleiste auf das Symbol +, um ein neues Terminalfenster auf demselben System zu öffnen, auf dem Ihre Funktion ausgeführt wird.
  2. Führen Sie in diesem Fenster den Befehl curl aus, um die Funktion auszulösen. Beispiel:

    curl localhost:8080
    

HTTP-Funktionen auf dem Desktopserver testen

Wenn Sie Ihre Funktion auf Ihrem lokalen Desktopsystem erstellen und ausführen, starten Sie sie zuerst lokal und senden Sie dann die HTTP-Triggeranfrage über einen Browser oder eine curl-Instanz wie unten beschrieben:

Browser

Öffnen Sie ein neues Browserfenster oder einen neuen Tab und geben Sie http://localhost:8080 in die Adressleiste des Browsers ein. Dadurch wird ein Browserfenster mit localhost:8080 auf Ihrem Desktopserver geöffnet, um Ihre Funktion auszulösen.

Curl

Öffnen Sie auf Ihrem lokalen Computer ein neues Terminalfenster und führen Sie dann den Befehl curl in diesem Fenster aus, um die Funktion auszulösen. Beispiel:

 curl localhost:8080

Dadurch wird der angegebene curl-Befehl ausgeführt, um die Funktion auszulösen, und die unformatierte Antwort wird angezeigt.

CloudEvent-Funktionen

Mit curl können Sie Beispielereignisse an CloudEvent-Funktionen senden. Die folgenden curl-Anfragen zeigen, wie Beispiele für Cloud Pub/Sub- und Cloud Storage-Ereignisse an eine CloudEvent-Funktion gesendet werden, die unter localhost:8080 ausgeführt wird.

Pub/Sub

curl localhost:8080 \
  -X POST \
  -H "Content-Type: application/json" \
  -H "ce-id: 123451234512345" \
  -H "ce-specversion: 1.0" \
  -H "ce-time: 2020-01-02T12:34:56.789Z" \
  -H "ce-type: google.cloud.pubsub.topic.v1.messagePublished" \
  -H "ce-source: //pubsub.googleapis.com/projects/MY-PROJECT/topics/MY-TOPIC" \
  -d '{
        "message": {
          "data": "d29ybGQ=",
          "attributes": {
             "attr1":"attr1-value"
          }
        },
        "subscription": "projects/MY-PROJECT/subscriptions/MY-SUB"
      }'
    

Speicher

curl localhost:8080 \
  -X POST \
  -H "Content-Type: application/json" \
  -H "ce-id: 123451234512345" \
  -H "ce-specversion: 1.0" \
  -H "ce-time: 2020-01-02T12:34:56.789Z" \
  -H "ce-type: google.cloud.storage.object.v1.finalized" \
  -H "ce-source: //storage.googleapis.com/projects/_/buckets/MY-BUCKET-NAME" \
  -H "ce-subject: objects/MY_FILE.txt" \
  -d '{
        "bucket": "MY_BUCKET",
        "contentType": "text/plain",
        "kind": "storage#object",
        "md5Hash": "...",
        "metageneration": "1",
        "name": "MY_FILE.txt",
        "size": "352",
        "storageClass": "MULTI_REGIONAL",
        "timeCreated": "2020-04-23T07:38:57.230Z",
        "timeStorageClassUpdated": "2020-04-23T07:38:57.230Z",
        "updated": "2020-04-23T07:38:57.230Z"
      }'
    

Hintergrundfunktionen

Mit curl können Sie Beispielereignisse an Hintergrundfunktionen senden. Die folgenden curl-Anfragen zeigen, wie Beispiele für Cloud Pub/Sub- und Cloud Storage-Ereignisse an eine Hintergrundfunktion gesendet werden, die unter localhost:8080 ausgeführt wird.

Pub/Sub

# 'world' base64-encoded is 'd29ybGQ='
curl localhost:8080 \
  -X POST \
  -H "Content-Type: application/json" \
  -d '{
        "context": {
          "eventId":"1144231683168617",
          "timestamp":"2020-05-06T07:33:34.556Z",
          "eventType":"google.pubsub.topic.publish",
          "resource":{
            "service":"pubsub.googleapis.com",
            "name":"projects/sample-project/topics/gcf-test",
            "type":"type.googleapis.com/google.pubsub.v1.PubsubMessage"
          }
        },
        "data": {
          "@type": "type.googleapis.com/google.pubsub.v1.PubsubMessage",
          "attributes": {
             "attr1":"attr1-value"
          },
          "data": "d29ybGQ="
        }
      }'
    

Speicher

curl localhost:8080 \
  -X POST \
  -H "Content-Type: application/json" \
  -d '{
        "context": {
          "eventId": "1147091835525187",
          "timestamp": "2020-04-23T07:38:57.772Z",
          "eventType": "google.storage.object.finalize",
          "resource": {
             "service": "storage.googleapis.com",
             "name": "projects/_/buckets/MY_BUCKET/MY_FILE.txt",
             "type": "storage#object"
          }
        },
        "data": {
          "bucket": "MY_BUCKET",
          "contentType": "text/plain",
          "kind": "storage#object",
          "md5Hash": "...",
          "metageneration": "1",
          "name": "MY_FILE.txt",
          "size": "352",
          "storageClass": "MULTI_REGIONAL",
          "timeCreated": "2020-04-23T07:38:57.230Z",
          "timeStorageClassUpdated": "2020-04-23T07:38:57.230Z",
          "updated": "2020-04-23T07:38:57.230Z"
        }
      }'