Google is committed to advancing racial equity for Black communities. See how.
Diese Seite wurde von der Cloud Translation API übersetzt.
Switch to English

Verwalten von Funktionen für die Bereitstellung und Laufzeit von Funktionen

Sie können Funktionen mithilfe von Firebase CLI-Befehlen oder durch Festlegen von Laufzeitoptionen im Quellcode Ihrer Funktionen bereitstellen, löschen und ändern.

Funktionen bereitstellen

Führen Sie diesen Firebase-CLI-Befehl aus, um Funktionen bereitzustellen:

$ firebase deploy --only functions

Standardmäßig stellt die Firebase-CLI alle Funktionen in index.js gleichzeitig index.js . Wenn Ihr Projekt mehr als 5 Funktionen enthält, empfehlen wir, dass Sie das Flag --only mit bestimmten Funktionsnamen verwenden, um nur die von Ihnen bearbeiteten Funktionen --only . Das Bereitstellen bestimmter Funktionen auf diese Weise beschleunigt den Bereitstellungsprozess und hilft Ihnen, die Bereitstellung von Bereitstellungskontingenten zu vermeiden. Beispielsweise:

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

Wenn Sie eine große Anzahl von Funktionen bereitstellen, überschreiten Sie möglicherweise das Standardkontingent und erhalten HTTP 429- oder 500-Fehlermeldungen. Um dies zu lösen, stellen Sie Funktionen in Gruppen von 10 oder weniger bereit.

Die vollständige Liste der verfügbaren Befehle finden Sie in der Firebase-CLI-Referenz .

Standardmäßig sucht die Firebase-CLI im functions/ Ordner nach dem Quellcode. Sie können einen anderen Ordner angeben, indem Sie die folgenden Zeilen in firebase.json hinzufügen:

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

Funktionen löschen

Sie können zuvor bereitgestellte Funktionen folgendermaßen löschen:

  • explizit in der Firebase CLI mit functions:delete
  • explizite Verwendung des Kontextmenüs in der Funktionsliste in der Firebase-Konsole
  • implizit durch Entfernen der Funktion aus index.js vor der Bereitstellung.

Bei allen Löschvorgängen werden Sie aufgefordert, dies zu bestätigen, bevor Sie die Funktion aus der Produktion entfernen.

Das explizite Löschen von Funktionen in der Firebase-CLI unterstützt mehrere Argumente sowie Funktionsgruppen und ermöglicht die Angabe einer Funktion, die in einer bestimmten Region ausgeführt wird. Sie können auch die Bestätigungsaufforderung überschreiben.

# 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

Beim impliziten Löschen von Funktionen analysiert firebase deploy index.js und entfernt alle Funktionen, die aus der Datei entfernt wurden, aus der Produktion.

Ändern Sie den Namen, die Region oder den Trigger einer Funktion

Wenn Sie die Regionen umbenennen oder ändern oder Funktionen auslösen, die den Produktionsverkehr verarbeiten, befolgen Sie die Schritte in diesem Abschnitt, um zu vermeiden, dass Ereignisse während der Änderung verloren gehen. Bevor Sie diese Schritte ausführen , stellen Sie zunächst sicher, dass Ihre Funktion idempotent ist , da sowohl die neue als auch die alte Version Ihrer Funktion während der Änderung gleichzeitig ausgeführt werden.

Benennen Sie eine Funktion um

Um eine Funktion umzubenennen, erstellen Sie eine neue umbenannte Version der Funktion in index.js und führen Sie dann zwei separate Bereitstellungsbefehle aus. Der erste Befehl stellt die neu benannte Funktion bereit, und der zweite Befehl entfernt die zuvor bereitgestellte Version. Wenn Sie beispielsweise eine Funktion namens webhook , die Sie in webhookNew ändern webhookNew , überarbeiten Sie den Code wie folgt:

// 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");
});

