Cloud Functions-Funktionen zu neueren Node.js-Laufzeiten migrieren
In diesem Dokument werden die Unterschiede zwischen den Node.js-Laufzeitversionen beschrieben, um Sie bei der Migration Ihres Cloud Functions-Codes zu unterstützen.
Zu einer neueren Laufzeit migrieren
So migrieren Sie zu einer neueren Laufzeit:
- Informieren Sie sich über die Ziellaufzeit in diesem Dokument, um die Unterschiede zu verstehen und notwendige Änderungen an Ihrem Code vorzunehmen. Achten Sie insbesondere auf die Änderungen an Umgebungsvariablen, die in der Node.js 10-Laufzeit eingeführt wurden.
Stellen Sie die Funktion bereit, indem Sie die Node.js-Ziellaufzeit angeben:
gcloud functions deploy FUNCTION_NAME --runtime NODE_RUNTIME...
Unterschiede in der Node.js 14-Laufzeit
Mit Node.js 14 werden einige neue Funktionen und Konzepte eingeführt. Highlights:
- Optionale Verkettung.
Optionale Verkettung sieht so aus:
{"hello": null}?.hello?.neat
. Sie ermöglicht sicheren Zugriff auf Deep Keys für Objekte, die möglicherweise nicht vorhanden sind. - Nullish-Coalescing-Funktion. Dadurch wird
??
eingeführt, was sicherer ist als die Verwendung von||
für die Zuweisung, da die Funktion nurfalse
nachnull
oderundefined
auswertet.
Weitere Informationen zu Node.js 14-Funktionen finden Sie hier.
Unterschiede in der Node.js 12-Laufzeit
Node.js 12 verwendet npm ci
, das immer das Skript prepare
in package.json
ausführt.
Die Hauptunterschiede zwischen npm install
und npm ci
sind folgende:
- Das Projekt muss eine
package-lock.json
odernpm-shrinkwrap.json
haben. - Wenn Abhängigkeiten in der Paketsperre nicht mit denen in
package.json
übereinstimmen, wirdnpm ci
mit einem Fehler beendet, anstatt die Paketsperre zu aktualisieren. - Wenn bereits ein
node_modules
vorhanden ist, wird es automatisch entfernt, bevornpm ci
mit der Installation beginnt.
Zum Upgrade von Node.js 10 auf Node.js 12 verschieben Sie die in prepare
verwendeten Abhängigkeiten von devDependencies
nach dependencies
.
Bei Node.js 12 und höher müssen Nutzer mit Speicherlimits über 2 GiB NODE_OPTIONS
für max_old_space_size
konfigurieren. Beispiel:
gcloud functions deploy envVarMemory \
--runtime nodejs20 \
--set-env-vars NODE_OPTIONS="--max_old_space_size=8192" \
--memory 8Gi \
--trigger-http
Unterschiede in der Node.js 10-Laufzeit
Bei der Node.js 10-Laufzeit wurden Änderungen eingeführt, die möglicherweise eine Änderung des Quellcodes der Funktion Ihrerseits voraussetzen, damit die neueren Laufzeiten verwendet werden können.
Bei den meisten Anwendungen beinhaltet das Upgrade von Node.js 8 auf Node.js 10 keine Änderungen beim Code. Der Hauptunterschied besteht in Änderungen an den Umgebungsvariablen in GCF.
Node.js 10 bietet eine Vielzahl interessanter neuer Funktionen wie asynchrone Iteratoren und eine Promise-basierte Files API sowie Leistungsverbesserungen und Sicherheitspatches.
Logging
Wenn Sie beim Logging von Objekten und/oder Sammlungen in Node.js 8 JSON.stringify
nicht verwendet haben, erhalten Sie nach dem Upgrade auf Node.js 10 möglicherweise ein höheres Logvolumen. Dies kann zusätzliche Kosten verursachen. Wir empfehlen die Verwendung von JSON.stringify
, um Logberichte zu gruppieren, wie unter Logs schreiben, aufrufen und darauf reagieren beschrieben.
Änderungen der Umgebungsvariablen
Die Node.js 10-Laufzeit führte Änderungen an den Umgebungsvariablen ein, die von der Laufzeit vordefiniert werden. Eine vollständige Beschreibung der Unterschiede zwischen den Umgebungsvariablen, die von der Node.js 10-Laufzeit im Vergleich zu früheren Laufzeiten festgelegt werden, finden Sie unter Automatisch festgelegte Umgebungsvariablen.
Damit ältere Node.js-Funktionen in der Node.js 10-Laufzeit ausgeführt werden können, müssen Sie unter Umständen Änderungen an den von Ihnen verwendeten vordefinierten Umgebungsvariablen vornehmen. Aktualisieren Sie Ihren Code so, dass nach Möglichkeit die Ersatzvariablen verwendet werden, oder legen Sie sie selbst fest, wenn Sie die Funktion bereitstellen. Sie sollten sich nicht auf Umgebungsvariablen verlassen, die Sie nicht explizit festgelegt haben.
Folgende Umgebungsvariablen werden nicht mehr durch die Node.js 10-Laufzeit festgelegt:
Umgebungsvariable | Migration |
---|---|
CODE_LOCATION |
Legen Sie sie beim Bereitstellen der Funktion fest. Der Speicherort des Codes ist /srv . |
ENTRY_POINT |
Verwenden Sie stattdessen die Umgebungsvariable FUNCTION_TARGET . |
GOOGLE_CLOUD_PROJECT |
Legen Sie sie beim Bereitstellen der Funktion fest. |
GCP_PROJECT |
Legen Sie sie beim Bereitstellen der Funktion fest. |
GCLOUD_PROJECT |
Legen Sie sie beim Bereitstellen der Funktion fest. |
GOOGLE_CLOUD_REGION |
Legen Sie sie beim Bereitstellen der Funktion fest. |
FUNCTION_REGION |
Legen Sie sie beim Bereitstellen der Funktion fest. |
FUNCTION_NAME |
Verwenden Sie stattdessen die Umgebungsvariable K_SERVICE . |
FUNCTION_IDENTITY |
Legen Sie sie beim Bereitstellen der Funktion fest. |
FUNCTION_MEMORY_MB |
Legen Sie sie beim Bereitstellen der Funktion fest. |
FUNCTION_TIMEOUT_SEC |
Legen Sie sie beim Bereitstellen der Funktion fest. |
FUNCTION_TRIGGER_TYPE |
Verwenden Sie stattdessen die Umgebungsvariable FUNCTION_SIGNATURE_TYPE . Informationen zur Verwendung finden Sie unter Umgebungsvariablen verwenden.
|
OLDPWD |
Diese ist nicht mehr verfügbar. |
SHLVL |
Diese ist nicht mehr verfügbar. |
Unterschiede in der Node.js 8-Laufzeit
Die Signatur für Hintergrundfunktionen wurde zwischen den Laufzeiten Node.js 6 und Node.js 8 geändert. Dies wird in Node.js 10 fortgesetzt.
Eine Node.js 6-Hintergrundfunktion kann beispielsweise so aussehen:
exports.nodejs6BackgroundFunction = (event, callback) => {
let data = event.data;
let context = event.context;
// ... the rest of your function
};
Beachten Sie, dass das Argument event
die Attribute data
und context
enthält.
In der Node.js 10-Laufzeit wurden die Attribute data
und context
aus dem Objekt event
extrahiert und sind nun Teil der Funktionssignatur:
exports.nodejs8AndAboveBackgroundFunction = (data, context, callback) => {
// ... the rest of your function is unchanged
};
Diese Änderung vereinfacht Verweise auf die Objekte data
und context
, die zuvor im Argument event
enthalten waren. Weitere Informationen finden Sie unter Hintergrundfunktionsparameter.
Wenn Sie die Node.js 6-Hintergrundfunktionssignatur verwenden, nehmen Sie die folgenden Änderungen vor, um die Funktion in einer neueren Node.js-Laufzeit auszuführen:
Ändern Sie die Funktionssignatur von
(event, callback)
in(data, context, callback)
.Ändern Sie die Verweise auf
event.data
undevent.context
indata
bzw.context
.
Einstellung: Node.js 6 und Node.js 8
Die Laufzeiten Node.js 6 und Node.js 8 sind veraltet. Damit Ihre Funktionen eine unterstützte Version von Node.js verwenden, migrieren Sie sie zu Node.js 10 oder höher.
Nach dem 05.08.2020 werden Funktionsbereitstellungen, die Node.js 6 verwenden, blockiert. Cloud Functions-Funktionen, die Node.js 6 nach diesem Datum weiterhin nutzen, werden dann möglicherweise deaktiviert.