Executar funções localmente

A CLI do Firebase inclui um emulador do Cloud Functions que pode emular os seguintes tipos de função:

  • Funções HTTPS
  • Funções chamáveis
  • Funções da fila de tarefas
  • Funções em segundo plano acionadas por Firebase Authentication, Realtime Database, Cloud Firestore, Cloud Storage, alertas compatíveis do Firebase e Cloud Pub/Sub.

Execute funções localmente para testá-las antes da implantação na produção.

Instalar a CLI do Firebase

Para usar o emulador do Cloud Functions, primeiro instale a CLI do Firebase:

npm install -g firebase-tools

Para usar o emulador local, o Cloud Functions precisa do seguinte:

  • firebase-admin versão 8.0.0 ou mais recente.
  • firebase-functions versão 3.0.0 ou mais recente.

Configurar credenciais de administrador (opcional)

Para que os testes de funções interajam com outras APIs do Google ou do Firebase pelo SDK Admin do Firebase, talvez você precise configurar credenciais de administrador.

  • Os gatilhos do Cloud Firestore e do Realtime Database já têm as credenciais necessárias e não exigem configuração adicional.
  • Para todas as outras APIs, incluindo as APIs do Firebase (como Authentication e FCM) ou as APIs do Google (como Cloud Translation ou Cloud Speech), será necessário concluir as etapas de configuração descritas nesta seção. Isso se aplica ao usar o shell do Cloud Functions ou firebase emulators:start.

Se quiser configurar credenciais de administrador para funções emuladas:

  1. Abra o painel de contas de serviço do console do Google Cloud.
  2. Verifique se a conta de serviço padrão do App Engine está selecionada e use o menu de opções à direita para selecionar Criar chave.
  3. Selecione JSON para a opção do tipo de chave e clique em Criar.
  4. Defina suas credenciais padrão do Google para apontar para a chave salva:

    Unix

    export GOOGLE_APPLICATION_CREDENTIALS="path/to/key.json"
    firebase emulators:start
    

    Windows

    set GOOGLE_APPLICATION_CREDENTIALS=path\to\key.json
    firebase emulators:start
    

Depois de concluir essas etapas, seus testes de funções poderão acessar as APIs do Firebase e do Google usando o SDK Admin. Por exemplo, ao testar um gatilho do Authentication, a função emulada poderá chamar admin.auth().getUserByEmail(email).

Definir a configuração de funções (opcional)

Se você estiver usando variáveis de configuração de funções personalizadas, primeiro execute o comando para receber a configuração personalizada (execute isso no diretório functions) no ambiente local:

firebase functions:config:get > .runtimeconfig.json
# If using Windows PowerShell, replace the above with:
# firebase functions:config:get | ac .runtimeconfig.json

Executar o Pacote de emuladores

Para executar o emulador do Cloud Functions, use o comando emulators:start:

firebase emulators:start

O comando emulators:start iniciará os emuladores do Cloud Functions, do Cloud Firestore, do Realtime Database e do Firebase Hosting com base nos produtos que você inicializou no projeto local usando firebase init. Para iniciar um emulador específico, use a flag --only:

firebase emulators:start --only functions

Para executar um conjunto de testes ou um script de teste após a inicialização dos emuladores, use o comando emulators:exec:

firebase emulators:exec "./my-test.sh"

Instruir o app para se comunicar com os emuladores

Para instruir seu app a interagir com os emuladores, pode ser necessário fazer outras configurações.

Instruir o app para funções chamáveis

Se as atividades de teste e protótipo envolverem funções de back-end chamáveis, configure a interação com o emulador de Cloud Functions for Firebase desta forma:

Kotlin+KTX
// 10.0.2.2 is the special IP address to connect to the 'localhost' of
// the host computer from an Android emulator.
val functions = Firebase.functions
functions.useEmulator("10.0.2.2", 5001)
Java
// 10.0.2.2 is the special IP address to connect to the 'localhost' of
// the host computer from an Android emulator.
FirebaseFunctions functions = FirebaseFunctions.getInstance();
functions.useEmulator("10.0.2.2", 5001);
Swift
Functions.functions().useFunctionsEmulator(origin: "http://127.0.0.1:5001")

Web

import { getApp } from "firebase/app";
import { getFunctions, connectFunctionsEmulator } from "firebase/functions";

const functions = getFunctions(getApp());
connectFunctionsEmulator(functions, "127.0.0.1", 5001);

Web

firebase.functions().useEmulator("127.0.0.1", 5001);

Instruir o app para emulação de funções HTTPS

Cada função HTTPS no seu código será disponibilizada pelo emulador local usando o seguinte formato de URL:

http://$HOST:$PORT/$PROJECT/$REGION/$NAME

Por exemplo, uma função helloWorld simples com a porta e a região de host padrão seria disponibilizada em:

https://localhost:5001/$PROJECT/us-central1/helloWorld

