Cloud Pub/Sub-Anleitung

In dieser einfachen Anleitung wird veranschaulicht, wie eine Cloud Functions-Hintergrundfunktion erstellt, bereitgestellt und mit einem Cloud Pub/Sub-Trigger ausgelöst wird. Weitere Informationen zu Cloud Pub/Sub finden Sie in der zugehörigen Dokumentation.

Ziele

Kosten

In dieser Anleitung werden kostenpflichtige Komponenten der Cloud Platform verwendet, darunter:

  • Google Cloud Functions
  • Google Cloud Pub/Sub

Mit unserem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung erstellen.

Neuen Cloud Platform-Nutzern steht gegebenenfalls eine kostenlose Testversion zur Verfügung.

Hinweis

  1. Melden Sie sich in Ihrem Google-Konto an.

    Wenn Sie noch kein Konto haben, registrieren Sie sich hier für ein neues Konto.

  2. Wählen Sie in der GCP Console auf der Projektauswahlseite ein GCP-Projekt aus oder erstellen Sie eins.

    Zur Projektauswahl

  3. Prüfen Sie, ob die Abrechnung für Ihr Google Cloud Platform-Projekt aktiviert ist. So bestätigen Sie die Abrechnung für Ihr Projekt.

  4. Aktivieren Sie die Cloud Functions und Cloud Pub/Suberforderlichen APIs.

    APIs aktivieren

  5. Installieren und initialisieren Sie das Cloud SDK.
  6. Aktualisieren Sie gcloud-Komponenten:
    gcloud components update
  7. Bereiten Sie die Entwicklungsumgebung vor.

Anwendung vorbereiten

  1. Klonen Sie das Repository der Beispiel-App auf Ihren lokalen Computer:

    Node.js

    git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git

    Sie können auch das Beispiel als ZIP-Datei herunterladen und extrahieren.

    Python

    git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git

    Sie können auch das Beispiel als ZIP-Datei herunterladen und extrahieren.

    Go

    git clone https://github.com/GoogleCloudPlatform/golang-samples.git

    Sie können auch das Beispiel als ZIP-Datei herunterladen und extrahieren.

  2. Wechseln Sie in das Verzeichnis, das den Cloud Functions-Beispielcode für den Zugriff auf Cloud Pub/Sub enthält:

    Node.js

    cd nodejs-docs-samples/functions/helloworld/

    Python

    cd python-docs-samples/functions/helloworld/

    Go

    cd golang-samples/functions/helloworld/

  3. Sehen Sie sich den Beispielcode an:

    Node.js

    /**
     * Background Cloud Function to be triggered by Pub/Sub.
     * This function is exported by index.js, and executed when
     * the trigger topic receives a message.
     *
     * @param {object} data The event payload.
     * @param {object} context The event metadata.
     */
    exports.helloPubSub = (data, context) => {
      const pubSubMessage = data;
      const name = pubSubMessage.data
        ? Buffer.from(pubSubMessage.data, 'base64').toString()
        : 'World';
    
      console.log(`Hello, ${name}!`);
    };

    Python

    def hello_pubsub(event, context):
        """Background Cloud Function to be triggered by Pub/Sub.
        Args:
             event (dict):  The dictionary with data specific to this type of
             event. The `data` field contains the PubsubMessage message. The
             `attributes` field will contain custom attributes if there are any.
             context (google.cloud.functions.Context): The Cloud Functions event
             metadata. The `event_id` field contains the Pub/Sub message ID. The
             `timestamp` field contains the publish time.
        """
        import base64
    
        print("""This Function was triggered by messageId {} published at {}
        """.format(context.event_id, context.timestamp))
    
        if 'data' in event:
            name = base64.b64decode(event['data']).decode('utf-8')
        else:
            name = 'World'
        print('Hello {}!'.format(name))

    Go

    
    // Package helloworld provides a set of Cloud Functions samples.
    package helloworld
    
    import (
    	"context"
    	"log"
    )
    
    // PubSubMessage is the payload of a Pub/Sub event.
    type PubSubMessage struct {
    	Data []byte `json:"data"`
    }
    
    // HelloPubSub consumes a Pub/Sub message.
    func HelloPubSub(ctx context.Context, m PubSubMessage) error {
    	name := string(m.Data)
    	if name == "" {
    		name = "World"
    	}
    	log.Printf("Hello, %s!", name)
    	return nil
    }
    

Funktion bereitstellen

Zum Bereitstellen der Funktion mit einem Cloud Pub/Sub-Trigger führen Sie den folgenden Befehl im Verzeichnis mit dem Beispielcode aus:

Node.js

gcloud functions deploy helloPubSub --runtime nodejs8 --trigger-topic YOUR_TOPIC_NAME
Sie können die folgenden Werte für das Flag --runtime angeben, um verschiedene Node.js-Versionen zu verwenden:
  • nodejs6 (verworfen)
  • nodejs8
  • nodejs10 (Beta)

Python

gcloud functions deploy hello_pubsub --runtime python37 --trigger-topic YOUR_TOPIC_NAME

Go

gcloud functions deploy HelloPubSub --runtime go111 --trigger-topic YOUR_TOPIC_NAME

Dabei ist YOUR_TOPIC_NAME der Name des Cloud Pub/Sub-Themas, das von der Funktion abonniert wird.

Funktion auslösen

  1. Veröffentlichen Sie eine Nachricht in Ihrem Cloud Pub/Sub-Thema. In diesem Beispiel ist die Nachricht ein Name, den die Funktion in eine Begrüßung aufnehmen soll:

    gcloud pubsub topics publish YOUR_TOPIC_NAME --message YOUR_NAME

    Ersetzen Sie YOUR_TOPIC_NAME durch den Namen Ihres Cloud Pub/Sub-Themas und YOUR_NAME durch einen beliebigen String.

  2. Prüfen Sie die Logs, um sicherzustellen, dass die Vorgänge abgeschlossen wurden:

    gcloud functions logs read --limit 50
    

Sie können auch von innerhalb einer Funktion eine Nachricht in einem Pub/Sub-Thema veröffentlichen.

Bereinigen

So vermeiden Sie, dass Ihrem Google Cloud Platform-Konto die in dieser Anleitung verwendeten Ressourcen in Rechnung gestellt werden:

Projekt löschen

Am einfachsten vermeiden Sie weitere Kosten, wenn Sie das zum Ausführen der Anleitung erstellte Projekt löschen.

So löschen Sie das Projekt:

  1. Rufen Sie in der GCP Console die Seite Ressourcen verwalten auf.

    Zur Seite "Ressourcen verwalten"

  2. Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie auf Löschen .
  3. Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Beenden, um das Projekt zu löschen.

Cloud Functions-Funktion löschen

Durch das Löschen von Cloud Functions-Funktionen werden keine in Cloud Storage gespeicherten Ressourcen entfernt.

Führen Sie den folgenden Befehl aus, um die in dieser Anleitung erstellte Cloud Functions-Funktion zu löschen:

Node.js

gcloud functions delete helloPubSub 

Python

gcloud functions delete hello_pubsub 

Go

gcloud functions delete HelloPubSub 

Sie können Cloud Functions auch über die Google Cloud Console löschen.