Instructivo de Cloud Pub/Sub

En este instructivo simple, se muestra cómo escribir, implementar y activar una función de Cloud Functions en segundo plano con un activador de Cloud Pub/Sub. Para obtener más información sobre Cloud Pub/Sub, consulta su documentación.

Objetivos

Costos

En este instructivo, se usan los siguientes componentes facturables de Cloud Platform:

  • Google Cloud Functions
  • Google Cloud Pub/Sub

Usa la calculadora de precios para generar una estimación de los costos según el uso previsto.

New Cloud Platform users might be eligible for a free trial.

Antes de comenzar

  1. Accede a tu Cuenta de Google.

    Si todavía no tienes una cuenta, regístrate para obtener una nueva.

  2. En GCP Console, en la página de selección de proyecto, selecciona o crea un proyecto de GCP.

    Ir a la página de selección de proyecto

  3. Comprueba que la facturación esté habilitada en tu proyecto.

    Descubre cómo puedes habilitar la facturación

  4. Habilita lasCloud Functions and Cloud Pub/SubAPIAPI.

    Habilita lasAPI

  5. Instala y, luego, inicializa el SDK de Cloud.
  6. Actualiza los componentes de gcloud:
    gcloud components update
  7. Prepara tu entorno de desarrollo.

Prepara la aplicación

  1. Clona el repositorio de la aplicación de muestra en tu máquina local con el siguiente comando:

    Node.js

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

    De forma alternativa, puedes descargar la muestra como un archivo ZIP y extraerla.

    Python

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

    De forma alternativa, puedes descargar la muestra como un archivo ZIP y extraerla.

    Go

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

    De forma alternativa, puedes descargar la muestra como un archivo ZIP y extraerla.

  2. Ve al directorio que contiene el siguiente código de muestra de Cloud Functions para acceder a Cloud Pub/Sub:

    Node.js 8/10

    cd nodejs-docs-samples/functions/node8/

    Node.js 6 (obsoleta)

    cd nodejs-docs-samples/functions/helloworld/

    Python

    cd python-docs-samples/functions/helloworld/

    Go

    cd golang-samples/functions/helloworld/

  3. Observa el código de muestra:

    Node.js 8/10

    /**
     * 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} pubSubEvent The event payload.
     * @param {object} context The event metadata.
     */
    exports.helloPubSub = (pubSubEvent, context) => {
      const name = pubSubEvent.data
        ? Buffer.from(pubSubEvent.data, 'base64').toString()
        : 'World';
    
      console.log(`Hello, ${name}!`);
    };

    Node.js 6 (obsoleta)

    /**
     * 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
    }
    

Implementa la función

Para implementar la función con un activador de Cloud Pub/Sub, ejecuta el siguiente comando en el directorio donde se ubica el código de muestra:

Node.js 8

gcloud functions deploy helloPubSub --runtime nodejs8 --trigger-topic YOUR_TOPIC_NAME

Node.js 10 (Beta)

gcloud functions deploy helloPubSub --runtime nodejs10 --trigger-topic YOUR_TOPIC_NAME

Node.js 6 (obsoleta)

gcloud functions deploy helloPubSub --runtime nodejs6 --trigger-topic YOUR_TOPIC_NAME

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

donde YOUR_TOPIC_NAME es el nombre del tema de Cloud Pub/Sub al que se suscribirá la función.

Activa la función

  1. Publica un mensaje en el tema de Cloud Pub/Sub. En este ejemplo, el mensaje es un nombre que la función incluirá en un saludo:

    gcloud pubsub topics publish YOUR_TOPIC_NAME --message YOUR_NAME

    Reemplaza YOUR_TOPIC_NAME con el nombre del tema de Cloud Pub/Sub y YOUR_NAME con una string arbitraria.

  2. Revisa los registros para asegurarte de que las ejecuciones se completaron:

    gcloud functions logs read --limit 50
    

También puedes publicar un mensaje en un tema de Pub/Sub desde una función.

Realiza una limpieza

Sigue estos pasos para evitar que se apliquen cargos a tu cuenta de Google Cloud Platform por los recursos que usaste en este instructivo:

Cómo borrar el proyecto

La manera más fácil de eliminar la facturación es borrar el proyecto que creaste para el instructivo.

Para borrar el proyecto, sigue estos pasos:

  1. En GCP Console, dirígete a la página Administrar recursos.

    Ir a la página Administración de recursos

  2. En la lista de proyectos, selecciona el proyecto que deseas borrar y haz clic en Borrar .
  3. En el cuadro de diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.

Borra la función de Cloud Functions

Borrar las funciones de Cloud Functions no quita ningún recurso almacenado en Cloud Storage.

Para borrar la función de Cloud Functions que creaste en este instructivo, ejecuta el siguiente comando:

Node.js

gcloud functions delete helloPubSub 

Python

gcloud functions delete hello_pubsub 

Go

gcloud functions delete HelloPubSub 

También puedes borrar las funciones de Cloud Functions desde Google Cloud Platform Console.

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Documentación de Cloud Functions