Führen Sie dann die folgenden Befehle aus, um die neue Funktion bereitzustellen:

# 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

Ändern Sie die Region oder Regionen einer Funktion

Wenn Sie die angegebenen Regionen für eine Funktion ändern, die den Produktionsverkehr verarbeitet, können Sie Ereignisverluste verhindern, indem Sie die folgenden Schritte in der folgenden Reihenfolge ausführen:

  1. Benennen Sie die Funktion um und ändern Sie ihre Region oder Regionen wie gewünscht.
  2. Stellen Sie die umbenannte Funktion bereit, wodurch vorübergehend derselbe Code in beiden Regionssätzen ausgeführt wird.
  3. Löschen Sie die vorherige Funktion.

Wenn Sie beispielsweise eine Funktion namens webhook , die sich derzeit in der Standardfunktionsregion von us-central1 , und diese nach asia-northeast1 migrieren möchten, müssen Sie zuerst Ihren Quellcode ändern, um die Funktion umzubenennen und die Region zu überarbeiten .

// 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");
    });

Stellen Sie dann Folgendes bereit:

$ firebase deploy --only functions:webhookAsia

Jetzt werden zwei identische Funktionen ausgeführt: webhook wird in us-central1 und webhookAsia in asia-northeast1 .

Löschen Sie dann den webhook :

$ firebase functions:delete webhook

Jetzt gibt es nur noch eine Funktion - webhookAsia , das in asia-northeast1 .

Ändern Sie den Triggertyp einer Funktion

Während Sie Ihre Cloud-Funktionen für die Firebase-Bereitstellung im Laufe der Zeit entwickeln, müssen Sie möglicherweise den Auslösertyp einer Funktion aus verschiedenen Gründen ändern. Zum Beispiel möchten Sie vielleicht:

  • Wechsel von dem Legacy - Speicher onChange Ereignisse onFinalize , onDelete , onArchive und onMetadataUpdate . (Weitere Informationen hierzu finden Sie im Upgrade-Handbuch für Beta auf Version 1 oder Version 2 ).
  • Wechseln Sie von einem Typ eines Firebase-Echtzeitdatenbank- oder Cloud-Firestore-Ereignisses zu einem anderen, z. B. dem generischen onWrite Ereignis, zum granularen onCreate Ereignis.

Es ist nicht möglich, den Ereignistyp einer Funktion zu ändern, indem nur der Quellcode geändert und die firebase deploy . Um Fehler zu vermeiden, ändern Sie den Triggertyp einer Funktion folgendermaßen:

  1. Ändern Sie den Quellcode so, dass eine neue Funktion mit dem gewünschten Triggertyp hinzugefügt wird.
  2. Stellen Sie die Funktion bereit, wodurch vorübergehend sowohl die alten als auch die neuen Funktionen ausgeführt werden.
  3. Löschen Sie die alte Funktion mithilfe der Firebase-CLI explizit aus der Produktion.

Wenn Sie beispielsweise eine Funktion objectChanged mit dem onChange Ereignistyp onChange hatten und diese in onFinalize ändern onFinalize , benennen Sie die Funktion zuerst um und bearbeiten Sie sie mit dem Ereignistyp onFinalize .

// 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);
});

Führen Sie dann die folgenden Befehle aus, um zuerst die neue Funktion zu erstellen, bevor Sie die alte Funktion löschen:

# 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

Legen Sie die Laufzeitoptionen fest

Mit Cloud-Funktionen für Firebase können Sie Laufzeitoptionen wie die Laufzeitversion von Node.js sowie das Timeout und die Speicherzuweisung pro Funktion auswählen.

Legen Sie die Node.js-Version fest

