Firebase: Evitando falir antes de monetizar seu projeto

👋 Intro

Uma das maiores vantagens do Firebase também pode vir tornar-se o maior pesadelo: a facilidade em escalar. Não é difícil achar relatos de startups ou desenvolvedores que viram seu negócio escalar da noite para o dia com milhões de novos acessos e usuários, gerando uma dívida exorbitante totalmente não prevista!

Então para evitar prejuízos maiores neste artigo vamos aprender como “parar as máquinas” quando nosso orçamento for atingido.

✅ Resumo

Levando em conta que você possui um plano pago no Firebase (Blaze) e entende o que são Cloud Functions, Pub/Sub… Vamos:

  1. Criar um orçamento com faixas de preço para receber alertas
  2. Automatizar o desligamento de cobranças
  3. Religar os serviços manualmete

💸 Onde vejo meus gastos?

Pelo Painel do Firebase (https://console.firebase.google.com/) clicamos no ícone da engrenagem, depois em Utilização e faturamento:

Nesta tela temos duas abas:

  1. Visão Geral: Onde podemos ver todos os gastos por período de tempo e recurso gasto
  2. Detalhes e configurações: Onde podemos modificar nosso plano de faturamento, conta de faturamento e ver todos os planos com uma calculadora (https://firebase.google.com/pricing)

Na seção Orçamentos e alertas clique em Ver orçamento.

Vamos ser redirecionados ao Google Cloud Platform (GCP), no serviço de Faturamento, no menu esquerdo temos muitas opções e relatórios, vale a pena acompanhar cada detalhe!

📨 Criando alertas e um tópico em Pub/Sub

Podemos criar quantos orçamos quiser e todos podem ser vistos na listagem (2).

Caso já tenha um definido, acesse ele, caso não clique em Criar Orçamento (1). Na tela de criação/edição de um orçamento temos:

  1. Nome do alerta
  2. Escopo (Período que um orçamento se aplica)
  3. Serviços que estão englobados neste orçamento (Sim, o GCP tem muitos serviços e a medida que for amadurecendo seu projeto é interessante granularizar os orçamentos)
  4. Gráfico de tendência de custo (Depois que o projeto está rodando temos inclusive uma previsão dos gastos ao longo do tempo)

Descendo um pouco mais a página chegamos na parte boa: Valores e Ações

Em Valor (1) temos dois tipos:

  1. Valor especificado: Um valor fixo de orçamento, ideal para quem ainda não monetizou e tem um limite financeiro para gastar.
  2. Último gasto mensal: Um valor dinâmico, ideal para quem já está faturando e segue numa crescente saudável de escala de serviços e usuários.

Em Ações (2) definimos quando serão disparados alertas. Aqui podemos definir uma porcentagem em cima do valor definido na etapa anterior ou em cima de um valor fixo, veja em gatilho ativação (3).

É possível definir valores e porcentagens além do seu orçamento, bem como se este valor se baseia em uma dívida real (existente) ou prevista.

Dica: Coloque um valor inferior ao que você pode pagar, a Google não se responsabiliza por qualquer instabilidade no sistema de notificação deles, nem com lentidão!

Agora vem o pulo do gato: Além dos alertas via email (lembrem de marcar a checkbox), vamos disparar um pub/sub que irá ser ouvido pela nossa cloud function responsável por parar as máquinas!

  1. Marque em Conectar um tópico Pub/Sub a este orçamento
  2. Caso não esteja selecionado seu projeto, clique em Alterar Projeto
  3. Clique em Criar um Tópico
  4. Será aberto um popup onde iremos apenas inserir o ID do tópico e depois em criar tópico:

Feito isto, clique em salvar.

✋ Parem as máquinas!

Ótimo! Uma vez que estourou nosso orçamento estourou, a GCP vai disparar um alerta para nosso email e uma notificação no tópico criado acima, nos resta implementar a função que irá parar tudo e evitar nossa falência!

Como pre-requisito precisamos ativar o Cloud Billing API:

Procure por Cloud Billing API em APIs e Serviços ou acesse via: https://console.cloud.google.com/apis/api/cloudbilling.googleapis.com?hl=pt-br

E ativar Cloud Functions, mas pra isso nem preciso falar, certo?

Então na tela de Cloud Functions, clique em CRIAR FUNÇÃO.

  1. Dê um nome sugestivo em Nome de função.
  2. Selecione o gatilho para Cloud Pub/Sub
  3. Selecione o tópico criado anteriormente pela gente
  4. Marque Tentar novamente em caso de falha (opcional)

Clique em salvar e abra Conta de serviço do ambiente de execução e adicione uma variável de ambiente GCP_PROJECT, como no meu exemplo:

5) Agora clique em Próxima.

Nesta Tela de Código:

  1. Selecione python 3.9 em Ambiente de execução. (Se não tiver familiarizado com python, tem o script em NodeJs na documentação)
  2. Adicione um ponto de entrada (é o nome da função que será chamada)
  3. No arquivo main.py vamos por nosso código
  4. No arquivo requirements.txt adicionamos o google-api-client
  5. Depois basta clicar em IMPLANTAR e aguardar ser instalado ;)

🎉 Agora vamos testar!

Depois de implantado, clique na sua Cloud Function e vá até a aba TESTANDO.

Aqui você põe o payload (1) que será lido no nosso script. Clica em Testar a função (2) e todos os registros e logs (3) serão carregados abaixo.

🐍 Script usado no meu teste para gerar o json:

Após isto chegou no meu email a confirmação do downgrade do meu plano:

💸 Ativando nossa conta novamente

Lá no https://console.firebase.google.com/ (salve nos favoritos!) vamos em Configurações (1), Utilização e Faturamento (2) e Modificar plano (3). Será exibido uma tela onde pode ser feita o upgrade do plano para pago (Blaze).

Prontinho! Podemos dormir tranquilos sem a preocupação de acordar falidos! Deu trabalho fazer tudo isso, mas só é preciso uma vez.

🤔 Algumas idéias

Este artigo é bem radical, convenhamos… Parar todos os serviços vai deixar nossos usuários bem irritados, mas nosso bolso agradece!

De qualquer forma, deixo links da documentação para mais detalhes, bem como aprender como desabilitar apenas alguns serviços.

Obrigado pela atenção e qualquer coisa só chamar!

🔗 Segue material complementar sensacional:

--

--

Just a developer who sometimes solves problems with software.

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Victor Hugo Vieira de Sousa

Victor Hugo Vieira de Sousa

Just a developer who sometimes solves problems with software.