Tutorial do Cloud Pub/Sub

Neste simples tutorial, demonstraremos como escrever, implantar e acionar um Background Cloud Function com um gatilho do Cloud Pub/Sub. Para saber mais, consulte a documentação do Cloud Pub/Sub.

Objetivos

Custos

Este tutorial usa componentes do Cloud Platform que podem ser cobrados, incluindo:

  • Google Cloud Functions
  • Google Cloud Pub/Sub

Use a calculadora de preços para gerar uma estimativa de custo com base no uso previsto.

Usuários novos do Cloud Platform podem se qualificar para uma avaliação gratuita.

Antes de começar

  1. Faça login na sua Conta do Google.

    Se você ainda não tiver uma, inscreva-se.

  2. No Console do GCP, na página do seletor de projetos, selecione ou crie um projeto do GCP.

    Acesse a página do seletor de projetos

  3. Verifique se o faturamento foi ativado no projeto do Google Cloud Platform. Saiba como confirmar que o faturamento está ativado para seu projeto.

  4. Ative a(s) Cloud Functions e Cloud Pub/Sub APIs necessária(s).

    Ativar a(s) APIs

  5. Instale e inicialize o SDK do Cloud.
  6. Atualize os componentes gcloud:
    gcloud components update
  7. Prepare o ambiente de desenvolvimento.

Como preparar o aplicativo

  1. Clone o repositório do aplicativo de amostra na máquina local:

    Node.js

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

    Outra alternativa é fazer o download da amostra como um arquivo ZIP e extraí-lo.

    Python

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

    Outra alternativa é fazer o download da amostra como um arquivo ZIP e extraí-lo.

    Go

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

    Outra alternativa é fazer o download da amostra como um arquivo ZIP e extraí-lo.

  2. Mude para o diretório que contém o código de amostra do Cloud Functions para acessar o Cloud Pub/Sub:

    Node.js

    cd nodejs-docs-samples/functions/helloworld/

    Python

    cd python-docs-samples/functions/helloworld/

    Go

    cd golang-samples/functions/helloworld/

  3. Confira o código de amostra:

    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
    }
    

Como implantar a função

Para implantar a função com um acionador Cloud Pub/Sub, execute o seguinte comando no diretório onde o código de amostra está localizado:

Node.js

gcloud functions deploy helloPubSub --runtime nodejs8 --trigger-topic YOUR_TOPIC_NAME
É possível usar os seguintes valores para que a sinalização --runtime use versões diferentes do Node.js:
  • nodejs6 (obsoleto)
  • nodejs8
  • nodejs10 (beta)

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

em que YOUR_TOPIC_NAME é o nome do tópico do Cloud Pub/Sub onde a função será inscrita.

Como acionar a função

  1. Publique uma mensagem no seu tópico do Cloud Pub/Sub. Neste exemplo, a mensagem é um nome que a função incluirá em uma saudação:

    gcloud pubsub topics publish YOUR_TOPIC_NAME --message YOUR_NAME

    Substitua YOUR_TOPIC_NAME pelo nome do tópico do Cloud Pub/Sub e YOUR_NAME por uma string arbitrária.

  2. Verifique os registros para se certificar de que as execuções foram concluídas:

    gcloud functions logs read --limit 50
    

Você também pode publicar uma mensagem em um tópico Pub/Sub de dentro de uma função.

Limpeza

Para evitar que os recursos usados neste tutorial sejam cobrados na conta do Google Cloud Platform:

Como excluir o projeto

O jeito mais fácil de evitar cobranças é excluindo o projeto que você criou para o tutorial.

Para excluir o projeto:

  1. No Console do GCP, acesse a página Gerenciar recursos.

    Acessar a página Gerenciar recursos

  2. Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir .
  3. Na caixa de diálogo, digite o ID do projeto e clique em Encerrar para excluí-lo.

Como excluir a função do Cloud

A exclusão de Cloud Functions não remove nenhum recurso armazenado no Cloud Storage.

Para excluir a função do Cloud criada neste tutorial, execute o seguinte comando:

Node.js

gcloud functions delete helloPubSub 

Python

gcloud functions delete hello_pubsub 

Go

gcloud functions delete HelloPubSub 

Você também pode excluir o Cloud Functions do Console do Google Cloud.