Tutorial do Cloud Pub/Sub

Neste simples tutorial, demonstraremos como escrever, implantar e acionar uma Função do Cloud em segundo plano com um gatilho do Cloud Pub/Sub.

Se você é novo no Pub/Sub e quer saber mais, consulte a documentação do Pub/Sub, especialmente gerenciamento de tópicos e assinaturas. Consulte Acionadores do Google Cloud Pub/Sub para ter uma visão geral do trabalho com tópicos e assinaturas Pub/Sub no Cloud Functions.

Objetivos

Custos

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

  • Cloud Functions
  • 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 ter direito a uma avaliação gratuita.

Antes de começar

    https://cloud.google.com/functions/docs/tutorials/pubsub beta cloudfunctions,pubsub Cloud Functions and Cloud Pub/Sub no_credentials
  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. Instale e inicialize o SDK do Cloud.
  5. Atualize os componentes gcloud:
    gcloud components update
  6. Prepare seu ambiente de desenvolvimento.

Como preparar o aplicativo

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

    Node.js

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

    Outra opção é fazer o download da amostra como um arquivo ZIP e extraí-la.

    Python

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

    Outra opção é fazer o download da amostra como um arquivo ZIP e extraí-la.

    Go

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

    Outra opção é fazer o download da amostra como um arquivo ZIP e extraí-la.

  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 de Pub/Sub, execute o seguinte comando no diretório em que o código do exemplo está localizado:

Node.js

gcloud functions deploy helloPubSub --runtime nodejs8 --trigger-topic YOUR_TOPIC_NAME
Use estes valores da sinalização --runtime para especificar sua versão preferencial 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
É possível usar os seguintes valores para a sinalização --runtime para especificar sua versão preferencial do Go:
  • go111
  • go113 (beta)

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

Se YOUR_TOPIC_NAME ainda não existir, este comando o criará para você. Você também pode criar um tópico antes de executar o comando deploy, usando o Console do Cloud ou o seguinte comando gcloud:

gcloud pubsub topics create YOUR_TOPIC_NAME

Como acionar a função

  1. Publique uma mensagem no seu tópico do 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 seu tópico do Pub/Sub e YOUR_NAME com 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 a partir de uma função.

Como fazer a limpeza

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

Excluir o projeto

A maneira mais fácil de evitar cobranças é excluir o projeto criado para o tutorial.

Para excluir o projeto:

    console
  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 Funções do Cloud não remove nenhum recurso armazenado no Cloud Storage.

Para excluir a Função do Cloud criada neste tutorial, execute este comando:

Node.js

gcloud functions delete helloPubSub 

Python

gcloud functions delete hello_pubsub 

Go

gcloud functions delete HelloPubSub 

Também é possível excluir Funções do Cloud no Console do Google Cloud.