Activadores de Google Cloud Pub/Sub

Cloud Functions se puede activar mediante mensajes publicados en temas de Cloud Pub/Sub en el mismo proyecto de GCP que la función. Cloud Pub/Sub es un bus de mensajes de distribución global que se escala automáticamente cuando lo necesitas y brinda la base para que compiles tus propios servicios globales sólidos.

Estructura de eventos

Las funciones de Cloud Functions activadas desde un tema de Cloud Pub/Sub recibirán eventos que se adecúen al tipo de PubsubMessage, con la salvedad de que publishTime y messageId no están directamente disponibles en el PubsubMessage. En su lugar, puedes acceder a publishTime y messageId a través de las propiedades de ID del evento y marca de tiempo de los metadatos del evento. Estos metadatos son accesibles a través del objeto de contexto que se pasa a tu función cuando se invoca.

La carga útil del objeto PubsubMessage, los datos publicados en el tema, se almacena como una string codificada en Base 64 en el atributo data del PubsubMessage. Para extraer la carga útil del objeto de PubsubMessage, es posible que necesites decodificar el atributo de datos como se muestra en los siguientes ejemplos:

Código de muestra

Node.js 6

/**
 * 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} event The Cloud Functions event.
 * @param {function} callback The callback function.
 */
exports.helloPubSub = (event, callback) => {
  const pubsubMessage = event.data;
  const name = pubsubMessage.data
    ? Buffer.from(pubsubMessage.data, 'base64').toString()
    : 'World';

  console.log(`Hello, ${name}!`);

  callback();
};

Node.js 8 (Beta)

/**
 * 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 (Beta)

def hello_pubsub(data, context):
    """Background Cloud Function to be triggered by Pub/Sub.
    Args:
         data (dict): The dictionary with data specific to this type of event.
         context (google.cloud.functions.Context): The Cloud Functions event
         metadata.
    """
    import base64

    if 'data' in data:
        name = base64.b64decode(data['data']).decode('utf-8')
    else:
        name = 'World'
    print('Hello {}!'.format(name))

Go (Beta)

// Package helloworld provides a set of Cloud Function samples.
package helloworld

import (
	"context"
	"log"
)

// PubSubMessage is the payload of a Pub/Sub event. Please refer to the docs for
// additional information regarding Pub/Sub events.
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

El siguiente comando de gcloud implementa una función que Cloud Pub/Sub activará:

Node.js 6

gcloud functions deploy FUNCTION_NAME --runtime nodejs6 --trigger-topic TOPIC_NAME

Node.js 8 (Beta)

gcloud functions deploy FUNCTION_NAME --runtime nodejs8 --trigger-topic TOPIC_NAME

Python (Beta)

gcloud functions deploy FUNCTION_NAME --runtime python37 --trigger-topic TOPIC_NAME

Go (Beta)

gcloud functions deploy FUNCTION_NAME --runtime go111 --trigger-topic TOPIC_NAME

en el que FUNCTION_NAME es el nombre de la función y TOPIC_NAME es el nombre del tema de Cloud Pub/Sub al que se suscribirá la función. Si el tema no existe, se crea durante la implementación.

Activadores de Cloud Pub/Sub heredados

El comando de gcloud que aparece a continuación implementa una función que se activa mediante notificaciones de Cloud Pub/Sub heredadas sobre un tema específico. Estas notificaciones son compatibles con las funciones heredadas que ya consumen estos eventos. Sin embargo, recomendamos usar la marca --trigger-topic en su lugar, puesto que las notificaciones heredadas podrían quitarse en una fecha futura.

Node.js 6

gcloud functions deploy FUNCTION_NAME --runtime nodejs6 --trigger-resource TOPIC_NAME --trigger-event providers/cloud.pubsub/eventTypes/topic.publish

Node.js 8 (Beta)

gcloud functions deploy FUNCTION_NAME --runtime nodejs8 --trigger-resource TOPIC_NAME --trigger-event providers/cloud.pubsub/eventTypes/topic.publish

Python (Beta)

gcloud functions deploy FUNCTION_NAME --runtime python37 --trigger-resource TOPIC_NAME --trigger-event providers/cloud.pubsub/eventTypes/topic.publish

Go (Beta)

gcloud functions deploy FUNCTION_NAME --runtime go111 --trigger-resource TOPIC_NAME --trigger-event providers/cloud.pubsub/eventTypes/topic.publish

Próximos pasos

Consulta el Instructivo de Cloud Pub/Sub para ver un ejemplo de cómo implementar una función en segundo plano que se activa mediante Cloud Pub/Sub.

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

Enviar comentarios sobre...

Documentación de Cloud Functions