Vous pouvez effectuer des tests locaux de votre application avant le déploiement de App Hosting à l'aide de l'émulateur App Hosting, qui fait partie de la suite d'émulateurs locaux Firebase.
Avant d'utiliser l'émulateur App Hosting, assurez-vous de comprendre le workflow global de Local Emulator Suite Firebase, et d'installer et configurer Local Emulator Suite et de consulter ses commandes CLI.
Cette rubrique suppose que vous connaissez déjà App Hosting. Si nécessaire, consultez l'introduction à App Hosting et d'autres ressources pour comprendre le fonctionnement de App Hosting.
Que puis-je faire avec l'émulateur App Hosting ?
L'émulateur App Hosting vous permet de tester et d'affiner vos applications Web en local. Cela peut simplifier votre processus de développement et améliorer la qualité des applications Web créées à l'aide de Firebase et déployées sur App Hosting.
L'émulateur App Hosting :
- Vous permet d'exécuter votre application Web en local, avec des variables d'environnement et des secrets définis dans les fichiers de configuration
apphosting.yaml
. - Vous pouvez remplacer les variables d'environnement et les secrets à utiliser dans l'émulateur avec le fichier
apphosting.emulator.yaml
. - Peut être utilisé avec d'autres émulateurs Firebase. Si vous utilisez Firestore, Auth ou un autre émulateur, Local Emulator Suite garantit que ces émulateurs sont démarrés avant l'émulateur App Hosting.
Configurer l'émulateur
Pour commencer, installez et initialisez Local Emulator Suite comme décrit dans Installer, configurer et intégrer la suite d'émulateurs locaux. En plus des autres émulateurs Firebase que vous souhaitez configurer, veillez à sélectionner App Hosting
Emulator
. La CLI vous invite à saisir certaines valeurs de l'émulateur App Hosting, y compris :
- Répertoire racine de votre application par rapport au projet. Cette information est importante si vous utilisez des monorepos avec App Hosting.
- Indique si vous souhaitez remplacer des valeurs pour le développement local.
- Si vous souhaitez accorder à vos coéquipiers l'accès aux secrets pour le développement local.
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.
Toutes les valeurs que vous fournissez dans ce flux de configuration sont utilisées pour mettre à jour la configuration de votre émulateur App Hosting dans firebase.json
. Vous pouvez également configurer l'émulateur App Hosting en mettant à jour directement firebase.json
. Le schéma de l'émulateur App Hosting est le suivant :
{
...
"emulators": {
"apphosting": {
"startCommand": <command> [optional]
"rootDirectory": <path> [optional]
}
}
}
startCommand
est généré et défini automatiquement lors de l'initialisation de l'émulateur. Si elle n'est pas fournie, l'émulateur détecte et exécute la commande de développement de votre gestionnaire de packages.rootDirectory
est utilisé pour prendre en charge les configurations de projet de monorepo. Si votre application Web se trouve dans un sous-répertoire, vous devez fournir le chemin d'accès à ce répertoire par rapport à la racine (l'emplacement defirebase.json
).
Gérer l'émulation
L'initialisation de l'émulateur crée un fichier apphosting.emulator.yaml
dans le répertoire racine de votre application. Ce fichier de configuration a le même schéma que le fichier apphosting.yaml
utilisé en production, mais il est strictement destiné au développement local. Par défaut, l'émulateur lit la configuration à partir de votre fichier apphosting.yaml
, mais si un fichier apphosting.emulator.yaml
est présent, les configurations de ce fichier sont prioritaires.
Le fichier apphosting.emulator.yaml
est conçu pour être commit et partagé avec des collègues en toute sécurité. Pour éviter de valider accidentellement des données sensibles dans les dépôts sources, toute variable d'environnement qui est un secret dans apphosting.yaml
doit également l'être dans apphosting.emulator.yaml
. Si un secret n'a pas besoin d'être modifié entre la production et le développement local (par exemple, une clé API Gemini), il n'est pas nécessaire de l'ajouter à apphosting.emulator.yaml
. Accordez plutôt à votre équipe l'accès au secret.
Si votre application utilise de nombreux secrets (par exemple, des clés API pour trois services différents, avec des valeurs différentes pour chaque environnement de production, de préproduction et de développement local), vous risquez de dépasser le niveau sans frais de Cloud Secret Manager et de payer 0,06 $par secret supplémentaire par mois. Si vous préférez gérer la configuration locale en dehors du contrôle de code source pour éviter ces frais, vous pouvez utiliser l'ancien fichier apphosting.local.yaml
. Contrairement à apphosting.emulator.yaml
, ce fichier est autorisé à fournir des valeurs en texte brut pour les variables d'environnement qui sont des valeurs secrètes dans apphosting.yaml
.
Accorder aux utilisateurs ou aux groupes l'accès aux secrets
Les secrets stockés dans apphosting.emulator.yaml
sont lus au démarrage de l'émulateur. Cela signifie que votre équipe de développement doit avoir accès au secret. Vous pouvez utiliser la commande apphosting:secrets:grantaccess
pour accorder l'accès à un secret à un utilisateur ou à un groupe par e-mail.
firebase apphosting:secrets:grantaccess test-api-key --emails my-team@my-company.com
Le cas échéant, envisagez d'utiliser des clés réservées aux tests dans apphosting.emulator.yaml
qui n'ont pas accès aux données de production, ne peuvent pas avoir d'effets secondaires globaux (envoi d'e-mails, débit de cartes de crédit) et/ou ont des quotas inférieurs. Cela permet de s'assurer que le code non examiné a moins de conséquences dans le monde réel.
Envisagez d'utiliser Google Groupes pour gérer l'accès aux secrets plutôt que d'accorder l'accès à des utilisateurs individuels. Cela simplifiera l'intégration de nouveaux membres à votre équipe de développement, car en les ajoutant au groupe, vous leur accorderez l'accès à tous les secrets dont ils ont besoin. Vous disposez peut-être déjà d'un groupe approprié où les développeurs communiquent entre eux. Le contrôle des accès par groupes Google permet également de s'assurer que les développeurs qui quittent votre équipe perdent l'accès à tous les secrets lorsqu'ils sont supprimés du groupe de messagerie. Si le secret a accès à des données de production ou à des effets secondaires réels, il peut quand même être approprié de faire tourner votre clé et de lui attribuer une nouvelle valeur avec firebase apphosting:secrets:set
.
Exécuter l'émulateur
firebase emulators:start
Cela démarrera tous les émulateurs définis dans votre fichier firebase.json
, y compris l'émulateur App Hosting.