Todos los productos
Search
Centro de documentos

Function Compute:Hooks de ciclo de vida para instancias de función

Última actualización: Sep 06, 2026

Function Compute admite dos hooks de ciclo de vida para las instancias de función Node.js: el Initializer hook, que se ejecuta una vez después de que se inicia una instancia, y el PreStop hook, que se ejecuta antes de que se destruya una instancia. Gestione con estos hooks los recursos —como las conexiones de base de datos— que deben inicializarse una vez por instancia y liberarse cuando la instancia se apaga.

Cómo funcionan los hooks de ciclo de vida

Una instancia de función pasa por las etapas que se muestran a continuación:

  1. La instancia se inicia

  2. El Initializer hook se ejecuta (una vez como máximo por instancia)

  3. El Controlador se ejecuta para cada solicitud de invocación

  4. La instancia se programa para su destrucción

  5. El PreStop hook se ejecuta

  6. La instancia se destruye

Los registros de ejecución de los hooks se facturan a la misma tarifa que las solicitudes de invocación normales. Sin embargo, los registros de los hooks solo aparecen en Function Logs, Real-time Logs y Advanced Logs; no aparecen en la lista de solicitudes de invocación. Para obtener más información, consulte Consulte los registros de los hooks de ciclo de vida.

Hook Initializer

El hook Initializer se ejecuta después de que una instancia de función se inicia y antes de que el controlador procese cualquier solicitud. Function Compute garantiza que el hook se ejecuta una vez como máximo por ciclo de vida de la instancia. Si el hook falla, Function Compute reintenta hasta que se ejecute correctamente antes de enrutar solicitudes a la instancia.

Utilice el hook Initializer para configurar recursos compartidos; por ejemplo, abrir una conexión de base de datos que todas las invocaciones posteriores pueden reutilizar, en lugar de volver a conectarse en cada llamada.

Firma del método

Aspecto

Detalles

Entrada

context solamente; proporciona el contexto de ejecución en el momento de la invocación

Retorno

No devuelve ningún valor. Llame a return (ESM) o a callback (CommonJS) para indicar la finalización

Ejemplos de código

Ambos ejemplos usan initialize como nombre de la función del hook. Este nombre debe coincidir con el nombre del Initializer hook configurado en la consola de Function Compute.

Módulos ECMAScript (Node.js 18 y versiones posteriores)

export const initialize = async (context) => {
  console.log('initializer');
  return "";
}

Módulos CommonJS

exports.initialize = function(context, callback) {
  console.log('initializer');
  callback(null, "");
};

Hook PreStop

El hook PreStop se ejecuta antes de que se destruya una instancia de función. Su firma de método es idéntica a la del hook Initializer: acepta context como única entrada y requiere una llamada a return o a callback para completarse.

Utilice el hook PreStop para liberar los recursos que mantiene la instancia; por ejemplo, cerrar las conexiones de base de datos antes de que la instancia se apague.

Las instancias de función se conservan en caché durante un periodo después de que el procesamiento se detiene, por lo que el hook PreStop no se ejecuta inmediatamente después de que termina una invocación. Para desencadenar PreStop rápidamente en pruebas, actualice la configuración o el código de la función; esto fuerza el reemplazo de la instancia existente, lo que desencadena el hook PreStop.

Ejemplos de código

Ambos ejemplos usan preStop como nombre de la función del hook. Este nombre debe coincidir con el nombre del PreStop hook configurado en la consola.

Módulos ECMAScript (Node.js 18 y versiones posteriores)

export const preStop = async (context) => {
  console.log('preStop');
  return "";
}

Módulos CommonJS

module.exports.preStop = function(context, callback) {
  console.log('preStop');
  callback(null, "");
}

Configure los hooks de ciclo de vida

Utilice la consola de Function Compute

En la consola de Function Compute, configure el hook Initializer y el hook PreStop en la configuración de la función. Para obtener detalles, consulte Configure los ciclos de vida de las instancias.

Especifique el nombre de cada hook con el formato [filename.methodname]:

Hook

Valor

Descripción

Initializer hook

index.initialize

El método initialize en index.js

PreStop hook

index.preStop

El método preStop en index.js

db-node.js-lifecycle

Utilice Serverless Devs

Agregue instanceLifecycleConfig bajo props en el archivo s.yaml. Cada hook requiere un handler (en formato filename.methodname) y un timeout (en 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 consultar todos los campos YAML compatibles, consulte Comandos comunes de Serverless Devs.

Consulte los registros de los hooks de ciclo de vida

  1. Inicie sesión en la consola de Function Compute. En el panel de navegación izquierdo, haga clic en Functions.

  2. En la barra de navegación superior, seleccione una región. En la página Functions, haga clic en la función de destino.

  3. En la página de detalles de la función, haga clic en la pestaña Test Function, haga clic en Test Function y, a continuación, elija Logs > Function Logs.

La pestaña Logs muestra tanto los registros de invocación como los registros de Initializer. Ejemplo:

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

Consulte los registros del hook PreStop: actualice la configuración o el código de la función para forzar el reemplazo de una instancia. Después de que la actualización se complete, los registros de PreStop aparecen en Function Logs. Ejemplo:

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 ejemplo

Un ejemplo completo de Node.js que usa ambos hooks con una base de datos MySQL está disponible en nodejs14-mysql. El hook Initializer lee la configuración de MySQL de las variables de entorno, crea una conexión y prueba la conectividad. El hook PreStop cierra la conexión.

Pasos siguientes