Todos os produtos
Search
Central de documentação

Function Compute:Hooks de ciclo de vida para instâncias de função

Última atualização: Jun 29, 2026

Ao iniciar ou encerrar uma instância de função, talvez seja necessário executar lógica personalizada — por exemplo, abrir uma conexão com o banco de dados antes da primeira requisição ou liberar recursos adequadamente antes da destruição da instância. Os hooks de ciclo de vida permitem registrar funções Python que o Function Compute chama automaticamente nesses dois momentos do ciclo de vida da instância.

Dois tipos de hook estão disponíveis para runtimes Python:

  • Initializer hook — executado uma vez após o início da instância, antes que o handler processe qualquer requisição.

  • PreStop hook — executado antes da destruição da instância, permitindo a liberação de recursos.

Como funcionam os hooks de ciclo de vida

Uma instância de função passa por três fases:

Fase

Momento de execução

Hook

Init

Início da instância

Initializer hook (se configurado)

Invoke

O handler processa requisições

Shutdown

Destruição da instância

PreStop hook (se configurado)

A execução de hooks de ciclo de vida é faturada à mesma taxa das invocações regulares. Os logs aparecem em Function Logs, Real-time Logs e Advanced Logs, mas não na lista de requisições de invocação.

Initializer hook

O Initializer hook é executado uma vez por instância, após o início e antes da primeira invocação do handler. O Function Compute garante exatamente uma execução por instância.

Comportamento em caso de falha: Se o hook falhar, a invocação retornará um erro. Na próxima invocação, o Function Compute criará uma nova instância e executará o Initializer hook novamente.

Assinatura do método:

Parâmetro

Descrição

context

Fornece metadados de runtime para a invocação atual.

Valor de retorno

Nenhum.

Exemplo: inicializar uma conexão com banco de dados

Um padrão comum é abrir recursos compartilhados no Initializer hook para que cada invocação do handler os reutilize, evitando reconexões a cada requisição.

import os
import pymysql

db_connection = None

def initialize(context):
    global db_connection
    host = os.environ.get("DB_HOST")
    user = os.environ.get("DB_USER")
    password = os.environ.get("DB_PASSWORD")
    database = os.environ.get("DB_NAME")

    db_connection = pymysql.connect(
        host=host,
        user=user,
        password=password,
        database=database,
    )
    print("Database connection established")

O nome do método (initialize neste exemplo) deve corresponder ao valor configurado em Initializer Hook. Por exemplo, definir Initializer Hook como index.initialize instrui o Function Compute a chamar o método initialize em index.py.

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: um parâmetro context e nenhum valor de retorno.

Exemplo: fechar uma conexão com banco de dados

def preStop(context):
    global db_connection
    if db_connection:
        db_connection.close()
        print("Database connection closed")
As instâncias de função permanecem em cache e não são destruídas imediatamente após a última invocação. Portanto, os logs do PreStop podem não aparecer de imediato. Para acionar rapidamente um PreStop hook durante testes, atualize a configuração ou o código da função. Essa ação recicla as instâncias existentes e permite visualizar os logs do PreStop em Function Logs .

Configure hooks de ciclo de vida

Usar o console do Function Compute

  1. Faça login no console do Function Compute. No painel de navegação à esquerda, clique em Functions.

  2. Selecione a função desejada.

  3. Nas configurações da função, defina os campos Initializer Hook e PreStop Hook no formato <filename>.<method> — por exemplo, index.initialize ou index.preStop.

Para obter etapas detalhadas, consulte Configurar ciclos de vida de instância.

Lifecycle hooks configuration in the Function Compute console

Usar Serverless Devs

Adicione instanceLifecycleConfig sob o recurso da função em s.yaml. Ambos os hooks exigem um handler (no formato <filename>.<method>) e um timeout (em segundos).

edition: 3.0.0
name: fcDeployApp
access: "default"

vars: # The global variables
  region: "cn-hangzhou"

resources:
  hello_world:
    component: fc3 # The name of the component
    props:
      region: ${vars.region}
      functionName: "emojipy"
      description: 'this is emoji'
      runtime: "python3"
      code: ./
      handler: index.handler
      memorySize: 128
      timeout: 30
      environmentVariables:
        PYTHONPATH: /code:/code/python:/opt/python
      instanceLifecycleConfig:
        initializer:
          handler: index.initialize
          timeout: 60  # Timeout in seconds for the Initializer hook
        preStop:
          handler: index.preStop
          timeout: 60  # Timeout in seconds for the PreStop hook

Defina o timeout com duração suficiente para cobrir a lógica de inicialização ou limpeza. Para detalhes sobre a sintaxe YAML, consulte Comandos comuns do Serverless Devs.

Visualize logs de hooks de ciclo de vida

  1. Faça login no console do Function Compute. No painel de navegação à esquerda, clique em Functions.

  2. Na barra de navegação superior, selecione uma região. Na página Functions, clique na função desejada.

  3. Na página de detalhes da função, clique na aba Test Function. Em seguida, clique em Test Function e escolha Logs > Function Logs.

A aba Logs exibe tanto os logs de invocação quanto os de hooks de ciclo de vida. Cada execução de hook é delimitada pelos marcadores Start e End, que incluem o RequestId:

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

Os logs do PreStop hook seguem o mesmo formato:

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

Próximos passos