Google s'est engagé à promouvoir l'équité raciale pour les communautés noires. Regarde comment.
Cette page a été traduite par l'API Cloud Translation.
Switch to English

Gérer le déploiement des fonctions et les options d'exécution

Vous pouvez déployer, supprimer et modifier des fonctions à l'aide des commandes CLI Firebase ou en définissant des options d'exécution dans le code source de vos fonctions.

Déployer des fonctions

Pour déployer des fonctions, exécutez cette commande Firebase CLI:

 $ firebase deploy --only functions
 

Si vous rencontrez des erreurs d'autorisations lors du déploiement de fonctions, assurez-vous que les rôles IAM appropriés sont attribués à l'utilisateur exécutant les commandes de déploiement.

Par défaut, l'interface de ligne de commande Firebase déploie toutes les fonctions dans index.js en même temps. Si votre projet contient plus de 5 fonctions, nous vous recommandons d'utiliser l'indicateur --only avec des noms de fonction spécifiques pour déployer uniquement les fonctions que vous avez modifiées. Le déploiement de fonctions spécifiques de cette manière accélère le processus de déploiement et vous évite de vous heurter aux quotas de déploiement. Par exemple:

 $ firebase deploy --only functions:addMessage,functions:makeUppercase
 

Lors du déploiement d'un grand nombre de fonctions, vous pouvez dépasser le quota standard et recevoir des messages d'erreur HTTP 429 ou 500. Pour résoudre ce problème, déployez les fonctions par groupes de 10 ou moins, ou demandez une augmentation de quota pour les demandes d'écriture toutes les 100 secondes par quota d' utilisateur .

Consultez la référence de la CLI Firebase pour obtenir la liste complète des commandes disponibles.

Par défaut, la CLI Firebase recherche dans le dossier functions/ le code source. Vous pouvez spécifier un autre dossier en ajoutant les lignes suivantes dans firebase.json :

 "functions": {
  "source": "another-folder"
}
 

Supprimer des fonctions

Vous pouvez supprimer les fonctions précédemment déployées de ces manières:

  • explicitement dans la CLI Firebase avec des functions:delete
  • en utilisant explicitement le menu contextuel dans la liste des fonctions de la console Firebase
  • implicitement en supprimant la fonction d' index.js avant le déploiement.

Toutes les opérations de suppression vous invitent à confirmer avant de retirer la fonction de la production.

La suppression explicite de fonctions dans la Firebase CLI prend en charge plusieurs arguments ainsi que des groupes de fonctions et vous permet de spécifier une fonction exécutée dans une région particulière. Vous pouvez également ignorer l'invite de confirmation.

 # Delete all functions that match the specified name in all regions.
$ firebase functions:delete myFunction

# Delete a specified function running in a specific region.
$ firebase functions:delete myFunction --region us-east-1

# Delete more than one function
$ firebase functions:delete myFunction myOtherFunction

# Delete a specified functions group.
$ firebase functions:delete groupA

# Bypass the confirmation prompt.
$ firebase functions:delete myFunction --force
 

Avec la suppression de fonction implicite, firebase deploy analyse index.js et supprime de la production toutes les fonctions qui ont été supprimées du fichier.

Modifier le nom, la région ou le déclencheur d'une fonction

Si vous renommez ou modifiez les régions ou le déclencheur des fonctions qui gèrent le trafic de production, suivez les étapes de cette section pour éviter de perdre des événements lors de la modification. Avant de suivre ces étapes, assurez-vous d'abord que votre fonction est idempotente , car la nouvelle version et l'ancienne version de votre fonction seront exécutées en même temps pendant le changement.

Renommer une fonction

Pour renommer une fonction, créez une nouvelle version renommée de la fonction dans index.js , puis exécutez deux commandes de déploiement distinctes. La première commande déploie la fonction nouvellement nommée et la deuxième commande supprime la version précédemment déployée. Par exemple, si vous avez une fonction appelée webhook que vous souhaitez changer en webhookNew , webhookNew le code comme suit:

 // before
const functions = require('firebase-functions');

exports.webhook = functions.https.onRequest((req, res) => {
    res.send("Hello");
});

// after
const functions = require('firebase-functions');

