Tous les produits
Search
Centre de documentation

Function Compute:Hooks de cycle de vie des instances

Dernière mise à jour :Aug 21, 2026

Cette rubrique explique comment implémenter et utiliser les hooks de cycle de vie des instances dans un environnement d'exécution PHP.

Contexte

Lorsque vous implémentez et configurez un hook de cycle de vie d'instance, Function Compute invoque le hook correspondant lors d'un événement de cycle de vie spécifique. L'environnement d'exécution PHP prend en charge deux hooks de cycle de vie d'instance : Initializer et PreStop. Pour plus d'informations, consultez la rubrique Configurer les cycles de vie des instances.

Les règles de facturation d'un hook de cycle de vie d'instance sont identiques à celles d'une invocation de requête standard. Toutefois, vous ne pouvez consulter ses journaux d'exécution que dans les sections Real-time Logs, Function Logs ou Advanced Logs. La liste invocation request list n'affiche pas les journaux relatifs à ces hooks. Pour plus d'informations, consultez la section Afficher les journaux des hooks de cycle de vie des instances.

Hook Initializer

Exemple de hook Initializer

Le hook Initializer s'exécute après le démarrage d'une instance de fonction, mais avant l'exécution de son gestionnaire (handler). Function Compute garantit l'exécution réussie du hook Initializer au plus une fois au cours du cycle de vie d'une instance de fonction. Si le hook Initializer échoue lors de sa première tentative, l'invocation de la fonction échoue immédiatement. Lors de l'invocation suivante, une nouvelle instance de fonction est créée et le hook s'exécute à nouveau.

Remarque

En cas d'expiration du délai ou d'échec d'un hook Initializer, le serveur renvoie toujours un code d'état HTTP 200. Vérifiez l'en-tête de réponse X-Fc-Error-Type:InitializationError ou le champ errorMessage dans le corps de la réponse pour déterminer si l'erreur provient d'un échec d'initialisation.

Le hook Initializer accepte un seul paramètre d'entrée, $context, identique au paramètre de contexte d'un gestionnaire.

Voici un exemple minimal de hook Initializer.

<?php
function my_initializer($context) {
    $logger = $GLOBALS['fcLogger'];
    $logger->info("hello world");
}
?>            

my_initializer correspond au nom de la méthode du hook Initializer. Ce nom doit correspondre à la valeur définie pour le champ Initializer Hook dans la console Function Compute. Par exemple, si vous configurez le champ Initializer Hook avec la valeur main.my_initializer pour votre fonction, Function Compute charge et exécute la méthode my_initializer définie dans le fichier main.php.

Signature de la méthode

  • Le hook accepte un seul paramètre d'entrée, context, identique à l'objet context du gestionnaire.

  • Les champs initializer et initializationTimeout de l'objet context sont conçus spécifiquement pour le hook Initializer. Si vous utilisez la fonctionnalité Initializer, ces champs prennent les valeurs configurées pour les paramètres Initializer Hook et Initializer Hook Timeout Period de la fonction. Dans le cas contraire, ces champs restent vides et sont ignorés.

  • Le hook ne renvoie aucune valeur.

Hook PreStop

Le hook PreStop s'exécute avant la destruction d'une instance de fonction. Sa signature de méthode est identique à celle du hook Initializer.

Voici un exemple de hook PreStop.

<?php

$counter = 0;
function preStop($context) {
    $GLOBALS['fcLogger']->info("preStop ok");
}

function handler($event, $context) {
    global $counter;
    $counter += 2;
    return $counter;
}
?>

Consultez les journaux du hook PreStop dans le Logstore configuré pour votre fonction. Par exemple, utilisez l'instruction de requête suivante pour retrouver tous les journaux associés à la fonction. Pour plus d'informations, consultez la section Interroger les journaux liés aux hooks.

<funcName> AND <ServiceName> AND qualifier: <VERSION>

Configurer les hooks de cycle de vie

Configuration via la console

Dans la console Function Compute, configurez les paramètres Initializer Hook et PreStop Hook d'une fonction FC dans la section Configuration > Instance Configuration. Pour plus d'informations, consultez la rubrique Configurer le cycle de vie des instances. Le format de rappel est [file_name.method_name], par exemple :

  • Définissez le paramètre Initializer Hook sur index.initialize pour appeler la méthode initialize du fichier index.php.

  • Définissez le paramètre PreStop Hook sur index.preStop pour appeler la méthode preStop du fichier index.php.

