Conecte seu aplicativo ao emulador do Cloud Functions

Antes de conectar seu aplicativo ao emulador do Cloud Functions, entenda o fluxo de trabalho geral do Firebase Local Emulator Suite e instale e configure o Local Emulator Suite e revise seus comandos CLI .

Escolha um projeto do Firebase

O Firebase Local Emulator Suite emula produtos para um único projeto do Firebase.

Para selecionar o projeto a ser usado, antes de iniciar os emuladores, na CLI, execute firebase use em seu diretório de trabalho. Ou você pode passar o sinalizador --project para cada comando do emulador.

O Local Emulator Suite oferece suporte à emulação de projetos reais do Firebase e projetos de demonstração .

Tipo de projeto Características Use com emuladores
Real

Um projeto real do Firebase é aquele que você criou e configurou (provavelmente por meio do console do Firebase).

Projetos reais têm recursos ativos, como instâncias de banco de dados, intervalos de armazenamento, funções ou qualquer outro recurso configurado para esse projeto do Firebase.

Ao trabalhar com projetos reais do Firebase, você pode executar emuladores para qualquer um ou todos os produtos compatíveis.

Para quaisquer produtos que você não esteja emulando, seus aplicativos e código interagirão com o recurso ativo (instância de banco de dados, depósito de armazenamento, função, etc.).

Demonstração

Um projeto de demonstração do Firebase não tem configuração real do Firebase nem recursos ativos. Esses projetos geralmente são acessados ​​por meio de codelabs ou outros tutoriais.

Os IDs de projeto para projetos de demonstração têm o prefixo demo- .

Ao trabalhar com projetos de demonstração do Firebase, seus aplicativos e códigos interagem apenas com emuladores . Se o seu aplicativo tentar interagir com um recurso para o qual um emulador não está em execução, esse código falhará.

Recomendamos que você use projetos de demonstração sempre que possível. Os benefícios incluem:

  • Configuração mais fácil, pois você pode executar os emuladores sem nunca criar um projeto Firebase
  • Maior segurança, pois se o seu código invocar acidentalmente recursos não emulados (de produção), não há chance de alteração de dados, utilização e cobrança
  • Melhor suporte offline, já que não há necessidade de acesso à internet para baixar a configuração do seu SDK.

Instrumente seu aplicativo para conversar com os emuladores

Instrumente seu aplicativo para funções que podem ser chamadas

Se o protótipo e as atividades de teste envolverem funções de back-end que podem ser chamadas , configure a interação com o emulador do Cloud Functions para 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);
Rápido
Functions.functions().useFunctionsEmulator(origin: "http://127.0.0.1:5001")

Web modular API

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

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

Web namespaced API

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

Instrumente seu aplicativo para emulação de funções HTTPS

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

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

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

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

Instrumente seu aplicativo para emulação de funções acionadas em segundo plano

O emulador do Cloud Functions oferece suporte a funções acionadas em segundo plano das seguintes fontes:

  • Emulador de banco de dados em tempo real
  • Emulador Cloud Firestore
  • Emulador de autenticação
  • Emulador Pub/Sub

Para acionar eventos em segundo plano, modifique os recursos de back-end usando a IU do Emulator Suite ou conectando seu aplicativo ou código de teste aos emuladores usando o SDK da sua plataforma.

Manipuladores de teste para eventos personalizados emitidos por extensões

Para funções que você implementa para lidar com eventos personalizados de extensões do Firebase com o Cloud Functions v2, o emulador do Cloud Functions é emparelhado com o emulador do Eventarc para oferecer suporte a gatilhos do Eventarc .

Para testar manipuladores de eventos personalizados para extensões que emitem eventos, você deve instalar os emuladores Cloud Functions e Eventarc.

O tempo de execução do Cloud Functions define a variável de ambiente EVENTARC_EMULATOR como localhost:9299 no processo atual se o emulador Eventarc estiver em execução. Os SDKs Admin do Firebase se conectam automaticamente ao emulador Eventarc quando a variável de ambiente EVENTARC_EMULATOR é definida. Você pode modificar a porta padrão conforme discutido em Configurar conjunto de emuladores locais .

Quando as variáveis ​​de ambiente são configuradas corretamente, o SDK Admin do Firebase envia eventos automaticamente para o emulador Eventarc. Por sua vez, o emulador Eventarc faz uma chamada de volta para o emulador Cloud Functions para acionar quaisquer manipuladores registrados.

Você pode verificar os logs do Functions na UI do Emulator Suite para obter detalhes sobre a execução do manipulador.

Configurar um ambiente de teste local

Se suas funções dependem de configuração de ambiente baseada em dotenv, você pode emular esse comportamento em seu ambiente de teste local.

Ao usar um emulador local do Cloud Functions, você pode substituir variáveis ​​de ambiente do seu projeto configurando um arquivo .env.local . O conteúdo de .env.local tem precedência sobre .env e o arquivo .env específico do projeto.

