Como migrar o Cloud Functions para ambientes de execução mais recentes do Node.js
Neste documento, descrevemos as diferenças entre as versões do ambiente de execução do Node.js para ajudar você a migrar o código do Cloud Functions.
Como migrar para um ambiente de execução mais recente
Para migrar para um ambiente de execução mais recente:
- Leia sobre seu ambiente de execução de destino neste documento para entender as diferenças que ele apresenta e faça as alterações necessárias no seu código. Especificamente, esteja ciente das alterações de variável de ambiente introduzidas no ambiente de execução do Node.js 10.
Implante sua função, especificando o ambiente de execução Node.js de destino:
gcloud functions deploy FUNCTION_NAME --runtime NODE_RUNTIME...
Diferenças no ambiente de execução do Node.js 14
O Node.js 14 apresenta alguns novos recursos e conceitos. Veja os destaques:
- O Encadeamento opcional
tem a seguinte aparência:
{"hello": null}?.hello?.neat
. Ele permite o acesso seguro a chaves profundas em objetos que podem não existir. - A combinação de valores nulos introduz
??
, que é mais seguro do que usar||
para atribuições, já elas avaliamnull
ouundefined
apenas comofalse
.
Saiba mais sobre os recursos do Node.js 14.
Diferenças no ambiente de execução do Node.js 12
O Node.js 12 usa npm ci
, que sempre executa o script prepare
em
package.json
.
As principais diferenças entre usar npm install
e npm ci
são:
- O projeto precisa ter um
package-lock.json
ounpm-shrinkwrap.json
existente. - Se as dependências no bloqueio de pacote não corresponderem às que em
package.json
,npm ci
sairá com um erro em vez de atualizar o bloqueio de pacote. - Se um
node_modules
já estiver presente, ele será removido automaticamente antes denpm ci
iniciar a instalação.
Para fazer upgrade do Node.js 10 para o Node.js 12, mova as dependências usadas em
prepare
de devDependencies
para dependencies
.
Para o Node.js 12 e versões posteriores, funções com limites de memória maiores que 2GiB exigem que os usuários configurem NODE_OPTIONS
para ter max_old_space_size
. Exemplo:
gcloud functions deploy envVarMemory \
--runtime nodejs20 \
--set-env-vars NODE_OPTIONS="--max_old_space_size=8192" \
--memory 8Gi \
--trigger-http
Diferenças no ambiente de execução do Node.js 10
O ambiente de execução do Node.js 10 introduziu alterações que podem exigir que você modifique o código-fonte da função para usar os ambientes de execução mais recentes.
Para a maioria dos aplicativos, fazer upgrade do Node 8 para o Node 10 não envolverá alterações de código (a principal diferença são as alterações nas variáveis de ambiente no GCF).
O Node 10 introduz uma variedade de novos recursos interessantes, como iteradores assíncronos e uma API de arquivos baseada em promessas, além de melhorias de desempenho e patches de segurança.
Logging
Se você não usou JSON.stringify
ao registrar objetos e/ou coleções no
Node.js 8, é possível ver aumentos no volume de registros ao fazer upgrade
para o Node.js 10. Isso pode resultar em custos adicionais. Recomendamos o uso de
JSON.stringify
para agrupar instruções de registro, como mostrado em
Como gravar, ver e responder a registros.
Alterações nas variáveis de ambiente
O ambiente de execução do Node.js 10 introduziu alterações nas variáveis de ambiente predefinidas pelo ambiente de execução. Consulte Variáveis de ambiente definidas automaticamente para uma descrição completa das diferenças entre as variáveis de ambiente definidas pelo Node.js 10 e pelos ambientes de execução anteriores.
Para executar as funções mais antigas do Node.js no ambiente de execução do Node.js 10 e versões posteriores, talvez seja necessário fazer alterações em quaisquer variáveis de ambiente predefinidas que estejam em uso. Atualize o código para usar as variáveis de substituição sempre que possível ou defina-as ao implantar a função. Como prática recomendada, indicamos que você não use variáveis de ambiente que não foram definidas explicitamente.
As variáveis de ambiente a seguir não são mais configuradas pelo ambiente de execução do Node.js 10:
Variável de ambiente | Migração |
---|---|
CODE_LOCATION |
Defina-a ao implantar a função. A localização do código é /srv . |
ENTRY_POINT |
Em vez dela, use a variável de ambiente FUNCTION_TARGET . |
GOOGLE_CLOUD_PROJECT |
Defina-a ao implantar a função. |
GCP_PROJECT |
Defina-a ao implantar a função. |
GCLOUD_PROJECT |
Defina-a ao implantar a função. |
GOOGLE_CLOUD_REGION |
Defina-a ao implantar a função. |
FUNCTION_REGION |
Defina-a ao implantar a função. |
FUNCTION_NAME |
Em vez dela, use a variável de ambiente K_SERVICE . |
FUNCTION_IDENTITY |
Defina-a ao implantar a função. |
FUNCTION_MEMORY_MB |
Defina-a ao implantar a função. |
FUNCTION_TIMEOUT_SEC |
Defina-a ao implantar a função. |
FUNCTION_TRIGGER_TYPE |
Em vez dela, use a variável de ambiente FUNCTION_SIGNATURE_TYPE . Consulte Como usar variáveis de ambiente para mais detalhes.
|
OLDPWD |
Não está mais disponível. |
SHLVL |
Não está mais disponível. |
Diferenças no ambiente de execução do Node.js 8
A assinatura das funções em segundo plano foi alterada entre os ambientes de execução do Node.js 6 e do Node.js 8, continuando no Node.js 10.
Uma função em segundo plano do Node.js 6 pode ter a seguinte aparência:
exports.nodejs6BackgroundFunction = (event, callback) => {
let data = event.data;
let context = event.context;
// ... the rest of your function
};
Observe que o argumento event
contém propriedades data
e context
.
No ambiente de execução do Node.js 10, as propriedades data
e context
foram extraídas do objeto event
e agora estão incluídas como parte da assinatura da função:
exports.nodejs8AndAboveBackgroundFunction = (data, context, callback) => {
// ... the rest of your function is unchanged
};
Essa alteração simplifica as referências aos objetos data
e context
anteriormente contidos no argumento event
. Para mais informações, consulte Parâmetros da função em segundo plano.
Se você estiver usando a assinatura da função em segundo plano do Node.js 6, faça as seguintes alterações para executar sua função em um ambiente de execução Node.js mais recente:
Altere a assinatura da função de
(event, callback)
para(data, context, callback)
.Altere as referências a
event.data
eevent.context
paradata
econtext
, respectivamente.
Suspensão de uso: Node.js 6 e Node.js 8
Os ambientes de execução do Node.js 6 e do Node.js 8 foram suspensos. Para garantir que suas funções estejam em uma versão compatível do Node.js, migre-as para o Node.js 10 ou superior.
Após 05/08/2020, as implantações de função que usam o Node.js 6 serão bloqueadas. As funções do Cloud que continuarem usando o Node.js 6 após esse período serão desabilitadas.