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

O Function Compute aciona hooks de ciclo de vida quando eventos específicos da instância ocorrem, permitindo que você execute códigos de configuração e limpeza fora do seu handler. O runtime C# oferece suporte a dois hooks: Initializer e PreStop. Para obter informações básicas sobre o gerenciamento do ciclo de vida da instância, consulte Configurar ciclos de vida de instâncias.

Os hooks de ciclo de vida são faturados da mesma forma que as invocações de função padrão. Os logs de execução dos hooks aparecem em Function Logs , Real-time Logs e Advanced Logs , mas não na lista de solicitações de invocação.

Como funcionam os hooks Initializer e PreStop

Initializer

O hook Initializer é executado após o início de uma instância de função e antes da primeira invocação do handler. O Function Compute garante que ele seja executado exatamente uma vez durante o tempo de vida da instância.

Se o hook Initializer falhar, a invocação retornará um erro. Na próxima invocação, o Function Compute cria uma nova instância e tenta executar o hook Initializer novamente.

Utilize o hook Initializer para configurações únicas, como inicializar clientes SDK ou conexões de banco de dados. Como o Function Compute reutiliza instâncias aquecidas entre invocações, o código de configuração no hook Initializer é executado apenas uma vez, e seus resultados ficam disponíveis para todas as chamadas subsequentes do handler nessa instância.

PreStop

O hook PreStop é executado antes que uma instância de função seja destruída. Use-o para liberar buffers, fechar conexões ou liberar recursos antes do desligamento da instância.

Assinatura do método

Os hooks Initializer e PreStop utilizam a mesma assinatura de método: um parâmetro de entrada IFcContext e nenhum valor de retorno.

Método de instância:

public void FunctionName(IFcContext context);

Método estático:

public static void FunctionName(IFcContext context);

Exemplo

O exemplo a seguir mostra uma classe que implementa ambos os hooks juntamente com um stream handler.

using System;
using System.IO;
using System.Threading.Tasks;
using Aliyun.Serverless.Core;
using Microsoft.Extensions.Logging;

namespace Example
{
    public class Hello
    {
        public void Initialize(IFcContext context)
        {
            IFcLogger logger = context.Logger;
            logger.LogInformation("Initialize start");
            logger.LogInformation("Handle initializer: {0}", context.RequestId);
            logger.LogInformation("Initialize end");
        }

        public void PreStop(IFcContext context)
        {
            IFcLogger logger = context.Logger;
            logger.LogInformation("PreStop start");
            logger.LogInformation("Handle PreStop: {0}", context.RequestId);
            logger.LogInformation("PreStop end");
        }

        public async Task<Stream> StreamHandler(Stream input, IFcContext context)
        {
            IFcLogger logger = context.Logger;
            logger.LogInformation("Handle request: {0}", context.RequestId);

            MemoryStream copy = new MemoryStream();
            await input.CopyToAsync(copy);
            copy.Seek(0, SeekOrigin.Begin);
            return copy;
        }

        static void Main(string[] args){}
    }
}

Configure hooks de ciclo de vida

Usar o console do Function Compute

No console do Function Compute, configure os hooks usando o mesmo formato de um handler: Assembly name::Namespace.Class name::Method name. Para mais detalhes, consulte Configurar ciclos de vida de instâncias e Handlers.

Com base na classe de exemplo acima:

  • Initializer: HelloFcApp::Example.Hello::Initialize

  • PreStop: HelloFcApp::Example.Hello::PreStop

Usar o Serverless Devs

Adicione instanceLifecycleConfig ao bloco function no seu arquivo s.yaml. Cada hook requer um campo handler e um campo timeout.

edition: 3.0.0
name: hello-world-app
access: "default"

vars:
  region: "cn-hangzhou"

resources:
  hello_world:
    component: fc3
    actions:
      pre-${regex('deploy|local')}:
        - run: dotnet publish -c Release -o ./target
          path: ./HelloWorldApp
    props:
      region: ${vars.region}
      functionName: "start-dotnetcore-p6jp"
      description: 'hello world by serverless devs'
      runtime: "dotnetcore3.1"
      code: ./HelloWorldApp/target/
      handler: HelloWorldApp::Example.Hello::StreamHandler
      memorySize: 128
      timeout: 10
      instanceLifecycleConfig:
        initializer:
          handler: HelloFcApp::Example.Hello::Initialize
          timeout: 60
        preStop:
          handler: HelloFcApp::Example.Hello::PreStop
          timeout: 60

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 em na função que deseja inspecionar.

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

A aba Logs exibe tanto os logs de invocação quanto os logs do Initializer:

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

As instâncias de função permanecem em cache após a invocação e não são destruídas imediatamente, portanto, os logs do PreStop não aparecem de imediato. Para acionar um hook PreStop imediatamente, atualize a configuração ou o código da função — isso força a substituição das instâncias existentes. Após a atualização, os logs do PreStop aparecem em Function Logs:

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

Próximos passos