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.

Wenn Sie Pub/Sub noch nicht kennen und weitere Informationen erhalten möchten, lesen Sie die Dokumentation zu Pub/Sub, insbesondere zur Verwaltung von Themen und Abonnements. Unter Google Cloud Pub/Sub-Trigger erhalten Sie einen Überblick über das Arbeiten mit Pub/Sub-Themen und -Abonnements in Cloud Functions.

Ziele

Kosten

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

  • Cloud Functions
  • Pub/Sub

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

Neuen Cloud Platform-Nutzern steht möglicherweise eine kostenlose Testversion zur Verfügung.

Vorbereitung

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

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

  2. Wählen Sie in der Cloud Console auf der Seite für die Projektauswahl ein Cloud-Projekt aus oder erstellen Sie eines.

    Zur Projektauswahl

  3. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein. So prüfen Sie, ob die Abrechnung für Ihr Projekt aktiviert ist.

  4. Cloud Functions, Cloud Build, and Cloud Pub/Sub APIs aktivieren.

    Aktivieren Sie die APIs

  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.

    Java

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

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

  2. Wechseln Sie in das Verzeichnis mit dem Cloud Functions-Beispielcode für den Zugriff auf Pub/Sub:

    Node.js

    cd nodejs-docs-samples/functions/helloworld/

    Python

    cd python-docs-samples/functions/helloworld/

    Go

    cd golang-samples/functions/helloworld/

    Java

    cd java-docs-samples/functions/helloworld/hello-pubsub/

  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} message The Pub/Sub message.
     * @param {object} context The event metadata.
     */
    exports.helloPubSub = (message, context) => {
      const name = message.data
        ? Buffer.from(message.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) // Automatically decoded from base64.
    	if name == "" {
    		name = "World"
    	}
    	log.Printf("Hello, %s!", name)
    	return nil
    }
    

    Java

    
    import com.google.cloud.functions.BackgroundFunction;
    import com.google.cloud.functions.Context;
    import functions.eventpojos.PubSubMessage;
    import java.nio.charset.StandardCharsets;
    import java.util.Base64;
    import java.util.logging.Level;
    import java.util.logging.Logger;
    
    public class HelloPubSub implements BackgroundFunction<PubSubMessage> {
      private static final Logger logger = Logger.getLogger(HelloPubSub.class.getName());
    
      @Override
      public void accept(PubSubMessage message, Context context) {
        String name = "world";
        if (message != null && message.getData() != null) {
          name = new String(
              Base64.getDecoder().decode(message.getData().getBytes(StandardCharsets.UTF_8)),
              StandardCharsets.UTF_8);
        }
        logger.info(String.format("Hello %s!", name));
        return;
      }
    }

Funktion bereitstellen

Führen Sie diesen Befehl in dem Verzeichnis mit dem Beispielcode (oder im Fall von Java die Datei pom.xml) aus, um die Funktion mit einem Pub/Sub-Trigger bereitzustellen:

Node.js

gcloud functions deploy helloPubSub \
--runtime nodejs10 --trigger-topic YOUR_TOPIC_NAME
Mit den folgenden Werten für das Flag --runtime können Sie Ihre bevorzugte Version von Node.js festlegen:
  • nodejs10
  • nodejs12

Python

gcloud functions deploy hello_pubsub \
--runtime python37 --trigger-topic YOUR_TOPIC_NAME
Mit den folgenden Werten für das Flag --runtime können Sie Ihre bevorzugte Version von Python festlegen:
  • python37
  • python38

Go

gcloud functions deploy HelloPubSub \
--runtime go111 --trigger-topic YOUR_TOPIC_NAME
Mit diesen Werten für das Flag --runtime können Sie Ihre bevorzugte Version von Go festlegen:
  • go111
  • go113

Java

gcloud functions deploy java-pubsub-function \
--entry-point functions.HelloPubSub \
--runtime java11 \
--memory 512MB --trigger-topic YOUR_TOPIC_NAME

Dabei ist YOUR_TOPIC_NAME der Name des Pub/Sub-Themas, das die Funktion abonnieren wird.

Wenn YOUR_TOPIC_NAME nicht bereits vorhanden ist, wird das Thema von diesem Befehl für Sie erstellt. Sie können auch ein Thema erstellen, bevor Sie den Befehl deploy mit der Cloud Console oder dem folgenden gcloud-Befehl ausführen:

gcloud pubsub topics create YOUR_TOPIC_NAME

Funktion auslösen

  1. Veröffentlichen Sie eine Nachricht in Ihrem 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 Pub/Sub-Themas und YOUR_NAME durch einen beliebigen String.

  2. Prüfen Sie die Logs, um zu bestätigen, dass die Ausführung abgeschlossen wurde:

    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. Wechseln Sie in der Cloud Console zur Seite Ressourcen verwalten.

    Zur Seite "Ressourcen verwalten"

  2. Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann 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 

Java

gcloud functions delete java-pubsub-function 

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