Neste documento, explicamos como criar uma assinatura do Pub/Sub com transformações de mensagem única (SMTs, na sigla em inglês).
Com as SMTs de assinatura, é possível fazer modificações leves nos dados e atributos das mensagens diretamente no Pub/Sub. Esse recurso permite a limpeza, filtragem ou conversão de formato de dados antes que as mensagens sejam entregues a um cliente assinante.
Para criar uma assinatura com SMTs, use o console Google Cloud , a Google Cloud CLI, a biblioteca de cliente ou a API Pub/Sub.
Antes de começar
Saiba mais sobre o serviço do Pub/Sub e a terminologia dele.
Saiba mais sobre SMTs.
Papéis e permissões necessárias
Para receber as permissões necessárias
para criar uma assinatura com SMTs,
peça ao administrador para conceder a você o
papel do IAM de Editor do Pub/Sub (roles/pubsub.editor) no projeto.
Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.
Esse papel predefinido contém as permissões necessárias para criar uma assinatura com SMTs. Para acessar as permissões exatas necessárias, expanda a seção Permissões necessárias:
Permissões necessárias
As seguintes permissões são necessárias para criar uma assinatura com SMTs:
-
Conceda a permissão para criar uma assinatura no projeto:
pubsub.subscriptions.create
Essas permissões também podem ser concedidas com funções personalizadas ou outros papéis predefinidos.
Dependendo do tipo de assinatura, talvez sejam necessárias mais permissões. Para saber a lista exata de permissões, consulte o documento que discute a criação da assinatura específica. Por exemplo, se você estiver criando uma assinatura do BigQuery com SMTs, consulte Criar assinaturas do BigQuery.
Se você criar uma assinatura em um projeto diferente do tópico,
será necessário conceder o papel roles/pubsub.subscriber ao principal do
projeto que contém a assinatura no projeto que contém o tópico.
É possível configurar o controle de acesso no nível do projeto e no nível do recurso individual.
Criar uma assinatura com SMTs
Antes de criar uma assinatura com SMTs, consulte a documentação sobre Propriedades de uma assinatura.
Para criar uma assinatura do Pub/Sub com um ou mais SMTs, siga estas etapas. É possível ativar até cinco SMTs por assinatura.
Console
No console Google Cloud , acesse a página Assinaturas do Pub/Sub.
Clique em Criar assinatura.
No campo ID da assinatura, insira um ID para a assinatura. Para mais informações sobre como nomear assinaturas, consulte as diretrizes de nomenclatura.
Em Transformações, clique em Adicionar uma transformação.
Selecione o Tipo de transformação. Para mais informações sobre os tipos de SMT compatíveis, consulte Tipos de SMTs.
Defina as propriedades de configuração do SMT. O conjunto de propriedades depende do tipo de SMT. Para mais informações, consulte a documentação desse tipo de SMT.
Opcional. Para validar a SMT, clique em Validar. Se o SMT for válido, a mensagem
"Validation passed"será exibida. Caso contrário, uma mensagem de erro será mostrada.Para adicionar outra transformação, clique em Adicionar uma transformação e repita as etapas anteriores.
Para organizar os SMTs em uma ordem específica, clique em Mover para cima ou Mover para baixo. Para remover um SMT, clique em Excluir.
Opcional. Para testar uma SMT em uma mensagem de amostra, siga estas etapas:
Clique em Testar transformações.
Na janela Test transform, selecione a função que você quer testar.
Na janela Mensagem de entrada, digite uma mensagem de exemplo.
Para adicionar um atributo à mensagem, clique em Adicionar um atributo e insira a chave e o valor dele. É possível adicionar vários atributos.
Clique em Testar. O resultado da aplicação da SMT na mensagem é mostrado em Mensagem de saída.
Para fechar a janela Testar transformações, clique em Fechar.
Se você criar mais de uma SMT, poderá testar toda a sequência de transformações da seguinte maneira:
- Teste o primeiro SMT na sequência, conforme descrito nas etapas anteriores.
- Selecione o próximo SMT. A mensagem de entrada é preenchida previamente com a mensagem de saída do teste anterior.
- Continue testando as SMTs em ordem para garantir que toda a sequência funcione como esperado.
Clique em Criar para criar a assinatura.
gcloud
-
No console do Google Cloud , ative o Cloud Shell.
Na parte de baixo do console Google Cloud , uma sessão do Cloud Shell é iniciada e exibe um prompt de linha de comando. O Cloud Shell é um ambiente shell com a CLI do Google Cloud já instalada e com valores já definidos para o projeto atual. A inicialização da sessão pode levar alguns segundos.
Crie um arquivo YAML ou JSON que defina uma ou mais SMTs. A definição em YAML ou JSON depende do tipo de SMT. Para mais informações, consulte Tipos de SMTs.
Se o arquivo incluir mais de um SMT, o Pub/Sub os executará na ordem listada.
Opcional. Para validar uma SMT, execute o comando
gcloud pubsub message-transforms validate:gcloud pubsub message-transforms validate \ --message-transform-file=TRANSFORM_FILESubstitua:
- TRANSFORM_FILE: o caminho para um arquivo YAML ou JSON que define um único SMT. Se você estiver criando várias SMTs, valide cada uma delas individualmente.
Opcional. Para testar um ou mais SMTs em uma mensagem de amostra do Pub/Sub, execute o comando
gcloud pubsub message-transforms test:gcloud pubsub message-transforms test \ --message-transforms-file=TRANSFORMS_FILE \ --message=MESSAGE \ --attribute=ATTRIBUTESSubstitua:
- TRANSFORMS_FILE: o caminho para um arquivo YAML ou JSON que define um ou mais SMTs.
- MESSAGE: o corpo da mensagem de exemplo.
- ATTRIBUTES: opcional. Uma lista separada por vírgulas de atributos de mensagem. Cada atributo é um par de chave-valor formatado como
KEY="VALUE".
O comando executa as SMTs em ordem, usando a saída de cada uma como a entrada para a próxima. O comando gera os resultados de cada etapa.
Para criar a assinatura, execute o comando
gcloud pubsub subscriptions create:gcloud pubsub subscriptions create SUBSCRIPTION_ID \ --topic=projects/PROJECT_ID/topics/TOPIC_ID \ --message-transforms-file=TRANSFORMS_FILESubstitua:
SUBSCRIPTION_ID: o ID ou nome da assinatura que você quer criar. Para diretrizes sobre como nomear uma assinatura, consulte Nomes de recursos. O nome de uma assinatura é imutável.
PROJECT_ID: o ID do projeto que contém o tópico.
TOPIC_ID: o ID do tópico a ser assinado.
TRANSFORMS_FILE: o caminho para o arquivo YAML ou JSON que define um ou mais SMTs.
Java
Antes de tentar essa amostra, siga as instruções de configuração do Java em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub para Java (em inglês).
Python
Antes de tentar esse exemplo, siga as instruções de configuração do Python em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub Python.
Go
O exemplo a seguir usa a versão principal da biblioteca de cliente do Go Pub/Sub (v2). Se você ainda estiver usando a biblioteca v1, consulte o guia de migração para a v2. Para conferir uma lista de exemplos de código da v1, consulte os exemplos de código descontinuados.
Antes de tentar esse exemplo, siga as instruções de configuração do Go em Guia de início rápido: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Pub/Sub Go.
Como as SMTs interagem com outros recursos de assinatura
Considere os seguintes pontos ao usar uma SMT de assinatura.
Filtragem
Se a assinatura usar SMTs e filtros integrados do Pub/Sub, o filtro será aplicado antes da SMT. Isso tem as seguintes implicações:
- Se a SMT alterar os atributos da mensagem, o filtro do Pub/Sub não será aplicado ao novo conjunto de atributos.
- Sua SMT não é aplicada a mensagens filtradas pelo filtro do Pub/Sub.
- Se o SMT filtrar mensagens, fique atento ao impacto no monitoramento do backlog de assinaturas.
- Se você conectar uma assinatura a um pipeline do Dataflow, não use uma SMT de assinatura para filtrar mensagens, porque isso prejudica o escalonamento automático do Dataflow.
Ordenação das mensagens
Se você definir uma SMT em uma assinatura com a ordenação ativada e a execução da SMT gerar um erro, as mensagens subsequentes com a mesma chave de ordenação não serão entregues ao assinante. Para evitar esse problema, configure um tópico de mensagens inativas na assinatura para remover a mensagem não processada do backlog de mensagens.