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 Bereitstellungs- und Laufzeitoptionen

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. Zum Beispiel:

$ 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 in den 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
  • explizites Verwenden 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 es Ihnen, eine Funktion anzugeben, 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

Mit impliziter Funktion Löscht, firebase deploy parst index.js und entfernt von der Produktion aller Funktionen , die aus der Datei entfernt wurden.

Ä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 , die 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:

  • Wechseln Sie vom onChange Ereignis des Legacy-Speichers zu 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 er eine neue Funktion mit dem gewünschten Triggertyp enthält.
  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 so, dass sie den 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 14 (Beta)
  • Node.js 12
  • Node.js 10
  • Node.js 8 (veraltet am 8. Juni 2020) Die Bereitstellung von Funktionen für die Laufzeit von Node.js 8 wurde am 15. Dezember 2020 in der Firebase-CLI deaktiviert. Die Ausführung bereits bereitgestellter Funktionen wird zu einem späteren Zeitpunkt eingestellt. Wenn Sie Funktionen für die Laufzeit von Node.js 8 bereitgestellt haben, empfehlen wir Ihnen, ein Upgrade auf die Laufzeit von Node.js 12 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 12 zu verwenden, bearbeiten Sie diese Zeile in package.json :

  "engines": {"node": "12"}

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 12 .

Aktualisieren Sie die Laufzeit von Node.js.

So aktualisieren Sie die Laufzeit Ihrer Node.js:

  1. Stellen Sie sicher, dass Sie sich im Blaze- Abrechnungsplan befinden .
  2. Stellen Sie sicher, dass Sie Firebase CLI Version 8.6.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 10 auf Version 12 durchführen, sollte der Eintrag folgendermaßen aussehen: "engines": {"node": "12"}
  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 Funktionsquellcode runWith . 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
  • 4GB

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

  1. Wählen Sie in der Google Google Cloud Console im linken Menü 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.