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:

  1. 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.
  2. 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 nur false nach null oder undefined 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 oder npm-shrinkwrap.json haben.
  • Wenn Abhängigkeiten in der Paketsperre nicht mit denen in package.json übereinstimmen, wird npm ci mit einem Fehler beendet, anstatt die Paketsperre zu aktualisieren.
  • Wenn bereits ein node_modules vorhanden ist, wird es automatisch entfernt, bevor npm 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:

  1. Ändern Sie die Funktionssignatur von (event, callback) in (data, context, callback).

  2. Ändern Sie die Verweise auf event.data und event.context in data 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.