Case DataLakers — Cloud Function: acessar e retornar dados do BigQuery como API
Na DataLakers, temos como principal missão otimizar os processos dos nossos clientes e fazer com que suas funcionalidades estejam ao alcance fácil para seu dia a dia de negócios.
Hoje trazemos em nosso Blog do Medium um artigo prático e bem técnico, em que conseguimos solucionar o problema do nosso cliente a partir das ferramentas disponíveis na Google Cloud Program (GCP).
Nosso cliente em questão (que, por questões de confidencialidade, manteremos anônimo) queria consultar sua base de clientes no BigQuery, para usar os recursos da Google Cloud Program (GCP) e ter um acesso aos dados por meio de uma API. Por isso, decidimos que seria a melhor solução usar a Cloud Function, uma função auto gerenciada com escalamento automático para poder servir esses recursos de consulta da base do BigQuery para uma aplicação externa com segurança e confiabilidade. Dessa maneira, unimos esses dois recursos e criamos uma solução.
Nesse artigo você verá o passo a passo do nosso processo.
Indo direto ao assunto no console do Google vá para Cloud Functions, e lá clique em Create Function.
1. Configuração
Na primeira parte de configuração escolha o tipo de função. Criamos uma de geração 1, o nome do endpoint em Function name e a Região em Region
- Environment: 1st gen
- Function name: search-bigquery-example (nome do endpoint)
- Region: us-central1 (fica a sua escolha)
Como Gatilho mantenha HTTP e por segurança deixe habilitado o checkbox Require HTTPS
As configurações abaixo de tempo de Runtime, build, connections e outros fatores, dependem de cada ambiente, então não iremos nos aprofundar.
Clique em Save e Next
2. Código
Em code você vai escolher o Runtime e colocar o código fonte. Colocamos um código fonte de exemplo abaixo, feito em python. Então as configurações ficaram assim:
- Runtime : Python 3.8
- Entry point : search_bigquery_example (Atenção esse é o nome da função que vai ser chamada logo tem que ser igual a função que foi definida)
- Source code: Inline Editor
De começo no próprio editor tem um código de exemplo, mas vamos descartar esse e olhar o de baixo.
Criamos três arquivos:
- requirements.txt (dependencias da cloud function)
- main.py (código central que aceita e responde as requisições)
- functions.py (funções auxiliares para deixar tudo arrumado)
Requirements.txt
- Sem mistérios aqui! Dependências do projeto e só:
# requirements.txt# aqui tem as duas dependencias no mesmo formato que usei na cloud functiongoogle-cloud-bigqueryflask
main.py
- search_bigquery_example
- Aqui é a função que recebe e responde as requisições. Colocamos os comentários no código para ficar mais claro:
functions.py
- Aqui são funções auxiliares que separamos para organizar o código, como boas práticas de desenvolvimento e auxilia a função principal **main.py** deixando mais clara e limpa e ainda separando as responsabilidades.
Agora é só executar a Cloud Function e ver como a mágica acontece!
Considerações Finais
As Cloud Functions são uma ótima saída para criar jobs na área de engenharia de dados, funcionais e de ágil implementação, devido a praticidade do deploy e versatilidade de gatilhos (HTTP, Cloud Pub/Sub, Cloud Storage e etc..). Porém, é importante destacar que seu uso é mais adequado para jobs com pouca demanda e de propósito único, caso a sua intenção seja uma API (como no exemplo aqui mostrado). No caso de alta demanda seria uma melhor solução se atentar para outros serviços da plataforma da GCP.
Escrito por Raphael Oliveira (Engenheiro de Dados da DataLakers)