É possível realizar testes locais do app antes da implantação do App Hosting usando o emulador App Hosting, que faz parte do Pacote de emuladores locais do Firebase.
Antes de usar o emulador App Hosting, entenda o fluxo de trabalho geral do Local Emulator Suite do Firebase e instale e configure o Local Emulator Suite e revise os comandos da CLI.
Neste tópico, pressupomos que você já conhece o App Hosting. Se necessário, leia a introdução ao App Hosting e outros materiais para entender como o App Hosting funciona.
O que posso fazer com o emulador de App Hosting?
O emulador App Hosting permite testar e refinar seus aplicativos da Web localmente. Isso pode simplificar seu processo de desenvolvimento e melhorar a qualidade dos apps da Web criados com o Firebase e implantados no App Hosting.
O emulador App Hosting:
- Permite executar o app da Web localmente, com variáveis de ambiente e segredos
definidos em arquivos de configuração
apphosting.yaml. - Pode substituir variáveis de ambiente e secrets para uso no emulador com o
arquivo
apphosting.emulator.yaml. - Pode ser usado com outros emuladores do Firebase. Se você estiver usando o Firestore, o Auth ou qualquer outro emulador, o Local Emulator Suite garante que esses emuladores sejam iniciados antes do emulador App Hosting.
Configurar o emulador
Para começar, instale e inicialize o Local Emulator Suite conforme descrito
em Instalar, configurar e integrar o Pacote de emuladores
locais. Além de outros
emuladores do Firebase que você quer configurar, selecione App Hosting
Emulator. A CLI solicita alguns valores do emulador App Hosting,
incluindo:
- O diretório raiz do app em relação ao projeto. Isso é importante se você estiver usando monorepos com App Hosting.
- Se você quer substituir valores para o desenvolvimento local.
- Se você quer conceder acesso a segredos para desenvolvimento local aos membros da equipe.
firebase init emulators
=== Emulators Setup
? Which Firebase emulators do you want to set up? Press Space to select emulators, then Enter to confirm your choices. (Press
<space> to select, <a> to toggle all, <i> to invert selection, and <enter> to proceed)
❯◯ App Hosting Emulator
◯ Firestore Emulator
◯ Database Emulator
◯ Hosting Emulator
◯ Pub/Sub Emulator
◯ Storage Emulator
◯ Eventarc Emulator
(Move up and down to reveal more choices)
? Specify your app's root directory relative to your project (./)
? The App Hosting emulator uses a file called apphosting.emulator.yaml to
override values in apphosting.yaml for local testing. This codebase does not
have one, would you like to create it? (Y/n)
? Which environment variables would you like to override? (Press <space> to
select, <a> to toggle all, <i> to invert selection, and <enter> to proceed)
❯◯ MEMCACHE_ADDR
◯ API_KEY
? What new value would you like for plaintext MEMCACHE_ADDR?
? What would you like to name the secret reference for API_KEY? (test-api-key)
? What new value would you like for secret TESTKEY [input is hidden]? [input is hidden]
? Your config has secret values. Please provide a comma-separated list of users
or groups who should have access to secrets for local development:
✔ Successfully set IAM bindings on secret test-api-key.
Todos os valores fornecidos neste fluxo de configuração são usados para atualizar a
configuração do emulador App Hosting em firebase.json. Também é possível
configurar o emulador do App Hosting atualizando firebase.json diretamente. O
esquema do emulador do App Hosting é:
{
...
"emulators": {
"apphosting": {
"startCommand": <command> [optional]
"rootDirectory": <path> [optional]
}
}
}
- O
startCommandé gerado e definido automaticamente quando o emulador é inicializado. Se não for fornecido, o emulador vai detectar e executar o comando de desenvolvimento do gerenciador de pacotes. rootDirectoryé usado para oferecer suporte a configurações de projetos monorepo. Se o app da Web estiver em um subdiretório, você precisará fornecer o caminho desse diretório relativo à raiz (o local defirebase.json).
Gerenciar emulação
A inicialização do emulador cria um arquivo apphosting.emulator.yaml no diretório
raiz do app. Esse arquivo de configuração tem o mesmo esquema do arquivo
apphosting.yaml usado na
produção, mas é destinado exclusivamente ao desenvolvimento local. Por padrão, o
emulador lê a configuração do arquivo apphosting.yaml, mas se um
arquivo apphosting.emulator.yaml estiver presente, as configurações nesse arquivo serão
priorizadas e terão precedência.
O arquivo apphosting.emulator.yaml foi criado para ser seguro para confirmação e compartilhamento
com colegas. Para garantir que você não cometa um erro e armazene dados sensíveis em
repositórios de origem, qualquer variável de ambiente que seja um segredo em
apphosting.yaml também precisa ser um segredo em apphosting.emulator.yaml. Se um
secret não precisar mudar entre a produção e o desenvolvimento local (por exemplo, uma
chave de API Gemini), ele não precisará ser adicionado a apphosting.emulator.yaml.
Em vez disso, conceda à sua equipe acesso ao secret.
Se o aplicativo usar muitos segredos (por exemplo, chaves de API para três serviços
diferentes, com valores diferentes para cada um de produção, ambiente de
estágio e desenvolvimento local), você poderá exceder o nível sem custo financeiro do Cloud Secret Manager e pagar US$ 0,06 por
segredo adicional por mês. Se você preferir gerenciar a configuração local
fora do controle de origem para evitar essa taxa, use o arquivo
apphosting.local.yaml legado. Ao contrário do apphosting.emulator.yaml, esse arquivo pode
fornecer valores em texto simples para variáveis de ambiente que são valores
secretos em apphosting.yaml.
Conceder acesso a segredos a usuários ou grupos
Os segredos armazenados em apphosting.emulator.yaml são lidos quando o emulador é iniciado. Isso significa que a equipe de desenvolvimento precisa ter acesso ao segredo. É possível
usar o comando apphosting:secrets:grantaccess para conceder acesso a um segredo a
um usuário ou grupo por e-mail.
firebase apphosting:secrets:grantaccess test-api-key --emails my-team@my-company.com
Quando aplicável, use chaves somente para teste em apphosting.emulator.yaml
que não tenham acesso a dados de produção, não possam ter efeitos colaterais globais
(envio de e-mails, cobrança de cartões de crédito) e/ou tenham cotas mais baixas. Isso ajuda
a garantir que o código não revisado tenha menos consequências no mundo real.
Considere usar os Grupos do Google para gerenciar o acesso a secrets em vez de conceder
acesso a usuários individuais. Isso simplifica a integração de novos membros à sua
equipe de desenvolvedores, porque a adição deles ao grupo concede acesso a todos
os segredos necessários. Talvez você já tenha um grupo adequado em que os desenvolvedores
se comunicam. O controle de acesso pelos Grupos do Google também ajuda
a garantir que os desenvolvedores que saem da equipe percam o acesso a todos os segredos quando
são removidos do grupo de e-mails. Se o segredo tiver acesso a dados de produção
ou efeitos colaterais reais, ainda será apropriado girar a chave e
dar um novo valor a ela com firebase apphosting:secrets:set.
Executar o emulador
firebase emulators:start
Isso vai iniciar todos os emuladores definidos no arquivo firebase.json, incluindo
o emulador App Hosting.