Instructivo de Cloud Pub/Sub

En este sencillo instructivo, se demuestra 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

Este instructivo usa componentes facturables de Cloud Platform, incluidos los siguientes:

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

Los usuarios nuevos de Cloud Platform pueden ser aptos para una prueba gratuita.

Antes de comenzar

  1. Sign in to your Google Account.

    If you don't already have one, sign up for a new account.

  2. Select or create a Google Cloud Platform project.

    Go to the Manage resources page

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

    Descubre cómo puedes habilitar la facturación

  4. {% dynamic if "no_credentials" in setvar.task_params %} {% dynamic setvar credential_type %}NO_AUTH{% dynamic endsetvar %} {% dynamic if not setvar.redirect_url %} {% dynamic setvar redirect_url %}https://console.cloud.google.com{% dynamic endsetvar %} {% dynamic endif %}{% dynamic endif %} {% dynamic if setvar.in_henhouse_no_auth_whitelist %} {% dynamic if not setvar.credential_type %}{% dynamic setvar credential_type %}NO_AUTH{% dynamic endsetvar %} {% dynamic endif %} {% dynamic elif setvar.in_henhouse_service_account_whitelist %} {% dynamic if not setvar.credential_type %}{% dynamic setvar credential_type %}SERVICE_ACCOUNT{% dynamic endsetvar %} {% dynamic endif %}{% dynamic endif %} {% dynamic if not setvar.service_account_roles and setvar.credential_type == "SERVICE_ACCOUNT" %} {% dynamic setvar service_account_roles %} {% dynamic endsetvar %} {% dynamic endif %} {% dynamic setvar console %} {% dynamic if "no_steps" not in setvar.task_params %}
  5. {% dynamic endif %} {% dynamic if setvar.api_list %} {% dynamic if setvar.in_henhouse_no_auth_whitelist or setvar.in_henhouse_service_account_whitelist %} Configurar un proyecto de GCP Console.

    Configurar un proyecto

    Haz clic para realizar alguna de las siguientes acciones:

    • Crear o seleccionar un proyecto.
    • Habilitar las {% dynamic if setvar.api_names %}{% dynamic print setvar.api_names %}{% dynamic else %}{% dynamic endif %}{% dynamic if "," in setvar.api_list %} API{% dynamic elif "API" in setvar.api_names %}{% dynamic else %} API{% dynamic endif %} necesarias para el proyecto.
    • {% dynamic if setvar.credential_type == 'SERVICE_ACCOUNT' %}
    • Crear una cuenta de servicio.
    • Descargar una clave privada como JSON.
    • {% dynamic endif %}

    Puedes visualizar y administrar estos recursos en GCP Console en cualquier momento.

    {% dynamic else %}{% dynamic if "no_text" not in setvar.task_params %} Habilita las {% dynamic if setvar.api_names %}{% dynamic print setvar.api_names %}{% dynamic else %}{% dynamic endif %}{% dynamic if "," in setvar.api_list %} API{% dynamic elif "API" in setvar.api_names %}{% dynamic else %} API{% dynamic endif %} necesarias. {% dynamic endif %}

    Habilita las {% dynamic if "," in setvar.api_list %} API{% dynamic else %} API{% dynamic endif %}

    {% dynamic endif %}{% dynamic endif %}{% dynamic if "no_steps" not in setvar.task_params %}
  6. {% dynamic endif %}{% dynamic endsetvar %}{% dynamic print setvar.console %}
  7. Instala y, luego, inicializa el SDK de Cloud.
  8. Actualiza y, luego, instala los componentes de gcloud:

    Node.js 6

    gcloud components update

    Node.js 8 (Beta)

    gcloud components update &&
    gcloud components install beta

    Python (Beta)

    gcloud components update &&
    gcloud components install beta

    Go (Beta)

    gcloud components update &&
    gcloud components install beta
  9. Prepara tu entorno de programación.

Prepara la aplicación

  1. Clona el repositorio de la app de muestra en tu máquina local como se muestra a continuación:

    Node.js 6

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

    De manera opcional, puedes descargar la muestra como un archivo zip y extraerla.

    Node.js 8 (Beta)

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

    De manera opcional, puedes descargar la muestra como un archivo zip y extraerla.

    Python (Beta)

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

    De manera opcional, puedes descargar la muestra como un archivo zip y extraerla.

    Go (Beta)

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

    De manera opcional, 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 6

    cd nodejs-docs-samples/functions/helloworld/

    Node.js 8 (Beta)

    cd nodejs-docs-samples/functions/node8/

    Python (Beta)

    cd python-docs-samples/functions/helloworld/

    Go (Beta)

    cd golang-samples/functions/helloworld/
  3. Ve el 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

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

Node.js 6

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

Node.js 8 (Beta)

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

Python (Beta)

gcloud functions deploy hello_pubsub --runtime python37 --trigger-topic YOUR_TOPIC_NAME

Go (Beta)

gcloud functions deploy HelloPubSub --runtime go111 --trigger-topic YOUR_TOPIC_NAME

en el que 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 por el nombre de tu tema de Cloud Pub/Sub, y YOUR_NAME por una string arbitraria.

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

    gcloud functions logs read --limit 50
    

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, haz lo siguiente:

  1. In the GCP Console, go to the Projects page.

    Go to the Projects page

  2. In the project list, select the project you want to delete and click Delete delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

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

gcloud functions delete hello_pubsub 

Go (Beta)

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