exports.webhookNew = functions.https.onRequest((req, res) => {
    res.send("Hello");
});
 

Exécutez ensuite les commandes suivantes pour déployer la nouvelle fonction:

 # Deploy new function called webhookNew
$ firebase deploy --only functions:webhookNew

# Wait until deployment is done; now both webhookNew and webhook are running

# Delete webhook
$ firebase functions:delete webhook
 

Modifier la ou les régions d'une fonction

Si vous modifiez les régions spécifiées pour une fonction qui gère le trafic de production, vous pouvez éviter la perte d'événements en exécutant ces étapes dans l'ordre:

  1. Renommez la fonction et modifiez sa ou ses régions selon vos besoins.
  2. Déployez la fonction renommée, ce qui entraîne l'exécution temporaire du même code dans les deux ensembles de régions.
  3. Supprimez la fonction précédente.

Par exemple, si vous avez une fonction appelée webhook qui se trouve actuellement dans la région des fonctions par défaut de us-central1 et que vous souhaitez la migrer vers asia-northeast1 , vous devez d'abord modifier votre code source pour renommer la fonction et réviser la région .

 // before
const functions = require('firebase-functions');

exports.webhook = functions
    .https.onRequest((req, res) => {
            res.send("Hello");
    });

// after
const functions = require('firebase-functions');

exports.webhookAsia = functions
    .region('asia-northeast1')
    .https.onRequest((req, res) => {
            res.send("Hello");
    });

 

Puis déployez en exécutant:

 $ firebase deploy --only functions:webhookAsia
 

À présent, deux fonctions identiques sont en cours d'exécution: webhook s'exécute dans us-central1 et webhookAsia s'exécute dans asia-northeast1 webhookAsia .

Ensuite, supprimez le webhook :

 $ firebase functions:delete webhook
 

Maintenant, il n'y a qu'une seule fonction - webhookAsia , qui s'exécute dans asia-northeast1 webhookAsia .

Modifier le type de déclencheur d'une fonction

Au fur et à mesure que vous développez vos Cloud Functions pour le déploiement de Firebase au fil du temps, vous devrez peut-être modifier le type de déclencheur d'une fonction pour diverses raisons. Par exemple, vous souhaiterez peut-être:

  • Changement du stockage existants onChange événement onFinalize , onDelete , onArchive et onMetadataUpdate . (Apprenez-en plus à ce sujet dans le guide de mise à niveau de la version bêta à v1 ou v2 ).
  • Passer d'un type d'événement Firebase Realtime Database ou Cloud Firestore à un autre, tel que l'événement onWrite générique à l'événement onCreate granulaire.

Il n'est pas possible de modifier le type d'événement d'une fonction en modifiant simplement le code source et en exécutant le firebase deploy . Pour éviter les erreurs, modifiez le type de déclencheur d'une fonction par cette procédure:

  1. Modifiez le code source pour inclure une nouvelle fonction avec le type de déclencheur souhaité.
  2. Déployez la fonction, ce qui entraîne l'exécution temporaire des anciennes et des nouvelles fonctions.
  3. Supprimez explicitement l'ancienne fonction de la production à l'aide de la CLI Firebase.

Par exemple, si vous aviez une fonction objectChanged qui a l'héritage onChange type d'événement, et que vous souhaitez changer pour onFinalize , d' abord renommer la fonction et de le modifier pour avoir le onFinalize type d'événement.

 // before
const functions = require('firebase-functions');

exports.objectChanged = functions.storage.object().onChange((object) => {
    return console.log('File name is: ', object.name);
});

// after
const functions = require('firebase-functions');

exports.objectFinalized = functions.storage.object().onFinalize((object) => {
    return console.log('File name is: ', object.name);
});
 

Exécutez ensuite les commandes suivantes pour créer d'abord la nouvelle fonction, avant de supprimer l'ancienne fonction:

 # Create new function objectFinalized
$ firebase deploy --only functions:objectFinalized

# Wait until deployment is done; now both objectChanged and objectFinalized are running

# Delete objectChanged
$ firebase functions:delete objectChanged
 

Définir les options d'exécution

