Todos os produtos
Search
Central de documentação

Function Compute:Hooks do ciclo de vida da instância

Última atualização: Jun 29, 2026

Após a implementação e configuração dos hooks do ciclo de vida da instância, o Function Compute invoca o hook correspondente para eventos específicos do ciclo de vida. Este tópico descreve como implementar esses hooks em uma imagem personalizada.

Contexto

O ciclo de vida da instância envolve os hooks Initializer e PreStop. O hook Initializer possui dois tipos: invoke code e execute instruction. Atualmente, apenas funções aceleradas por GPU suportam o tipo execute instruction. Para mais informações, consulte Configurar ciclo de vida da instância.

Os hooks do ciclo de vida da instância seguem as mesmas regras de faturamento das solicitações de invocação normais. No entanto, seus logs de execução estão disponíveis apenas em Real-time Log, Function Logs ou Advanced Logs, e não aparecem na Invocation Request List. Para mais informações, consulte Visualizar logs dos hooks do ciclo de vida da instância.

Nota

Atualmente, não é possível gravar logs de hooks do tipo execute instruction no Function Log.

Implementar métodos de callback

O Function Compute invoca o hook correspondente para eventos específicos do ciclo de vida da instância. Esse ciclo envolve os hooks Initializer e PreStop. O hook Initializer suporta dois tipos: invoke code e execute instruction. Não configure ambos simultaneamente; apenas um pode estar ativo por vez.

Invoke code

Ao configurar um hook do tipo invoke code, o sistema envia uma solicitação HTTP para sua função (como POST /initialize ou GET /pre-stop) quando uma instância inicia ou está prestes a parar. Trate essa solicitação no código da aplicação.

Caminho

Solicitação

Resposta esperada

(Opcional) POST /initialize

Response body: Valor de retorno do hook Initializer da função.

StatusCode

  • 2xx: Sucesso.

  • Não-2xx: Falha.

Nota

Se um hook Initializer falhar ou atingir o tempo limite, o servidor sempre retornará um código de status HTTP 200. Para confirmar a falha, verifique o cabeçalho de resposta X-Fc-Error-Type:InitializationError ou o campo errorMessage no corpo da resposta.

(Opcional) GET /pre-stop

Response body: Valor de retorno do hook PreStop da função.

Para usar o hook Initializer em uma imagem personalizada, implemente a lógica para o caminho /initialize e o método POST no servidor HTTP. O mesmo se aplica ao hook PreStop, que exige lógica para o caminho /pre-stop e o método GET. O código de exemplo a seguir mostra uma implementação para um runtime Python 3.10 personalizado.

Nota

Implemente a lógica de /initialize apenas se configurar um hook Initializer. Caso contrário, o servidor HTTP nunca invocará o código correspondente. A mesma regra vale para o hook PreStop e o caminho /pre-stop.

import os
from flask import Flask
from flask import request

app = Flask(__name__)

@app.route('/initialize', methods=['POST'])
def init_invoke():
    rid = request.headers.get('x-fc-request-id')
    print("FC Initialize Start RequestId: " + rid)
    # do your things
    print("FC Initialize End RequestId: " + rid)
    return "OK"

@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)
    # do your things
    print("FC invoke End RequestId: " + rid)
    return "Hello, World!", 200, [('Function-Name', os.getenv('FC_FUNCTION_NAME'))]

@app.route('/pre-stop', methods=['GET'])
def prestop_invoke():
    rid = request.headers.get('x-fc-request-id')
    print("FC PreStop Start RequestId: " + rid)
    # do your things
    print("FC PreStop End RequestId: " + rid)
    return "OK"

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

O exemplo anterior demonstra uma inicialização bem-sucedida. Os exemplos a seguir mostram como um hook /initialize pode falhar em Python.

@app.route('/initialize', methods=['POST'])
def init():
    raise Exception("hahaha")
    return "OK", 200, []
@app.route('/initialize', methods=['POST'])
def init():
    return "OK", 404, []

Execute instruction