Firebase SDK für Cloud-Funktionen 2.0.0 und höher ermöglicht die Auswahl der Laufzeit von Node.js. Sie können alle Funktionen in einem Projekt ausschließlich in der Laufzeitumgebung ausführen, die einer dieser unterstützten Node.js-Versionen entspricht:

  • Node.js 12 (Beta)
  • Node.js 10

  • Node.js 8 (veraltet ab 8. Juni 2020) Die Bereitstellung von Node.js 8-Funktionen ist nach dem 15. Februar 2020 nicht mehr zulässig. Die Ausführung bereits implementierter Node.js 8-Funktionen wird dann nach dem 15. März 2021 eingestellt Wenn Sie Funktionen für die Laufzeit von Node.js 8 bereitgestellt haben, wird empfohlen, ein Upgrade auf die Laufzeit von Node.js 10 durchzuführen .

So legen Sie die Node.js-Version fest:

Stellen Sie die Version in dem engines - Feld in der package.json - Datei , die in Ihrem erstellt wurde functions/ Verzeichnis während der Initialisierung. Um beispielsweise nur Version 10 zu verwenden, bearbeiten Sie diese Zeile in package.json :

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

Das engines ist erforderlich; Es muss eine der unterstützten Node.js-Versionen angeben, damit Sie Funktionen bereitstellen und ausführen können. Derzeit setzen die firebase init functions dieses Feld auf 10 .

Aktualisieren Sie die Laufzeit von Node.js.

So aktualisieren Sie die Laufzeit von Node.js:

  1. Stellen Sie sicher, dass Sie sich im Blaze- Abrechnungsplan befinden .
  2. Stellen Sie sicher, dass Sie Firebase CLI Version 8.1.0 oder höher verwenden.
  3. Ändern Sie den engines Wert in der package.json - Datei , die in Ihrem erstellt wurde functions/ Verzeichnis während der Initialisierung. Wenn Sie beispielsweise ein Upgrade von Version 8 auf Version 10 durchführen, sollte der Eintrag folgendermaßen aussehen: "engines": {"node": "10"}
  4. Testen Sie Ihre Änderungen optional mit dem Firebase-Emulator .
  5. Stellen Sie Funktionen mithilfe der Firebase CLI v8.1.0 oder höher erneut bereit.

Zeitlimit und Speicherzuordnung einstellen

In einigen Fällen stellen Ihre Funktionen möglicherweise besondere Anforderungen an einen langen Zeitüberschreitungswert oder eine große Speicherzuweisung. Sie können diese Werte entweder in der Google Cloud Console oder im Funktionsquellcode (nur Firebase) festlegen.

Verwenden Sie den im Firebase SDK für Cloud-Funktionen 2.0.0 eingeführten Parameter runWith , um die Speicherzuordnung und das Zeitlimit im Quellcode der Funktionen festzulegen. Diese Laufzeitoption akzeptiert ein JSON-Objekt, das der RuntimeOptions Schnittstelle timeoutSeconds und Werte für timeoutSeconds und memory . Diese Speicherfunktion verwendet beispielsweise 1 GB Speicher und tritt nach 300 Sekunden eine Zeitüberschreitung auf:

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
  });

Der Maximalwert für timeoutSeconds beträgt 540 oder 9 Minuten. Gültige Werte für den memory sind:

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

So legen Sie die Speicherzuordnung und das Zeitlimit in der Google Cloud Platform Console fest:

  1. Wählen Sie in der Google Cloud Platform Console im linken Menü die Option Cloud-Funktionen aus.
  2. Wählen Sie eine Funktion aus, indem Sie in der Funktionsliste auf ihren Namen klicken.
  3. Klicken Sie im oberen Menü auf das Symbol Bearbeiten .
  4. Wählen Sie eine Speicherzuordnung aus dem Dropdown-Menü mit der Bezeichnung Speicherzuweisung .
  5. Klicken Sie auf Mehr , um die erweiterten Optionen anzuzeigen, und geben Sie eine Anzahl von Sekunden in das Textfeld Timeout ein .
  6. Klicken Sie auf Speichern , um die Funktion zu aktualisieren.