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