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.

Tipos de eventos

Cloud Functions usa un único evento de Cloud Pub/Sub y tiene el valor de tipo de activador google.pubsub.topic.publish.

Este evento se envía cuando se publica un mensaje en un tema de Cloud Pub/Sub que se especifica cuando una función está implementada. Cada mensaje publicado en este tema activará la ejecución de la función con el contenido del mensaje pasado como datos de entrada.

Estructura de eventos

Las funciones de Cloud Functions activadas desde un tema de Cloud Pub/Sub se enviarán como eventos que cumplan con el tipo PubsubMessage, con la advertencia de que publishTime y messageId no están disponibles directamente en PubsubMessage. En cambio, puede acceder a publishTime y messageId a través del ID del evento y las propiedades de 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 sobre el tema, se almacena como una string codificada en base64 en el atributo data de . Para extraer la carga útil del objeto PubsubMessage, es posible que debas decodificar el atributo de datos, como se muestra en los ejemplos a continuación.

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 (obsoleto)

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

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

El siguiente comando de gcloud implementa una función que se activará cuando un mensaje se publique en un tema de Cloud Pub/Sub:

Node.js 8

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

Node.js 10 (Beta)

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

Node.js 6 (obsoleto)

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

Python

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

Go

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

donde 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.

Consulta el instructivo de Cloud Pub/Sub para obtener un ejemplo completo de cómo usar los activadores de Cloud Pub/Sub.

Activadores de Cloud Pub/Sub heredados

El comando de gcloud a continuación implementa una función que se activa por notificaciones heredadas de Cloud Pub/Sub en un tema específico. Estas notificaciones son compatibles con las funciones heredadas que ya consumen estos eventos. Sin embargo, recomendamos usar el marcador --trigger-topic como alternativa, ya que las notificaciones heredadas podrían quitarse en una fecha futura.

Node.js 8

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

Node.js 10 (Beta)

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

Node.js 6 (obsoleto)

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

Python

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

Go

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 sobre 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