Tutoriel sur Cloud Pub/Sub

Ce tutoriel simple montre comment rédiger, déployer et déclencher une fonction Cloud d'arrière-plan avec un déclencheur Cloud Pub/Sub.

Si vous débutez avec Pub/Sub et souhaitez en savoir plus, consultez la documentation correspondante, en particulier la gestion des sujets et des abonnements. Pour obtenir une présentation de l'utilisation des sujets et abonnements Pub/Sub dans Cloud Functions, consultez la page Déclencheurs Google Cloud Pub/Sub.

Objectifs

Coûts

Ce tutoriel fait appel à des composants facturables de Cloud Platform, en particulier :

  • Cloud Functions
  • Pub/Sub

Utilisez le simulateur de coût pour générer une estimation des coûts en fonction de votre utilisation prévue.

Les nouveaux utilisateurs de Cloud Platform peuvent bénéficier d'un essai gratuit.

Avant de commencer

  1. Connectez-vous à votre compte Google.

    Si vous n'en possédez pas déjà un, vous devez en créer un.

  2. Dans Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Cloud.

    Accéder à la page de sélection du projet

  3. Vérifiez que la facturation est activée pour votre projet Google Cloud. Découvrez comment vérifier que la facturation est activée pour votre projet.

  4. Activez les Cloud Functions and Cloud Pub/Sub API.

    Activer les API

  5. Installez et initialisez le SDK Cloud.
  6. Mettez à jour les composants gcloud :
    gcloud components update
  7. Préparez votre environnement de développement.

Préparer l'application

  1. Clonez le dépôt de l'exemple d'application sur votre ordinateur local :

    Node.js

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

    Vous pouvez également télécharger l'exemple en tant que fichier ZIP et l'extraire.

    Python

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

    Vous pouvez également télécharger l'exemple en tant que fichier ZIP et l'extraire.

    Go

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

    Vous pouvez également télécharger l'exemple en tant que fichier ZIP et l'extraire.

  2. Accédez au répertoire contenant l'exemple de code Cloud Functions permettant d'accéder à Pub/Sub :

    Node.js

    cd nodejs-docs-samples/functions/helloworld/

    Python

    cd python-docs-samples/functions/helloworld/

    Go

    cd golang-samples/functions/helloworld/

  3. Consultez l'exemple de code :

    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
    }
    

Déployer la fonction

Pour déployer la fonction avec un déclencheur Pub/Sub, exécutez la commande suivante dans le répertoire où se trouve l'exemple de code :

Node.js

gcloud functions deploy helloPubSub --runtime nodejs8 --trigger-topic YOUR_TOPIC_NAME
Vous pouvez attribuer les valeurs suivantes à l'option --runtime, afin de spécifier votre version préférée de Node.js :
  • nodejs6 (obsolète)
  • nodejs8
  • nodejs10 (version bêta)

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
Vous pouvez attribuer les valeurs suivantes à l'option --runtime, afin de spécifier votre version préférée de Go :
  • go111
  • go113 (version bêta)

YOUR_TOPIC_NAME est le nom du sujet Pub/Sub auquel la fonction sera abonnée.

Si le sujet YOUR_TOPIC_NAME n'existe pas encore, cette commande le crée automatiquement. Vous pouvez également créer un sujet avant d'exécuter la commande deploy, en utilisant Cloud Console ou la commande gcloud suivante :

gcloud pubsub topics create YOUR_TOPIC_NAME

Déclencher la fonction

  1. Publiez un message dans votre sujet Cloud Pub/Sub. Dans cet exemple, le message est un nom que la fonction inclura dans un message d'accueil :

    gcloud pubsub topics publish YOUR_TOPIC_NAME --message YOUR_NAME

    Remplacez YOUR_TOPIC_NAME par le nom de votre sujet Pub/Sub, et YOUR_NAME par une chaîne arbitraire.

  2. Vérifiez les journaux pour vous assurer que les exécutions sont terminées :

    gcloud functions logs read --limit 50
    

Vous pouvez également publier un message dans un sujet Pub/Sub à partir d'une fonction.

Nettoyer

Afin d'éviter que des frais ne soient facturés sur votre compte Google Cloud Platform pour les ressources utilisées dans ce tutoriel, procédez comme suit :

Supprimer le projet

Le moyen le plus simple d'empêcher la facturation est de supprimer le projet que vous avez créé pour ce tutoriel.

Pour supprimer le projet :

  1. Dans Cloud Console, accédez à la page Gérer les ressources.

    Accéder à la page Gérer les ressources

  2. Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer.
  3. Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez sur Arrêter pour supprimer le projet.

Supprimer une fonction Cloud Functions

La suppression de fonctions Cloud Functions ne supprime pas les ressources stockées dans Cloud Storage.

Pour supprimer la fonction Cloud que vous avez créée dans ce tutoriel, exécutez la commande suivante :

Node.js

gcloud functions delete helloPubSub 

Python

gcloud functions delete hello_pubsub 

Go

gcloud functions delete HelloPubSub 

Vous pouvez également supprimer des fonctions Cloud Functions à partir de Google Cloud Console.