Um hook do tipo execute instruction executa um comando para inicializar a instância após a inicialização. Use qualquer shell compatível com o ambiente de runtime da função, como /bin/bash, /bin/sh, /bin/csh ou /bin/zsh.

O console do Function Compute oferece duas opções predefinidas: /bin/bash e /bin/sh. Este tópico usa /bin/sh como exemplo.

#!/bin/sh

URL="http://localhost:7860"
REQUEST_PATH="sdapi/v1/txt2img"
JSON_DATA='{
	"prompt": "",
	"steps": 1,
	"height": 8,
	"width": 8
}'
temp_file=$(mktemp)
trap 'rm -f "$temp_file"' EXIT

if ! http_code=$(curl -s -w "%{http_code}" \
	-H "Content-Type: application/json" \
	-d "$JSON_DATA" \
	-o "$temp_file" \
	-X POST "$URL"/"$REQUEST_PATH"); then
	echo "{\"status\": \"curl_error\", \"code\": $curl_exit_code}" \
	| jq . >&2
	exit 1
fi

response=$(<"$temp_file")
echo "http code $http_code"

if [ "$http_code" -eq 200 ]; then
	echo "$response" | jq -r '.' || printf "%s\n" "$response"
	exit 0
else
	echo "$response_body" \
	| jq -c 'if type == "object" then . else {raw: .} end' 2>/dev/null \
	| jq -s '{status: "http_error", code: $code, response: .[0]}' \
		--arg code "$http_code" \
		>&2
	exit 1
fi

Um código de saída 0 indica sucesso; qualquer outro valor indica falha. Para facilitar a solução de problemas, grave detalhes do erro no erro padrão (stderr) dentro do script. Por exemplo, o trecho abaixo mostra como exibir detalhes do erro e definir o código de saída como 1 quando uma solicitação curl falha.

if ! http_code=$(curl -s -w "%{http_code}" \
	-H "Content-Type: application/json" \
	-d "$JSON_DATA" \
	-o "$temp_file" \
	-X POST "$URL"/"$REQUEST_PATH"); then
	echo "{\"status\": \"curl_error\", \"code\": $curl_exit_code}" \
	| jq . >&2
	exit 1
fi

Códigos de erro de callback

Invoke code

Código de erro

Descrição

400

  • Se um hook Initializer falhar com erro 400 ou 404, o sistema não tentará novamente essa solicitação específica. Contudo, ele continuará tentando inicializar a instância até obter sucesso.

  • Uma falha 400 ou 404 em um hook PreStop não afeta o congelamento ou a parada da instância da função.

404

500

O Function Compute reinicia a instância.

Execute instruction

Se o código de saída for diferente de 0, a instrução falhará e não será reexecutada. Em seguida, o sistema retorna um erro.

Configurar hooks do ciclo de vida da instância

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

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

  3. Na página de detalhes da função, clique em na aba Configuration. Na seção Instance Configuration, clique em Modify.

  4. No painel Instance Configuration, configure o hook Initializer e defina o Initializer Timeout.

    • Invoke code

      image

    • Execute instruction

      O console fornece dois shells predefinidos: /bin/bash e /bin/sh.

      image

  5. Ainda no painel Instance Configuration, configure o hook PreStop e defina seu tempo limite. Em seguida, clique em Deploy.

    image

Visualizar logs dos hooks do ciclo de vida da instância

Nota

Atualmente, não é possível gravar logs de hooks do tipo execute instruction no Function Log.

Visualize os logs dos hooks em Function Logs.

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

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

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

    Na aba Function Logs, visualize os logs de invocação da função e os logs do hook Initializer. Exemplo:

    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*******

    As instâncias da função permanecem em cache por um período e não são destruídas imediatamente, portanto, os logs do hook PreStop podem não aparecer de imediato. Para acionar o hook PreStop mais rapidamente, atualize a configuração ou o código da função. Após a conclusão da atualização, visualize o Function Logs novamente para ver os logs do hook PreStop. Exemplo:

    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*******