Sie können Funktionen mit Firebase-CLI-Befehlen bereitstellen, löschen und ändern oder Laufzeitoptionen im Quellcode Ihrer Funktionen festlegen.
Funktionen bereitstellen
Führen Sie zum Bereitstellen von Funktionen den folgenden Firebase-CLI-Befehl aus:
firebase deploy --only functions
Standardmäßig werden mit der Firebase-Befehlszeile alle Funktionen in Ihrer Quelle gleichzeitig bereitgestellt. Wenn Ihr Projekt mehr als fünf Funktionen enthält, empfehlen wir, das Flag --only mit bestimmten Funktionsnamen zu verwenden, um nur die Funktionen bereitzustellen, die Sie bearbeitet haben. Bestimmte Funktionen auf diese Weise bereitstellen: Dadurch wird der Bereitstellungsprozess beschleunigt und Sie vermeiden, dass Sie auf Bereitstellungskontingente stoßen. 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-Fehlermeldungen vom Typ 429 oder 500. Um dieses Problem zu beheben, stellen Sie Funktionen in Gruppen von höchstens 10 Funktionen bereit.
Eine vollständige Liste der verfügbaren Befehle finden Sie in der Firebase-Befehlszeilenreferenz.
Standardmäßig sucht die Firebase-Befehlszeile im Ordner functions/ nach dem Quellcode. Sie können Funktionen auch in Codebases oder mehreren Dateisätzen organisieren.
Funktionen löschen
So können Sie zuvor bereitgestellte Funktionen löschen:
- explizit in der Firebase CLI mit
functions:delete - explizit in der Google Cloud-Konsole.
- implizit, indem Sie die Funktion vor der Bereitstellung aus der Quelle entfernen.
Bei allen Löschvorgängen werden Sie aufgefordert, die Entfernung der Funktion aus der Produktion zu bestätigen.
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 den Bestätigungs-Prompt auch überschreiben.
Löscht alle Funktionen, die in allen Regionen dem angegebenen Namen entsprechen:
firebase functions:delete FUNCTION-1_NAME
Löscht eine angegebene Funktion, die in einer nicht standardmäßigen Region ausgeführt wird:
firebase functions:delete FUNCTION-1_NAME --region REGION_NAME
Mehr als eine Funktion löschen:
firebase functions:delete FUNCTION-1_NAME FUNCTION-2_NAME
Löscht eine angegebene Funktionsgruppe:
firebase functions:delete GROUP_NAME
Die Bestätigungsaufforderung wird umgangen:
firebase functions:delete FUNCTION-1_NAME --force
Beim impliziten Löschen von Funktionen parst firebase deploy Ihren Quellcode und entfernt alle Funktionen, die aus der Datei entfernt wurden, aus der Produktion.
Name, Region oder Trigger einer Funktion ändern
Wenn Sie Funktionen, die Produktionsdaten verarbeiten, umbenennen oder die Regionen oder Trigger für diese Funktionen ändern, folgen Sie der Anleitung in diesem Abschnitt, um zu vermeiden, dass Ereignisse während der Änderung verloren gehen. Bevor Sie diese Schritte ausführen, sollten Sie zuerst dafür sorgen, dass Ihre Funktion idempotent ist, da während der Änderung sowohl die neue als auch die alte Version Ihrer Funktion gleichzeitig ausgeführt werden.
Funktion umbenennen
Wenn Sie eine Funktion umbenennen möchten, erstellen Sie eine neue umbenannte Version der Funktion in Ihrer Quelle und führen Sie dann zwei separate Bereitstellungsbefehle aus. Mit dem ersten Befehl wird die neu benannte Funktion bereitgestellt und mit dem zweiten Befehl wird die zuvor bereitgestellte Version entfernt. Wenn Sie beispielsweise eine Node.js-Funktion mit dem Namen webhook in webhookNew ändern möchten, überarbeiten Sie den Code so:
// before
const functions = require('firebase-functions/v1');
exports.webhook = functions.https.onRequest((req, res) => {
res.send("Hello");
});
// after
const functions = require('firebase-functions/v1');
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
Region oder Regionen einer Funktion ändern
Wenn Sie die angegebenen Regionen für eine Funktion ändern, die Produktions-Traffic verarbeitet, können Sie Datenverlust verhindern, indem Sie diese Schritte in der folgenden Reihenfolge ausführen:
- Benennen Sie die Funktion um und ändern Sie die Region oder Regionen nach Bedarf.
- Stellen Sie die umbenannte Funktion bereit. Dadurch wird derselbe Code vorübergehend in beiden Regionen ausgeführt.
- Löschen Sie die vorherige Funktion.
Wenn Sie beispielsweise eine Funktion namens webhook haben, die derzeit in us-central1 bereitgestellt wird, und Sie sie zu asia-northeast1 migrieren möchten, müssen Sie zuerst den Quellcode ändern, um die Funktion umzubenennen und die Region zu überarbeiten.
// before
const functions = require('firebase-functions/v1');
exports.webhook = functions
.https.onRequest((req, res) => {
res.send("Hello");
});
// after
const functions = require('firebase-functions/v1');
exports.webhookAsia = functions
.region('asia-northeast1')
.https.onRequest((req, res) => {
res.send("Hello");
});
Stellen Sie die Funktion dann mit folgendem Befehl bereit:
firebase deploy --only functions:webhookAsia
Jetzt werden zwei identische Funktionen ausgeführt: webhook wird in us-central1 und webhookAsia in asia-northeast1 ausgeführt.
Löschen Sie dann webhook:
firebase functions:delete webhook
Jetzt gibt es nur noch eine Funktion: webhookAsia, die in asia-northeast1 ausgeführt wird.
Triggertyp einer Funktion ändern
Cloud Functions for FirebaseIm Laufe der Zeit kann es aus verschiedenen Gründen erforderlich sein, den Triggertyp einer Funktion zu ändern. Sie möchten beispielsweise von einem Firebase Realtime Database- oder Cloud Firestore-Ereignistyp zu einem anderen wechseln.
Der Ereignistyp einer Funktion kann nicht geändert werden, indem Sie nur den Quellcode ändern und firebase deploy ausführen. So ändern Sie den Auslösertyp einer Funktion, um Fehler zu vermeiden:
- Ändern Sie den Quellcode, um eine neue Funktion mit dem gewünschten Triggertyp einzufügen.
- Stellen Sie die Funktion bereit. Dadurch werden vorübergehend sowohl die alte als auch die neue Funktion ausgeführt.
- Löschen Sie die alte Funktion explizit aus der Produktion mit der Firebase-CLI.
Wenn Sie beispielsweise eine Node.js-Funktion mit dem Namen objectChanged und dem alten Ereignistyp onChange haben und sie in onFinalize ändern möchten, benennen Sie die Funktion zuerst um und bearbeiten Sie sie dann so, dass sie den Ereignistyp onFinalize hat.
// before
const functions = require('firebase-functions/v1');
exports.objectChanged = functions.storage.object().onChange((object) => {
return console.log('File name is: ', object.name);
});
// after
const functions = require('firebase-functions/v1');
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
Laufzeitoptionen festlegen
Mit Cloud Functions for Firebase können Sie Laufzeitoptionen wie die Node.js-Laufzeitversion und das Zeitlimit pro Funktion, die Arbeitsspeicherzuweisung sowie die Mindest- und Höchstanzahl von Funktionsinstanzen auswählen.
Als Best Practice sollten diese Optionen (mit Ausnahme der Node.js-Version) in einem Konfigurationsobjekt im Funktionscode festgelegt werden. Dieses RuntimeOptions-Objekt ist die Quelle der Wahrheit für die Laufzeitoptionen Ihrer Funktion und überschreibt Optionen, die mit einer anderen Methode festgelegt wurden (z. B. über die Google Cloud-Konsole oder gcloud CLI).
Wenn Sie in Ihrem Entwicklungs-Workflow Laufzeitoptionen manuell über die Google Cloud-Konsole oder gcloud CLI festlegen und nicht möchten, dass diese Werte bei jeder Bereitstellung überschrieben werden, legen Sie die Option preserveExternalChanges auf true fest. Wenn diese Option auf true festgelegt ist, werden die in Ihrem Code festgelegten Laufzeitoptionen von Firebase mit den Einstellungen der aktuell bereitgestellten Version Ihrer Funktion zusammengeführt. Dabei gilt die folgende Priorität:
- Die Option ist im Funktionscode festgelegt: Externe Änderungen werden überschrieben.
- Die Option ist im Funktionscode auf
RESET_VALUEfestgelegt: Externe Änderungen werden mit dem Standardwert überschrieben. - Die Option ist nicht im Funktionscode, aber in der aktuell bereitgestellten Funktion festgelegt: Verwenden Sie die in der bereitgestellten Funktion angegebene Option.
Die Verwendung der Option preserveExternalChanges: true wird für die meisten Szenarien nicht empfohlen, da Ihr Code dann nicht mehr die vollständige Quelle der Wahrheit für Laufzeitoptionen für Ihre Funktionen ist. Wenn Sie sie verwenden, prüfen Sie die Google Cloud-Konsole oder verwenden Sie gcloud CLI, um die vollständige Konfiguration einer Funktion aufzurufen.
Node.js-Version festlegen
Mit dem Firebase SDK für Cloud Functions kann eine Node.js-Laufzeit ausgewählt werden. Sie können festlegen, dass alle Funktionen in einem Projekt ausschließlich in der Laufzeitumgebung ausgeführt werden, die einer dieser unterstützten Node.js-Versionen entspricht:
- Node.js 22
- Node.js 20
- Node.js 18 (eingestellt)
Wichtige Informationen zum laufenden Support für diese Node.js-Versionen finden Sie im Supportzeitplan.
So legen Sie die Node.js-Version fest:
Sie können die Version im Feld engines in der Datei package.json festlegen, die während der Initialisierung in Ihrem Verzeichnis functions/ erstellt wurde.
Wenn Sie beispielsweise nur Version 20 verwenden möchten, bearbeiten Sie diese Zeile in package.json:
"engines": {"node": "22"}
Wenn Sie den Yarn-Paketmanager verwenden oder andere spezifische Anforderungen für das Feld engines haben, können Sie die Laufzeit für das Firebase SDK für Cloud Functions stattdessen in firebase.json festlegen:
{
"functions": {
"runtime": "nodejs22"
}
}
In der Befehlszeile wird der in firebase.json festgelegte Wert gegenüber allen Werten oder Bereichen verwendet, die Sie separat in package.json festlegen.
Node.js-Laufzeit aktualisieren
So führen Sie ein Upgrade Ihrer Node.js-Laufzeit durch:
- Ihr Projekt muss das Blaze-Preismodell haben.
- Sie benötigen die Firebase CLI-Version 11.18.0 oder höher.
- Ändern Sie den Wert
enginesin der Dateipackage.json, die während der Initialisierung in Ihrem Verzeichnisfunctions/erstellt wurde. Wenn Sie beispielsweise ein Upgrade von Version 16 auf Version 18 durchführen, sollte der Eintrag so aussehen:"engines": {"node": "18"} - Optional können Sie Ihre Änderungen mit dem Firebase Local Emulator Suite testen.
- Stellen Sie alle Funktionen noch einmal bereit.
Node.js-Modulsystem auswählen
Das Standardmodulsystem in Node.js ist CommonJS (CJS), aber aktuelle Node.js-Versionen unterstützen auch ECMAScript-Module (ESM). Cloud Functions unterstützt beide.
Standardmäßig verwenden Ihre Funktionen CommonJS. Das bedeutet, dass Importe und Exporte so aussehen:
const functions = require("firebase-functions/v1");
exports.helloWorld = functions.https.onRequest(async (req, res) => res.send("Hello from Firebase!"));
Wenn Sie stattdessen ESM verwenden möchten, legen Sie das Feld "type": "module" in Ihrer package.json-Datei fest:
{
...
"type": "module",
...
}
Nachdem Sie dies festgelegt haben, verwenden Sie die ESM-Syntax import und export:
import functions from "firebase-functions/v1";
export const helloWorld = functions.https.onRequest(async (req, res) => res.send("Hello from Firebase!"));
Beide Modulsysteme werden vollständig unterstützt. Sie können die Option auswählen, die am besten zu Ihrem Projekt passt. Weitere Informationen in der Node.js-Dokumentation zu Modulen
Skalierungsverhalten steuern
Standardmäßig skaliert Cloud Functions for Firebase die Anzahl der ausgeführten Instanzen basierend auf der Anzahl der eingehenden Anfragen. Bei geringem Traffic kann die Anzahl der Instanzen auf null herunterskaliert werden. Wenn Ihre App jedoch eine geringere Latenz erfordert und Sie die Anzahl von Kaltstarts begrenzen möchten, können Sie dieses Standardverhalten ändern. Dazu geben Sie eine Mindestanzahl von Containerinstanzen an, die einsatzbereit sind und Anfragen bedienen können.
Ebenso können Sie eine maximale Anzahl festlegen, um die Skalierung von Instanzen als Reaktion auf eingehende Anfragen zu begrenzen. Verwenden Sie diese Einstellung, um Ihre Kosten zu kontrollieren oder die Anzahl der Verbindungen zu einem Sicherungsdienst zu begrenzen, z. B. zu einer Datenbank.
Anzahl der Kaltstarts reduzieren
Verwenden Sie die Methode runWith, um die Mindestanzahl von Instanzen für eine Funktion im Quellcode festzulegen. Diese Methode akzeptiert ein JSON-Objekt, das dem Interface RuntimeOptions entspricht und den Wert für minInstances definiert. Mit dieser Funktion werden beispielsweise mindestens fünf Instanzen festgelegt, die warm gehalten werden:
exports.getAutocompleteResponse = functions
.runWith({
// Keep 5 instances warm for this latency-critical function
minInstances: 5,
})
.https.onCall((data, context) => {
// Autocomplete a user's search term
});
Hier sind einige Punkte, die Sie beim Festlegen eines Werts für minInstances berücksichtigen sollten:
- Wenn Cloud Functions for Firebase Ihre App über Ihre
minInstances-Einstellung hinaus skaliert, kommt es bei jeder Instanz über diesem Grenzwert zu einem Kaltstart. - Kaltstarts wirken sich am stärksten auf Apps mit unregelmäßigem Traffic aus. Wenn Ihre App unregelmäßigen Traffic hat und Sie einen
minInstances-Wert festlegen, der hoch genug ist, um Kaltstarts bei jedem Traffic-Anstieg zu reduzieren, wird die Latenz deutlich verringert. Bei Apps mit konstantem Traffic wirken sich Kaltstarts wahrscheinlich nicht stark auf die Leistung aus. Das Festlegen einer Mindestanzahl von Instanzen kann für Produktionsumgebungen sinnvoll sein, sollte aber in Testumgebungen in der Regel vermieden werden. Wenn Sie Ihr Testprojekt auf null skalieren, aber trotzdem Cold Starts in Ihrem Produktionsprojekt reduzieren möchten, können Sie
minInstancesbasierend auf der UmgebungsvariableFIREBASE_CONFIGfestlegen:// Get Firebase project id from `FIREBASE_CONFIG` environment variable const envProjectId = JSON.parse(process.env.FIREBASE_CONFIG).projectId; exports.renderProfilePage = functions .runWith({ // Keep 5 instances warm for this latency-critical function // in production only. Default to 0 for test projects. minInstances: envProjectId === "my-production-project" ? 5 : 0, }) .https.onRequest((req, res) => { // render some html });
Maximale Anzahl von Instanzen für eine Funktion begrenzen
Wenn Sie die maximale Anzahl von Instanzen im Funktionsquellcode festlegen möchten, verwenden Sie die Methode runWith. Diese Methode akzeptiert ein JSON-Objekt, das der RuntimeOptions-Schnittstelle entspricht, in der Werte für maxInstances definiert sind. Mit dieser Funktion wird beispielsweise ein Limit von 100 Instanzen festgelegt, um eine hypothetische Legacy-Datenbank nicht zu überlasten:
exports.mirrorOrdersToLegacyDatabase = functions
.runWith({
// Legacy database only supports 100 simultaneous connections
maxInstances: 100,
})
.firestore.document("orders/{orderId}")
.onWrite((change, context) => {
// Connect to legacy database
});
Wenn eine HTTP-Funktion auf das maxInstances-Limit skaliert wird, werden neue Anfragen 30 Sekunden lang in die Warteschlange gestellt und dann mit dem Antwortcode 429 Too Many Requests abgelehnt, wenn bis dahin keine Instanz verfügbar ist.
Weitere Informationen zu Best Practices für die Verwendung von Einstellungen für maximale Instanzen finden Sie
in diesen
Best Practices für die Verwendung von maxInstances.
Dienstkonto festlegen
Das Standarddienstkonto für Funktionen der 1. Generation, PROJECT_ID@
Möglicherweise möchten Sie das Standarddienstkonto überschreiben und eine Funktion auf die genau benötigten Ressourcen beschränken. Dazu können Sie ein benutzerdefiniertes Dienstkonto erstellen und es der entsprechenden Funktion mit der Methode .runWith() zuweisen.
Diese Methode verwendet ein Objekt mit Konfigurationsoptionen, einschließlich der Eigenschaft serviceAccount.
const functions = require("firebase-functions/v1");
exports.helloWorld = functions
.runWith({
// This function doesn't access other Firebase project resources, so it uses a limited service account.
serviceAccount:
"my-limited-access-sa@", // or prefer the full form: "my-limited-access-sa@my-project.iam.gserviceaccount.com"
})
.https.onRequest((request, response) => {
response.send("Hello from Firebase!");
});
Zeitlimit und Arbeitsspeicherzuweisung festlegen
In einigen Fällen gelten für Ihre Funktionen möglicherweise spezielle Anforderungen an einen langen Timeout-Wert oder eine große Speicherzuweisung. Sie können diese Werte entweder in der Google Cloud Console oder im Funktionsquellcode (nur Firebase) festlegen.
Um die Arbeitsspeicherzuweisung und das Zeitlimit im Quellcode von Funktionen festzulegen, verwenden Sie den Parameter runWith, der im Firebase SDK für Cloud Functions 2.0.0 eingeführt wurde. Diese Laufzeitoption akzeptiert ein JSON-Objekt, das der Schnittstelle RuntimeOptions entspricht und Werte für timeoutSeconds und memory definiert.
Diese Speicherfunktion verwendet beispielsweise 1 GB Arbeitsspeicher und es tritt nach 300 Sekunden ein Zeitüberschreitungsfehler auf:
exports.convertLargeFile = functions
.runWith({
// Ensure the function has enough memory and time
// to process large files
timeoutSeconds: 300,
memory: "1GB",
})
.storage.object()
.onFinalize((object) => {
// Do some complicated things that take a lot of memory and time
});
Der Höchstwert für timeoutSeconds ist 540 oder 9 Minuten.
Die Größe des Arbeitsspeichers, der einer Funktion zugewiesen wird, entspricht der für die Funktion zugewiesenen CPU, wie in dieser Liste der gültigen Werte für memory beschrieben:
128MB– 200 MHz256MB– 400 MHz512MB– 800 MHz1GB– 1,4 GHz2GB– 2,4 GHz4GB– 4,8 GHz8GB– 4,8 GHz
So legen Sie die Arbeitsspeicherzuweisung und das Zeitlimit in der Google Cloud-Konsole fest:
- Wählen Sie in der Google Cloud-Konsole im Menü auf der linken Seite Cloud Functions aus.
- Wählen Sie eine Funktion aus, indem Sie in der Funktionsliste auf ihren Namen klicken.
- Klicken Sie im Menü oben auf das Symbol Bearbeiten.
- Wählen Sie im Drop-down-Menü mit der Bezeichnung Zugewiesener Arbeitsspeicher eine Arbeitsspeicherzuweisung aus.
- Klicken Sie auf Mehr, um die erweiterten Optionen aufzurufen, und geben Sie im Textfeld Zeitlimit eine Anzahl von Sekunden ein.
- Klicken Sie auf Speichern, um die Funktion zu aktualisieren.