Instruir o app para emulação de funções da fila de tarefas

O emulador configura automaticamente as filas de tarefas emuladas com base nas definições do acionador, e o SDK Admin redireciona as solicitações enfileiradas para o emulador se detectar que ele está sendo executado pela variável de ambiente CLOUD_TASKS_EMULATOR_HOST.

O sistema de expedição usado na produção é mais complexo que o implementado no emulador, então não espere que emulados espelhem os ambientes de produção com precisão. Os parâmetros no emulador fornecem limites superiores para a taxa em que as tarefas são despachadas e fazem uma nova tentativa.

Instruir o app para emulação de funções acionadas em segundo plano

O emulador Cloud Functions oferece suporte às funções acionadas em segundo plano das seguintes origens:

  • Emulador de Realtime Database
  • Emulador de Cloud Firestore
  • Emulador de Authentication
  • Emulador de Pub/Sub
  • Emulador de alertas do Firebase

Para acionar eventos em segundo plano, modifique os recursos de back-end usando a IU do Emulator Suite UI. Também é possível conectar seu app ou código de teste aos emuladores usando o SDK da sua plataforma.

Testar manipuladores de eventos personalizados emitidos por Extensões

Em relação às funções implementadas para processar eventos personalizados do Firebase Extensions com o Cloud Functions v2, o emulador do Cloud Functions faz o pareamento com o emulador do Eventarc para oferecer suporte aos gatilhos do Eventarc.

Para testar os manipuladores de eventos personalizados das extensões que emitem eventos, instale os emuladores do Cloud Functions e do Eventarc.

O ambiente de execução Cloud Functions define a variável de ambiente EVENTARC_EMULATORpara localhost:9299 no processo atual se o emulador do Eventarc está em execução. Os Firebase Admin SDKs se conectam automaticamente ao emulador do Eventarc quando a variável de ambiente EVENTARC_EMULATOR está definida. Você pode modificar a porta padrão conforme discutido em Configurar Local Emulator Suite.

Se as variáveis de ambiente são configuradas corretamente, Firebase Admin SDK envia eventos automaticamente para o emulador do Eventarc. Por sua vez, o emulador de Eventarc faz um callback para o emulador de Cloud Functions para acionar quaisquer gerenciadores registrados.

Consulte os registros do Functions no Emulator Suite UI para ver detalhes sobre a execução do gerenciador.

Interações com outros serviços

O conjunto inclui vários emuladores, que permitem o teste de interações entre produtos.

Cloud Firestore

Se você tiver funções que usam o SDK Admin do Firebase para gravações no Cloud Firestore, essas gravações serão enviadas ao emulador do Cloud Firestore se ele estiver em execução. Se mais funções forem acionadas por essas gravações, elas serão executadas no emulador do Cloud Functions.

Cloud Storage

Se você tiver funções que usam o SDK Admin do Firebase (versão 9.7.0 ou mais recente) para gravações no Cloud Storage, essas gravações serão enviadas ao emulador do Cloud Storage se ele estiver em execução. Se mais funções forem acionadas por essas gravações, elas serão executadas no emulador do Cloud Functions.

Firebase Authentication

Se você tiver funções que usam o SDK Admin do Firebase (versão 9.3.0 ou mais recente) para gravações no Firebase Authentication, essas gravações serão enviadas ao emulador do Authentication se ele estiver em execução. Se mais funções forem acionadas por essas gravações, elas serão executadas no emulador do Cloud Functions.

Firebase Hosting

Se você usar o Cloud Functions para gerar conteúdo dinâmico para o Firebase Hosting, o firebase emulators:start vai usar suas funções HTTP locais como proxies para hospedagem.

Alertas do Firebase

Em qualquer projeto que inclua pelo menos um gatilho de alerta do Firebase compatível, a interface do emulador inclui uma guia FireAlerts. Para emular um gatilho de alerta:

  1. Abra a guia FireAlerts. Essa guia mostra um menu suspenso preenchido com os tipos de alerta com gatilhos associados. Por exemplo, se você tiver um gatilho onNewFatalIssuePublished, o crashlytics.newFatalIssue será exibido.
  2. Selecione um tipo de alerta. O formulário é preenchido automaticamente com valores padrão, que podem ser editados. É possível editar os campos do evento. Outras informações do evento de alerta são inferidas, são valores simulados ou são geradas aleatoriamente.
  3. Selecione Enviar alerta para enviar um alerta sintético ao emulador de funções, com geração de registros disponível em Alertas no console do Firebase e nos registros.

Logging

O emulador transmite registros de suas funções para a janela do terminal em que eles são executados. Ele exibe todos os resultados das instruções console.log(), console.info(), console.error() e console.warn() dentro das suas funções.

Próximas etapas

Para conferir um exemplo completo de uso do pacote de emuladores do Firebase, consulte a Amostra do guia de início rápido de testes.