O Function Compute oferece suporte a dois hooks de ciclo de vida para instâncias de função Node.js: um Initializer hook, executado uma única vez após o início da instância, e um PreStop hook, executado antes da destruição da instância. Utilize esses hooks para gerenciar recursos — como conexões de banco de dados — que devem ser inicializados apenas uma vez por instância e liberados no momento do desligamento.
Funcionamento dos hooks de ciclo de vida
Uma instância de função passa pelas seguintes etapas:
Início da instância
Execução do Initializer hook (no máximo uma vez por instância)
Execução do Handler para cada solicitação de invocação
Agendamento da instância para destruição
Execução do PreStop hook
Destruição da instância
Os logs de execução dos hooks são cobrados à mesma taxa das solicitações de invocação regulares. No entanto, esses logs aparecem apenas em Function Logs, Real-time Logs e Advanced Logs — não constam na lista de solicitações de invocação. Para mais informações, consulte Visualizar logs de hooks de ciclo de vida.
Initializer hook
O Initializer hook é executado após o início de uma instância de função e antes que o handler processe quaisquer solicitações. O Function Compute garante que o hook seja executado no máximo uma vez durante o ciclo de vida da instância. Em caso de falha, o Function Compute tenta novamente até obter sucesso antes de rotear qualquer solicitação para a instância.
Utilize o Initializer hook para configurar recursos compartilhados — por exemplo, abrir uma conexão com o banco de dados que todas as invocações subsequentes possam reutilizar, em vez de reconectar a cada chamada.
Assinatura do método
|
Aspecto |
Detalhes |
|
Entrada |
Apenas |
|
Retorno |
Sem valor de retorno. Chame |
Exemplos de código
Ambos os exemplos utilizam initialize como nome da função do hook. Esse nome deve corresponder ao nome do Initializer hook configurado no console do Function Compute.
ECMAScript modules (Node.js 18 and later)
export const initialize = async (context) => {
console.log('initializer');
return "";
}
CommonJS modules
exports.initialize = function(context, callback) {
console.log('initializer');
callback(null, "");
};
PreStop hook
O PreStop hook é executado antes da destruição de uma instância de função. Sua assinatura de método é idêntica à do Initializer hook: aceita context como única entrada e requer uma chamada de return ou callback para ser concluído.
Utilize o PreStop hook para liberar recursos mantidos pela instância — por exemplo, fechar conexões de banco de dados antes do desligamento da instância.
As instâncias de função permanecem em cache por um período após o fim do processamento, portanto o PreStop hook não é executado imediatamente após o término de uma invocação. Para acionar o PreStop rapidamente durante testes, atualize a configuração ou o código da função — isso força a substituição da instância existente e aciona o PreStop hook.
Exemplos de código
Ambos os exemplos utilizam preStop como nome da função do hook. Esse nome deve corresponder ao nome do PreStop hook configurado no console.
ECMAScript modules (Node.js 18 and later)
export const preStop = async (context) => {
console.log('preStop');
return "";
}
CommonJS modules
module.exports.preStop = function(context, callback) {
console.log('preStop');
callback(null, "");
}
Configurar hooks de ciclo de vida
Usar o console do Function Compute
No console do Function Compute, configure o Initializer hook e o PreStop hook nas configurações da função. Para detalhes, consulte Configurar ciclos de vida de instância.
Especifique o nome de cada hook no formato [filename.methodname]:
|
Hook |
Valor |
Descrição |
|
Initializer hook |
|
Método |
|
PreStop hook |
|
Método |

Usar Serverless Devs
Adicione instanceLifecycleConfig sob props no seu arquivo s.yaml. Cada hook requer um handler (no formato filename.methodname) e um timeout (em segundos).
edition: 3.0.0
name: hello-world-app
access: default
resources:
hello_world:
component: fc3
props:
region: cn-hangzhou
functionName: nodejs-fc-hooks
description: "Node.js lifecycle hooks by serverless devs"
runtime: nodejs20
code: ./code
handler: index.handler
memorySize: 128
timeout: 30
instanceLifecycleConfig:
preStop:
handler: index.preStop
timeout: 3
initializer:
handler: index.initialize
timeout: 3
internetAccess: true
logConfig: auto
Para todos os campos YAML suportados, consulte Comandos comuns do Serverless Devs.
Visualizar logs de hooks de ciclo de vida
Faça login no console do Function Compute. No painel de navegação à esquerda, clique em Functions.
Na barra de navegação superior, selecione uma região. Na página Functions, clique em a função desejada.
Na página de detalhes da função, clique em a aba Test Function, clique em Test Function e escolha Logs > Function Logs.
A aba Logs exibe tanto os logs de invocação quanto os logs do Initializer. Exemplo:
2023-09-06 11:18:10 FC Initialize Start RequestId: 1-64f7ef72-64caf1ff0046194d9a26bbd7
2023-09-06 11:18:10 load code for handler:index.initialize
2023-09-06 11:18:10 2023-09-06 11:18:10 1-64f7ef72-64caf1ff0046194d9a26bbd7 [verbose] initializer
2023-09-06 11:18:10 FC Initialize End RequestId: 1-64f7ef72-64caf1ff0046194d9a26bbd7
2023-09-06 11:18:10 FC Invoke Start RequestId: 1-64f7ef72-64caf1ff0046194d9a26bbd7
2023-09-06 11:18:10 load code for handler:index.handler
2023-09-06 11:18:10 FC Invoke End RequestId: 1-64f7ef72-64caf1ff0046194d9a26bbd7
Para visualizar os logs do PreStop hook, atualize a configuração ou o código da função para forçar a substituição da instância. Após a conclusão da atualização, os logs do PreStop aparecerão em Function Logs. Exemplo:
2023-09-06 11:08:10 FC PreStop Start RequestId: 944bca62-b209-47a1-9e48-2723647bce0a
2023-09-06 11:08:10 load code for handler:index.preStop
2023-09-06 11:08:10 2023-09-06 11:08:10 944bca62-b209-47a1-9e48-2723647bce0a [verbose] preStop
2023-09-06 11:08:10 FC PreStop End RequestId: 944bca62-b209-47a1-9e48-2723647bce0a
Programa de exemplo
Um exemplo completo em Node.js que utiliza ambos os hooks com um banco de dados MySQL está disponível em nodejs14-mysql. O Initializer hook lê a configuração do MySQL a partir de variáveis de ambiente, cria uma conexão e testa a conectividade. O PreStop hook fecha a conexão.