Por exemplo, um projeto poderia incluir estes três arquivos contendo valores ligeiramente diferentes para desenvolvimento e testes locais:

.env .env.dev .env.local
PLANETA=Terra

AUDIÊNCIA=Humanos

AUDIÊNCIA = Desenvolvedores Humanos AUDIÊNCIA=Humanos Locais

Quando iniciado no contexto local, o emulador carrega as variáveis ​​de ambiente conforme mostrado:

  $ firebase emulators:start
  i  emulators: Starting emulators: functions
  # Starts emulator with following environment variables:
  #  PLANET=Earth
  #  AUDIENCE=Local Humans

Segredos e credenciais no emulador do Cloud Functions

O emulador do Cloud Functions oferece suporte ao uso de segredos para armazenar e acessar informações confidenciais de configuração . Por padrão, o emulador tentará acessar seus segredos de produção usando credenciais padrão do aplicativo . Em determinadas situações, como ambientes de CI, o emulador pode falhar ao acessar valores secretos devido a restrições de permissão.

Semelhante ao suporte do emulador do Cloud Functions para variáveis ​​de ambiente, é possível substituir valores de segredos configurando um arquivo .secret.local . Isso facilita o teste de suas funções localmente, especialmente se você não tiver acesso ao valor secreto.

Quais outras ferramentas existem para testar o Cloud Functions?

O emulador do Cloud Functions é complementado por outros protótipos e ferramentas de teste:

  • O shell do Cloud Functions, que permite a prototipagem e o desenvolvimento de funções interativas e iterativas. O shell emprega o emulador Cloud Functions com uma interface estilo REPL para desenvolvimento. Nenhuma integração com os emuladores Cloud Firestore ou Realtime Database é fornecida. Usando o shell, você simula dados e executa chamadas de função para simular a interação com produtos que o Local Emulator Suite não oferece suporte atualmente: Analytics, Configuração remota e Crashlytics.
  • O SDK de teste do Firebase para Cloud Functions, um Node.js com estrutura mocha para desenvolvimento de funções. Na verdade, o SDK de teste do Cloud Functions fornece automação no shell do Cloud Functions.

Você pode encontrar mais sobre o shell do Cloud Functions e o SDK de teste do Cloud Functions em Testar funções interativamente e Teste de unidade do Cloud Functions .

Como o emulador do Cloud Functions difere da produção

O emulador do Cloud Functions está bastante próximo do ambiente de produção na maioria dos casos de uso. Trabalhamos muito para garantir que tudo dentro do tempo de execução do Node esteja o mais próximo possível da produção. No entanto, o emulador não imita o ambiente de produção em contêiner completo; portanto, embora seu código de função seja executado de forma realista, outros aspectos do seu ambiente (ou seja, arquivos locais, comportamento após falhas de funções, etc.) serão diferentes.

Nuvem IAM

O Firebase Emulator Suite não tenta replicar ou respeitar qualquer comportamento relacionado ao IAM para execução. Os emuladores aderem às regras de segurança do Firebase fornecidas, mas em situações em que o IAM normalmente seria usado, por exemplo, para definir o Cloud Functions que invoca a conta de serviço e, portanto, as permissões, o emulador não é configurável e usará a conta disponível globalmente na sua máquina de desenvolvedor. semelhante a executar um script local diretamente.

Restrições de memória e processador

O emulador não impõe restrições de memória ou processador para suas funções. No entanto, o emulador suporta funções de tempo limite por meio do argumento de tempo de execução timeoutSeconds .

Observe que o tempo de execução da função pode ser diferente do tempo de produção quando as funções são executadas no emulador. Recomendamos que, depois de projetar e testar funções com o emulador, você execute testes limitados na produção para confirmar os tempos de execução.

Planejando diferenças em ambientes locais e de produção

Como o emulador é executado em sua máquina local, ele depende de seu ambiente local para aplicativos, programas e utilitários integrados.

Esteja ciente de que seu ambiente local para desenvolvimento do Cloud Functions pode ser diferente do ambiente de produção do Google:

  • Os aplicativos que você instala localmente para simular o ambiente de produção (por exemplo, ImageMagick deste tutorial ) podem diferir em comportamento da produção, especialmente se você precisar de versões diferentes ou desenvolver em um ambiente não-Linux. Considere implantar sua própria cópia binária do programa ausente junto com a implantação de sua função.

  • Da mesma forma, utilitários integrados (por exemplo, comandos shell como ls , mkdir ) podem diferir das versões disponíveis em produção, especialmente se você estiver desenvolvendo em um ambiente não-Linux (por exemplo, macOS). Você pode lidar com esse problema usando alternativas somente de nó para comandos nativos ou criando binários do Linux para agrupar com sua implantação.

Tentando novamente

O emulador do Cloud Functions não é compatível com a repetição de funções em caso de falha.

Qual o proximo?