Todos os produtos
Search
Central de documentação

Function Compute:Hooks do ciclo de vida da instância de função

Última atualização: Jun 29, 2026

O Function Compute executa hooks do ciclo de vida em momentos específicos da existência de uma instância de função: uma vez na inicialização e outra antes do encerramento. Este tópico demonstra como implementar os hooks Initializer e PreStop em um runtime personalizado.

Funcionamento

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

  • Inicialização: Ao criar ou descongelar uma instância, o Function Compute chama o hook Initializer (se configurado) antes de direcionar qualquer tráfego para ela. Use essa fase para carregar modelos, aquecer pools de conexões ou executar configurações obrigatórias antes da primeira requisição.

  • Invocação: A instância processa as invocações da função. O handler principal encaminha as requisições para a sua lógica de negócio.

  • Encerramento: Antes de congelar ou destruir uma instância, o Function Compute aciona o hook PreStop (se configurado). Use este momento para liberar buffers, fechar conexões ou limpar recursos.

A cobrança dos hooks do ciclo de vida segue a mesma taxa das invocações normais. Os logs correspondentes aparecem em Function Logs e Advanced Logs, mas não constam na lista de Invocation Requests.

Para mais detalhes sobre a configuração do ciclo de vida da instância, consulte Configure o ciclo de vida da instância.

Referência da interface dos hooks

O servidor HTTP do seu runtime personalizado deve expor os seguintes endpoints:

Hook

Caminho

Método

Corpo da requisição

Sucesso

Falha

Initializer

/initialize

POST

Nenhum

2xx

Diferente de 2xx

PreStop

/pre-stop

GET

Nenhum

2xx

Diferente de 2xx

Ambos os hooks recebem os cabeçalhos de requisição comuns, incluindo x-fc-request-id.

Importante

Mesmo que o hook Initializer atinja o tempo limite ou retorne um status diferente de 2xx, o servidor ainda responde com HTTP 200. Verifique o cabeçalho de resposta X-Fc-Error-Type:InitializationError ou o campo errorMessage no corpo da resposta para identificar falhas de inicialização.

Implementar hooks do ciclo de vida

O exemplo abaixo, usando Python 3.10 e Flask, apresenta todos os três endpoints em um único servidor HTTP: o hook Initializer, o handler principal de invocação e o hook PreStop.

import os
from flask import Flask, request

app = Flask(__name__)

# Initializer hook — runs once when the instance starts
@app.route('/initialize', methods=['POST'])
def init_invoke():
    rid = request.headers.get('x-fc-request-id')
    print("FC Initialize Start RequestId: " + rid)
    # Add setup logic here: load models, open connections, etc.
    print("FC Initialize End RequestId: " + rid)
    return "OK"

# Main invocation handler
@app.route('/', defaults={'path': ''})
@app.route('/<path:path>', methods=['GET', 'POST', 'PUT', 'DELETE'])
def hello_world(path):
    rid = request.headers.get('x-fc-request-id')
    print("FC invoke Start RequestId: " + rid)
    # Add business logic here
    print("FC invoke End RequestId: " + rid)
    return "Hello, World!", 200, [('Function-Name', os.getenv('FC_FUNCTION_NAME'))]

# PreStop hook — runs before the instance is frozen or destroyed
@app.route('/pre-stop', methods=['GET'])
def prestop_invoke():
    rid = request.headers.get('x-fc-request-id')
    print("FC PreStop Start RequestId: " + rid)
    # Add cleanup logic here: flush buffers, close connections, etc.
    print("FC PreStop End RequestId: " + rid)
    return "OK"

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=9000)
Importante

Implemente o endpoint /initialize apenas se configurar um Initializer para a função. Caso contrário, o Function Compute nunca chamará /initialize, mesmo que o endpoint exista no seu servidor HTTP.

O hook PreStop segue o mesmo padrão de implementação do hook Initializer.

Cenários de erro para o hook Initializer

Se a lógica de inicialização gerar uma exceção ou retornar um status diferente de 2xx, o Function Compute registrará um erro de inicialização:

# Scenario 1: unhandled exception
@app.route('/initialize', methods=['POST'])
def init():
    raise Exception("initialization failed")
    return "OK", 200, []

# Scenario 2: explicit non-2xx response
@app.route('/initialize', methods=['POST'])
def init():
    return "OK", 404, []

Tratamento de erros

O Function Compute reage aos erros de maneiras diferentes, dependendo do hook que falhou e do código de status retornado.

Erros no Initializer

Código de status

Comportamento da plataforma

400, 404

O Function Compute não reenvia a requisição atual. Ele tenta executar o hook Initializer novamente até obter sucesso.

500

O Function Compute reinicia a instância da função.

Erros no PreStop

Código de status

Comportamento da plataforma

400, 404

O erro não interfere no congelamento ou encerramento da instância. O Function Compute continua o processo normalmente.

Configure hooks do 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. Clique na aba Configuration. Na seção Instance Configuration, clique em Modify.

  4. No painel Instance Configuration, defina o tipo de hook e o tempo limite e clique em Deploy.

  5. Implemente a lógica do hook no seu código. Clique em Deploy acima do editor de código e em Test Function.

Visualize logs dos hooks do ciclo de vida

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

  2. Selecione uma região e clique na função que deseja inspecionar.

  3. Clique na aba Test, clique em Test Function e escolha Logs > Function Logs.

A tela de Function Logs exibe tanto os logs de invocação quanto os do hook Initializer em ordem cronológica. O exemplo a seguir mostra uma execução do Initializer seguida pela invocação da função:

2024-06-26 10:59:23FC Initialize Start RequestId: 529eab23-9b3a-4ffc-88c8-9a686*******
2024-06-26 10:59:23FC Initialize End RequestId: 529eab23-9b3a-4ffc-88c8-9a686*******
2024-06-26 10:59:25FC Invoke Start RequestId: 1-667b840c-15c49df0-b7dc1*******
2024-06-26 10:59:25FC Invoke End RequestId: 1-667b840c-15c49df0-b7dc1*******

Os logs do hook PreStop podem não aparecer imediatamente, pois o Function Compute mantém a instância em cache por um período antes de destruí-la. Para acionar o hook PreStop sob demanda, atualize a configuração ou o código da função e verifique os Function Logs:

2024-06-26 11:04:33FC PreStop Start RequestId: c4385899-f071-490e-a8b7-e33c5*******
2024-06-26 11:04:33FC PreStop End RequestId: c4385899-f071-490e-a8b7-e33c5*******