Confira tudo que foi anunciado no Firebase Summit e veja como usar o Firebase para acelerar o desenvolvimento de apps e executar os aplicativos com confiança. Saiba mais

Conecte seu aplicativo ao emulador do Cloud Functions

Mantenha tudo organizado com as coleções Salve e categorize o conteúdo com base nas suas preferências.

Antes de conectar seu aplicativo ao emulador do Cloud Functions, entenda o fluxo de trabalho geral do Firebase Local Emulator Suite , instale e configure o Local Emulator Suite e revise os comandos da 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 Usar 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, buckets de armazenamento, funções ou qualquer outro recurso que você configurou 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 qualquer produto que você não esteja emulando, seus aplicativos e código irão interagir com o recurso ativo (instância de banco de dados, bucket 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 ​​via codelabs ou outros tutoriais.

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ódigo interagem apenas com emuladores . Se 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 do Firebase
  • Segurança mais forte, pois se o seu código invocar acidentalmente recursos não emulados (produção), não há chance de alteração de dados, uso e cobrança
  • Melhor suporte offline, pois não há necessidade de acessar a internet para baixar sua configuração do SDK.

Instrumente seu aplicativo para conversar com os emuladores

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

Se suas atividades de protótipo e teste envolvem funções de back -end que podem ser chamadas , configure a interação com o emulador do Cloud Functions para Firebase desta forma:

Android
// 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://localhost:5001")

Web version 9

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

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

Web version 8

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

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

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

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

Por exemplo, uma simples função 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 é compatível com funções acionadas em segundo plano das seguintes origens:

  • Emulador de banco de dados em tempo real
  • Emulador do Cloud Firestore
  • Emulador de autenticação
  • Emulador de 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 para sua plataforma.

Manipuladores de teste para eventos personalizados emitidos por extensões

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

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

O ambiente 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 Configure Local Emulator Suite .

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 ao emulador do Cloud Functions para acionar quaisquer manipuladores registrados.

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

Configurar um ambiente de teste local

Se suas funções dependem da 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 modificar as 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 pode incluir esses três arquivos contendo valores ligeiramente diferentes para desenvolvimento e teste local:

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

PÚBLICO=Humanos

AUDIENCE=Dev Humans AUDIENCE=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 é compatível com o uso de segredos para armazenar e acessar informações de configuração confidenciais . Por padrão, o emulador tentará acessar seus segredos de produção usando as 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, você pode modificar valores de secrets 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 para testar o Cloud Functions existem?

O emulador do Cloud Functions é complementado por outras ferramentas de protótipo e teste:

  • O shell do Cloud Functions, que permite prototipagem e desenvolvimento de funções interativas e iterativas. O shell emprega o emulador do Cloud Functions com uma interface no 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 no momento: 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 do Cloud Functions Test fornece automação sobre o shell do Cloud Functions.

Você pode saber mais sobre o shell do Cloud Functions e o SDK do Cloud Functions Test em Test functions interativamente e Unit testing of 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 para a maioria dos casos de uso. Trabalhamos muito para garantir que tudo no tempo de execução do Node seja 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 de seu ambiente (ou seja, arquivos locais, comportamento após falhas de funções etc.) serão diferentes.

Cloud IAM

O Firebase Emulator Suite não tenta replicar ou respeitar nenhum comportamento relacionado ao IAM para execução. Os emuladores seguem as 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 invocando a conta de serviço e, portanto, as permissões, o emulador não é configurável e usará a conta disponível globalmente na máquina do 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 oferece suporte a 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 diferir da 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 em produção para confirmar os tempos de execução.

Planejamento para 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 e 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 da função.

  • Da mesma forma, utilitários integrados (por exemplo, comandos de 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 Node para comandos nativos ou criando binários do Linux para empacotar 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?