Cloud Functions for Firebase vous permet de sélectionner des options d'exécution telles que la version d'exécution de Node.js, le délai d'expiration par fonction et l'allocation de mémoire.

Définir la version de Node.js

Le SDK Firebase pour Cloud Functions 2.0.0 et supérieur permet une sélection de l'environnement d'exécution Node.js. Vous pouvez choisir d'exécuter toutes les fonctions d'un projet exclusivement sur l'environnement d'exécution correspondant à l'une de ces versions Node.js prises en charge:

  • Node.js 12 (bêta)
  • Node.js 10

  • Node.js 8 (obsolète à compter du 8 juin 2020) Le déploiement des fonctions Node.js 8 ne sera plus autorisé après le 15 février 2020. Ensuite, les exécutions des fonctions Node.js 8 déjà déployées cesseront après le 15 mars 2021 Si vous avez déployé des fonctions sur l'environnement d'exécution Node.js 8, il est recommandé de procéder à une mise à niveau vers l'environnement d'exécution Node.js 10 .

Pour définir la version Node.js:

Définissez la version dans le champ engines du fichier package.json qui a été créé dans votre répertoire functions/ lors de l'initialisation. Par exemple, pour n'utiliser que la version 10, modifiez cette ligne dans package.json :

   "engines": {"node": "10"}
 

Le champ engines est obligatoire; il doit spécifier l'une des versions Node.js prises en charge pour que vous puissiez déployer et exécuter des fonctions. Actuellement, les firebase init functions définissent ce champ sur 10 .

Mettez à niveau votre environnement d'exécution Node.js

Pour mettre à niveau votre environnement d'exécution Node.js:

  1. Assurez-vous que vous êtes sur le plan de facturation Blaze par répartition.
  2. Assurez-vous que vous utilisez Firebase CLI version 8.1.0 ou ultérieure.
  3. Modifiez la valeur des engines dans le fichier package.json qui a été créé dans votre répertoire functions/ lors de l'initialisation. Par exemple, si vous passez de la version 8 à la version 10, l'entrée doit ressembler à ceci: "engines": {"node": "10"}
  4. Vous pouvez également tester vos modifications à l'aide de l' émulateur Firebase .
  5. Redéployez les fonctions à l'aide de Firebase CLI v8.1.0 ou version ultérieure.

Définir le délai d'expiration et l'allocation de mémoire

Dans certains cas, vos fonctions peuvent avoir des exigences spéciales pour une valeur de délai d'attente longue ou une allocation importante de mémoire. Vous pouvez définir ces valeurs dans Google Cloud Console ou dans le code source de la fonction (Firebase uniquement).

Pour définir l'allocation de mémoire et le délai d'expiration dans le code source des fonctions, utilisez le paramètre runWith introduit dans le SDK Firebase pour Cloud Functions 2.0.0. Cette option d'exécution accepte un objet JSON conforme à l'interface RuntimeOptions , qui définit des valeurs pour timeoutSeconds et la memory . Par exemple, cette fonction de stockage utilise 1 Go de mémoire et expire après 300 secondes:

 const runtimeOpts = {
  timeoutSeconds: 300,
  memory: '1GB'
}

exports.myStorageFunction = functions
  .runWith(runtimeOpts)
  .storage
  .object()
  .onFinalize((object) = > {
    // do some complicated things that take a lot of memory and time
  });
 

La valeur maximale de timeoutSeconds est de 540 ou 9 minutes. Les valeurs valides pour la memory sont:

  • 128MB
  • 256MB
  • 512MB
  • 1GB
  • 2GB

Pour définir l'allocation de mémoire et le délai d'expiration dans la console Google Cloud Platform:

  1. Dans la console Google Cloud Platform, sélectionnez Cloud Functions dans le menu de gauche.
  2. Sélectionnez une fonction en cliquant sur son nom dans la liste des fonctions.
  3. Cliquez sur l'icône Modifier dans le menu supérieur.
  4. Sélectionnez une allocation de mémoire dans le menu déroulant intitulé Mémoire allouée .
  5. Cliquez sur Plus pour afficher les options avancées et entrez un nombre de secondes dans la zone de texte Délai d'expiration .
  6. Cliquez sur Enregistrer pour mettre à jour la fonction.