Esegui la migrazione di Cloud Functions ai runtime Node.js più recenti
Questo documento descrive le differenze tra le versioni di runtime Node.js per aiutarti a eseguire la migrazione del tuo codice Cloud Functions.
Migrazione a un runtime più recente
Per eseguire la migrazione a un runtime più recente:
- Leggi informazioni sul runtime di destinazione in questo documento per comprendere le differenze che introduce e apportare eventuali modifiche necessarie al codice. In particolare, fai attenzione alle modifiche alle variabili di ambiente introdotte nel runtime Node.js 10.
Esegui il deployment della funzione, specificando il runtime Node.js di destinazione:
gcloud functions deploy FUNCTION_NAME --runtime NODE_RUNTIME...
Differenze nel runtime Node.js 14
Node.js 14 introduce alcuni nuovi concetti e funzionalità. Punti salienti:
- Concatenamento facoltativo.
Il concatenamento facoltativo ha il seguente aspetto:
{"hello": null}?.hello?.neat
. Consente l'accesso sicuro alle chiavi profonde su oggetti che potrebbero non esistere. - Coalescenza nullo. In questo modo
introduce
??
, che è più sicuro rispetto all'utilizzo di||
per l'assegnazione (poiché valuta solofalse
pernull
oundefined
).
Puoi scoprire di più sulle funzionalità di Node.js 14 qui.
Differenze nel runtime Node.js 12
Node.js 12 utilizza npm ci
, che esegue sempre lo script prepare
in package.json
.
Le principali differenze tra l'uso di npm install
e npm ci
sono:
- Il progetto deve avere un elemento
package-lock.json
onpm-shrinkwrap.json
esistente. - Se le dipendenze nel blocco pacchetto non corrispondono a quelle in
package.json
,npm ci
uscirà con un errore, anziché aggiornare il blocco del pacchetto. - Se è già presente un elemento
node_modules
, verrà rimosso automaticamente prima chenpm ci
inizi la sua installazione.
Per eseguire l'upgrade da Node.js 10 a Node.js 12, sposta le dipendenze utilizzate in
prepare
da devDependencies
a dependencies
.
Per Node.js 12 e versioni successive, le funzioni con limiti di memoria superiori a 2 GiB richiedono agli utenti di configurare NODE_OPTIONS
in modo che abbia max_old_space_size
. Ad esempio:
gcloud functions deploy envVarMemory \
--runtime nodejs20 \
--set-env-vars NODE_OPTIONS="--max_old_space_size=8192" \
--memory 8Gi \
--trigger-http
Differenze nel runtime Node.js 10
Il runtime Node.js 10 ha introdotto modifiche che potrebbero richiedere la modifica del codice sorgente della funzione per utilizzare i runtime più recenti.
Per la maggior parte delle applicazioni, l'upgrade dal nodo 8 al nodo 10 non prevede modifiche al codice (la differenza principale sono le modifiche alle variabili di ambiente su GCF).
Node 10 introduce una serie di nuove ed entusiasmanti funzionalità, come iteratori asincroni e un'API file basata sulle promesse, oltre a miglioramenti delle prestazioni e patch di sicurezza.
Logging
Se non hai utilizzato JSON.stringify
durante il logging di oggetti e/o raccolte in Node.js 8, potresti notare un aumento dei volumi di log in seguito all'upgrade a Node.js 10. Ciò potrebbe comportare costi aggiuntivi. Ti consigliamo di utilizzare
JSON.stringify
per raggruppare le istruzioni di log, come mostrato in
Scrittura, visualizzazione e risposta ai log.
Modifiche alle variabili di ambiente
Il runtime Node.js 10 ha introdotto modifiche alle variabili di ambiente predefinite dal runtime. Consulta Variabili di ambiente impostate automaticamente per una descrizione completa delle differenze tra le variabili di ambiente impostate dal runtime Node.js 10 e i runtime precedenti.
Per eseguire le funzioni Node.js precedenti nel runtime Node.js 10 (e versioni successive), potrebbe essere necessario apportare modifiche a tutte le variabili di ambiente predefinite che stai utilizzando. Aggiorna il codice per utilizzare le variabili di sostituzione, ove possibile, oppure impostale autonomamente quando esegui il deployment della funzione. Come best practice, ti consigliamo di non fare affidamento su variabili di ambiente che non hai impostato esplicitamente.
Le seguenti variabili di ambiente non sono più impostate dal runtime Node.js 10:
Variabile di ambiente | Migrazione |
---|---|
CODE_LOCATION |
Impostala durante il deployment della funzione. La posizione del codice è /srv . |
ENTRY_POINT |
Utilizza invece la variabile di ambiente FUNCTION_TARGET . |
GOOGLE_CLOUD_PROJECT |
Impostala durante il deployment della funzione. |
GCP_PROJECT |
Impostala durante il deployment della funzione. |
GCLOUD_PROJECT |
Impostala durante il deployment della funzione. |
GOOGLE_CLOUD_REGION |
Impostala durante il deployment della funzione. |
FUNCTION_REGION |
Impostala durante il deployment della funzione. |
FUNCTION_NAME |
Utilizza invece la variabile di ambiente K_SERVICE . |
FUNCTION_IDENTITY |
Impostala durante il deployment della funzione. |
FUNCTION_MEMORY_MB |
Impostala durante il deployment della funzione. |
FUNCTION_TIMEOUT_SEC |
Impostala durante il deployment della funzione. |
FUNCTION_TRIGGER_TYPE |
Utilizza invece la variabile di ambiente FUNCTION_SIGNATURE_TYPE . Per i dettagli di utilizzo, consulta Utilizzo delle variabili di ambiente.
|
OLDPWD |
Non più disponibili |
SHLVL |
Non più disponibili |
Differenze nel runtime Node.js 8
La firma per le funzioni in background è cambiata tra i runtime Node.js 6 e Node.js 8, passando a Node.js 10.
Un esempio di funzione in background Node.js 6 potrebbe avere il seguente aspetto:
exports.nodejs6BackgroundFunction = (event, callback) => {
let data = event.data;
let context = event.context;
// ... the rest of your function
};
Tieni presente che l'argomento event
contiene le proprietà data
e context
.
Nel runtime Node.js 10, le proprietà data
e context
sono state estratte dall'oggetto event
e ora sono incluse nella firma della funzione:
exports.nodejs8AndAboveBackgroundFunction = (data, context, callback) => {
// ... the rest of your function is unchanged
};
Questa modifica semplifica i riferimenti agli oggetti data
e context
precedentemente contenuti nell'argomento event
. Per ulteriori informazioni, consulta Parametri della funzione in background.
Se utilizzi la firma della funzione in background di Node.js 6, apporta le seguenti modifiche per eseguire la funzione in un runtime Node.js più recente:
Modifica la firma della funzione da
(event, callback)
a(data, context, callback)
.Modifica i riferimenti in
event.data
eevent.context
indata
econtext
, rispettivamente.
Deprecazioni: Node.js 6 e Node.js 8
I runtime Node.js 6 e Node.js 8 sono stati deprecati. Per assicurarti che le funzioni utilizzino una versione supportata di Node.js, eseguine la migrazione a Node.js 10 o versioni successive.
Dopo il 05/08/2020, i deployment delle funzioni che utilizzano Node.js 6 verranno bloccati. Le funzioni Cloud Functions che continueranno a utilizzare Node.js 6 dopo questo periodo di tempo potrebbero essere disabilitate.