Como criar uma função no Cloud Functions acionada pelo Pub/Sub e criar um arquivo no Cloud Storage do GCP

 Nesta postagem, falaremos como criar uma função utilizando Cloud Functions que é acionada pelo Pub/Sub do Google Cloud.

O que é o Cloud Functions?

É um serviço totalmente gerenciado do GCP que permite a execução de códigos sem a necessidade de gerenciar um servidor ou uma VM, é cobrado conforme as execuções e permite escalonamento automático.

O que é Pub/Sub?

O Pub/Sub (Publish/Subscribe) é um serviço de mensagens assíncronas do GCP.

Permite armazenamento e entrega de mensagens em formato de tópicos e assinaturas.

O que é Cloud Storage?

Fornece, a nível mundial, um armazenamento de objetos altamente durável que escalona para exabytes de dados. É possível acessar dados instantaneamente de qualquer classe de armazenamento, integrar o armazenamento aos seus aplicativos com uma API exclusiva unificada e otimizar o preço e desempenho de forma fácil.

Passo a Passo

1. O primeiro passo a fazer é o login em sua conta do GCP, para este tutorial você vai precisar de uma conta que possua um projeto.

2. Vá até o menu, selecione Pub/Sub > Tópicos:

3. Selecione Criar Tópico:

4. Dê um nome/id para seu tópico, ele precisa ter de 3 a 255 caracteres, começar com uma letra e conter apenas estes tipos de caracteres: letras, números, traços (-), pontos (.), sublinhados (_), indicadores diacríticos (~), símbolos de porcentagem (%) ou indicadores de adição (+). Não é possível iniciar com "goog". Neste exemplo usaremos o nome "eventos":

5. Verifique o tópico criado:

6. Vá até menu, selecione Storage > Navegador.

7.Clique em Criar Intervalo ou Criar Bucket:

8.Especifique um nome para seu bucket, o nome precisa ser exclusivo no mundo, precisam começar e terminar com um número ou uma letra. Precisam conter apenas letras minúsculas, números, traços (-), sublinhados (_) e pontos (.). Precisam ter de 3 a 63 caracteresNão é permitido usar espaços e não podem começar com o prefixo "goog", e não podem conter a palavra "google".

9. Defina a região conforme abaixo e clique em continuar:

10. Defina o tipo de armazenamento como Standard e clique em continuar:

11. Escolha o controle de acesso como detalhado e clique em continuar.

12. Clique em criar:

13. Verifique se o bucket foi criado com sucesso:

14. Vá até menu, selecione Cloud Functions.

15.Clique em Criar Função:

16.Especifique um nome para sua função, o nome deve começar com uma letra, seguida por até 62 letras, números, hífens e sublinhados, e terminar com uma letra ou um número, nesse exemplo usaremos o nome "verifica-mensagem":

17. Defina a região conforme abaixo:

18. Existem vários tipos de "Gatilhos"/acionadores para nossa função, no nosso exemplo vamos usar o tipo Pub/sub, ou seja, ao chegar uma nova mensagem no tópico nossa função será executada:

Não será preciso alterar a memória ou outros itens, clique em Salvar.

19. Confirme as informações da função e clique em Próxima:

20. Neste passo usaremos a linguagem Node.Js 10 com o código abaixo, depois de colocar o código, após altere o arquivo package.json que nem abaixo, depois clique em Implantar:



'use strict';

const {Storage} = require('@google-cloud/storage');
const storage = new Storage();


exports.minha_funcao = (event, context) => {

const fs = require('fs');
const datetime = new Date();
const data_atual = Date.now()

const meu_diretorio = '/'
const meu_arquivo = 'eventos' + '-' + data_atual + '.txt'

const message = event.data ? Buffer.from(event.data, 'base64').toString(): 'Erro ao ler a mensagem';

console.log(message);

const bucket = storage.bucket("id_do_meu_projeto_meu_bucket");
const file = bucket.file(meu_arquivo);

const stream     = require('stream')
const dataStream = new stream.PassThrough()

dataStream.push(message)
dataStream.push(null)

const blobStream = dataStream.pipe(file.createWriteStream({
    resumable: false,
    gzip: true
}))

blobStream.on('error', (err) => {
    console.log('Error blobStream: ',err)
});

blobStream.on('finish', () => { 
	console.log('Arquivo gerado com sucesso')
});

};


{
  "name": "minha_funcao",
  "version": "1.0.0",
  "private": true,
  "engines": {
    "node": ">=12.0.0"
  },  
  "dependencies": {
    "@google-cloud/functions-framework": "^1.1.1",
    "@google-cloud/pubsub": "^2.0.0",
    "@google-cloud/storage": "^5.0.0"
  }
}

21.Aguarde a criação da função:

22. Volte ao pub/sub e clique em publicar mensagem:

23. Digite sua mensagem e clique em Publicar:

24. Volte na sua função do Cloud Function e clique em Registros, será possível ver que a mensagem do tópico iniciou o evento da nossa função, verifique também o arquivo gerado no cloudstorage:



Referências

  • Cloud Functions documentation

https://cloud.google.com/functions

  • Por que usar Pub/Sub?

https://inside.contabilizei.com.br/por-que-usar-pub-sub-378f0e212e67

  • Pub/Sub

https://cloud.google.com/pubsub?hl=pt-br

  • O que é o Pub/Sub?

https://cloud.google.com/pubsub/docs/overview