Configuration à l'aide de Serverless Devs

Si vous utilisez Serverless Devs, ajoutez les configurations des paramètres Initializer Hook et PreStop Hook à votre fichier s.yaml.

  • Configuration du hook Initializer

    Dans la configuration de la fonction (champ function), ajoutez le champ instanceLifecycleConfig.initializer, qui comprend les sous-champs handler et timeout.

  • Configuration du hook PreStop

    Ajoutez le champ instanceLifecycleConfig.preStop à la configuration de la fonction (champ function). Ce champ contient les sous-champs handler et timeout.

Le code suivant fournit un exemple de configuration.

edition: 3.0.0
name: fcDeployApp
access: "default"

vars: # Global variables
  region: "cn-hangzhou"

resources:
  hello_world:
    component: fc3 # Component name
    props:
      region: ${vars.region}              # For more information about how to use variables, see: https://docs.serverless-devs.com/serverless-devs/yaml#%E5%8F%98%E9%87%8F%E8%B5%8B%E5%80%BC
      functionName: "testphp"
      description: 'this is a test'
      runtime: "php7.2"
      code: ./
      handler: index.handler
      memorySize: 128
      timeout: 30
      instanceLifecycleConfig:      # Instance lifecycle hooks
        initializer:                # Initializer hook
          handler: index.my_initializer 
          timeout: 60     
        preStop:                    # PreStop hook
          handler: index.preStop    # Function handler
          timeout: 60               # Timeout
 

Pour plus d'informations sur les spécifications de configuration YAML pour Serverless Devs, consultez la rubrique Commandes courantes de Serverless Devs.

Afficher les journaux des hooks de cycle de vie des instances

Affichez les journaux des hooks de cycle de vie dans la section Logs.

  1. Connectez-vous à la console Function Compute. Dans le volet de navigation de gauche, choisissez Function Management > Functions.

  2. Dans la barre de navigation supérieure, sélectionnez une région. Sur la page Functions, cliquez sur la fonction cible.

  3. Sur la page des détails de la fonction, cliquez sur l'onglet Test Function, puis cliquez sur Test Function et choisissez Logs > Function Logs.

    Dans l'onglet Logs, consultez les journaux d'invocation de fonction ainsi que les journaux Initializer. Exemple :

    2024-03-04 17:57:28FC Initialize Start RequestId: 1-65e59b07-1520da26-bf73bbb91b69
    2024-03-04 17:57:282024-03-04 09:57:28.192 1-65e59b07-1520da26-bf73bbb91b69 [info] initializer
    2024-03-04 17:57:28FC Initialize End RequestId: 1-65e59b07-1520da26-bf73bbb91b69
    2024-03-04 17:57:28FC Invoke Start RequestId: 1-65e59b07-1520da26-bf73bbb91b69
    2024-03-04 17:57:28FC Invoke End RequestId: 1-65e59b07-1520da26-bf73bbb91b69

    Chaque instance de fonction étant mise en cache pendant une certaine période et non détruite immédiatement, vous ne pouvez pas consulter les journaux des hooks PreStop instantanément. Pour déclencher rapidement un hook PreStop, mettez à jour la configuration ou le code de la fonction. Une fois la mise à jour terminée, affichez les journaux des hooks PreStop dans la section Function Logs. L'exemple de code suivant illustre ce processus :

    2024-03-04 18:33:26FC PreStop Start RequestId: 93c93603-9fbe-4576-9458-193c8b213031
    2024-03-04 18:33:262024-03-04 10:33:26.077 93c93603-9fbe-4576-9458-193c8b213031 [info] preStop
    2024-03-04 18:33:26FC PreStop End RequestId: 93c93603-9fbe-4576-9458-193c8b213031

Exemple de programme

Function Compute propose un exemple de projet MySQL utilisant les hooks Initializer et PreStop. Dans cet exemple, le hook Initializer lit la configuration de la base de données MySQL à partir des variables d'environnement, établit une connexion MySQL et teste sa connectivité. Le hook PreStop ferme la connexion MySQL. Pour plus d'informations, consultez le dépôt php72-mysql.