全部产品
Search
文档中心

Function Compute:Panggilan balik siklus hidup untuk instance fungsi

更新时间:Dec 12, 2025

Topik ini menjelaskan cara mengimplementasikan panggilan balik siklus hidup untuk instance fungsi dalam lingkungan runtime C#.

Informasi latar belakang

Setelah Anda mengonfigurasi panggilan balik siklus hidup untuk instance fungsi, Function Compute akan memanggilnya ketika peristiwa siklus hidup terkait terjadi. Panggilan balik yang dapat dikonfigurasikan meliputi: Initializer, PreFreeze, dan PreStop. Untuk informasi lebih lanjut, lihat Siklus Hidup Instance Fungsi.

Aturan penagihan untuk panggilan balik siklus hidup sama dengan aturan penagihan untuk pemanggilan umum. Namun, log eksekusi hanya tersedia di Function Logs, Instance Logs, atau Advanced Logs. Log untuk panggilan balik siklus hidup tidak ditampilkan di Call Request List. Untuk informasi lebih lanjut, lihat Lihat Log Panggilan Balik Siklus Hidup Instance.

Tanda tangan metode

  • Panggilan Balik Initializer

    Panggilan balik Initializer dieksekusi setelah instance fungsi dimulai dan sebelum handler dijalankan. Function Compute memastikan bahwa panggilan balik Initializer berhasil dieksekusi hanya sekali selama siklus hidup instance fungsi. Jika gagal, kesalahan akan dikembalikan untuk pemanggilan fungsi. Saat fungsi dipanggil kembali, sistem membuat instance baru untuk mengeksekusi panggilan balik Initializer.

  • Panggilan Balik PreFreeze

    Panggilan balik PreFreeze dieksekusi sebelum instance fungsi dibekukan.

  • Panggilan Balik PreStop

    Panggilan balik PreStop dieksekusi sebelum instance fungsi dihapus.

Tanda tangan metode untuk panggilan balik Initializer, PreFreeze, dan PreStop sama dalam lingkungan runtime C#. Tanda tangannya hanya berisi parameter input Context tanpa parameter respons. Contoh kode:

public void FunctionName(IFcContext context);

Anda juga dapat mengatur metode panggilan balik sebagai metode statis. Contoh kode:

public static void FunctionName(IFcContext context);

Contoh: StreamRequestHandler

Kode contoh berikut menunjukkan program sederhana yang mencakup panggilan balik Initializer, PreFreeze, dan PreStop:

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 void PreFreeze(IFcContext context)
        {
            IFcLogger logger = context.Logger;
            logger.LogInformation("PreFreeze start");
            logger.LogInformation("Handle PreFreeze: {0}", context.RequestId);
            logger.LogInformation("PreFreeze 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){}
    }
}

Konfigurasi panggilan balik siklus hidup

Menggunakan konsol Function Compute

Anda dapat mengonfigurasi panggilan balik siklus hidup di halaman Detail Fungsi pada Function Compute console. Untuk informasi lebih lanjut, lihat Siklus Hidup Instance Fungsi. Format metode panggilan balik sama dengan format handler permintaan, yaitu Nama Assembly::Namespace.Nama Kelas::Nama Metode. Untuk informasi lebih lanjut, lihat Handler.

Berikut adalah contoh format untuk berbagai jenis panggilan balik:

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

  • Panggilan Balik PreFreeze: HelloFcApp::Example.Hello::PreFreeze

  • Panggilan Balik PreStop: HelloFcApp::Example.Hello::PreStop

Menggunakan Serverless Devs

Jika menggunakan Serverless Devs untuk mengonfigurasi panggilan balik siklus hidup, tambahkan panggilan balik Initializer, PreFreeze, dan PreStop ke file s.yaml.

  • Konfigurasi Panggilan Balik Initializer

    Tambahkan bidang initializer dan initializationTimeout ke parameter function.

  • Konfigurasi Panggilan Balik PreFreeze

    Tambahkan bidang instanceLifecycleConfig.preFreeze, termasuk handler dan timeout, ke parameter function.

  • Konfigurasi Panggilan Balik PreStop

    Tambahkan bidang instanceLifecycleConfig.preStop, termasuk handler dan timeout, ke parameter function.

Contoh kode:

edition: 1.0.0
name: hello-world  #  Nama proyek.
access: default    #  Alias kunci.

vars: # Variabel global.
  region: cn-shanghai # ID wilayah.
  service:
    name: fc-example
    description: 'contoh fc oleh serverless devs'

services:
  helloworld: # Nama layanan atau modul.
    component: fc
    actions: # Logika eksekusi kustom.
      pre-deploy: # Operasi sebelum penyebaran.
        - run: mvn package # Perintah untuk dijalankan.
          path: ./ # Jalur tempat perintah dijalankan.
    props: # Nilai properti komponen.
      region: ${vars.region}
      service: ${vars.service}
      function:
        name: dotnet-lifecycle-hook-demo
        description: 'contoh fc oleh serverless devs'
        runtime: dotnetcore3.1
        codeUri: ./target
        handler: example.App::handleRequest
        memorySize: 128
        timeout: 60
        initializer: HelloFcApp::Example.Hello::Initialize
        initializationTimeout: 30
        instanceLifecycleConfig:
          preStop:
            Handler: HelloFcApp::Example.Hello::PreStop
            Timeout: 30
          preFreeze:
            Handler: HelloFcApp::Example.Hello::PreFreeze
            Timeout: 30

Untuk informasi tentang sintaks YAML Serverless Devs, lihat Perintah Serverless Devs.

Lihat log panggilan balik siklus hidup instance.

Anda dapat melihat log untuk panggilan balik siklus hidup di Function Logs.

  1. Masuk ke konsol Function Compute. Di panel navigasi kiri, klik Services & Functions.

  2. Di bilah navigasi atas, pilih wilayah. Pada halaman Services, klik layanan yang diinginkan.

  3. Pada halaman Functions, klik nama fungsi yang diinginkan. Pada halaman Detail Fungsi yang muncul, klik tab Test Function.

  4. Pada tab Test Function, klik Test Function. Pilih Logs > Function Logs.

    Pada tab Function Logs, Anda dapat melihat log pemanggilan serta log untuk panggilan balik Initializer dan PreFreeze dari fungsi. Contoh:

    2022-10-09 19:26:17 FunctionCompute dotnetcore3.1 runtime inited.
    2022-10-09 19:26:17 FC Initialize Start RequestId: 793ad2f1-9826-4d9a-90d9-5bf39e******
    2022-10-09 19:26:17 2022-10-09 19:26:17 793ad2f1-9826-4d9a-90d9-5bf39e****** [INFO] Initialize start
    2022-10-09 19:26:17 2022-10-09 19:26:17 793ad2f1-9826-4d9a-90d9-5bf39e****** [INFO] Handle initializer: 793ad2f1-9826-4d9a-90d9-5bf39e******
    2022-10-09 19:26:17 2022-10-09 19:26:17 793ad2f1-9826-4d9a-90d9-5bf39e****** [INFO] Initialize end
    2022-10-09 19:26:17 FC Initialize End RequestId: 793ad2f1-9826-4d9a-90d9-5bf39e******
    2022-10-09 19:26:17 FC Invoke Start RequestId: 793ad2f1-9826-4d9a-90d9-5bf39e******
    2022-10-09 19:26:17 2022-10-09 19:26:17 793ad2f1-9826-4d9a-90d9-5bf39e****** [INFO] Handle request: 793ad2f1-9826-4d9a-90d9-5bf39e******
    2022-10-09 19:26:17 FC Invoke End RequestId: 793ad2f1-9826-4d9a-90d9-5bf39e******
    2022-10-09 19:26:17 FC PreFreeze Start RequestId: 793ad2f1-9826-4d9a-90d9-5bf39e******
    2022-10-09 19:26:17 2022-10-09 19:26:17 793ad2f1-9826-4d9a-90d9-5bf39e****** [INFO] PreFreeze start
    2022-10-09 19:26:17 2022-10-09 19:26:17 793ad2f1-9826-4d9a-90d9-5bf39e****** [INFO] Handle PreFreeze: 793ad2f1-9826-4d9a-90d9-5bf39e******
    2022-10-09 19:26:17 2022-10-09 19:26:17 793ad2f1-9826-4d9a-90d9-5bf39e****** [INFO] PreFreeze end
    2022-10-09 19:26:17 FC PreFreeze End RequestId: 793ad2f1-9826-4d9a-90d9-5bf39e******

    Setiap instance fungsi disimpan dalam cache selama periode tertentu dan tidak langsung dihapus, sehingga Anda tidak dapat langsung melihat log untuk panggilan balik PreStop. Untuk segera memicu panggilan balik PreStop, Anda dapat memperbarui konfigurasi atau kode fungsi. Setelah pembaruan selesai, Anda dapat melihat log untuk panggilan balik PreStop di Function Logs. Contoh:

    2022-10-09 19:32:17 FC PreStop Start RequestId: 03be685c-378b-4736-8b08-a67c1d*****
    2022-10-09 19:32:17 2022-10-09 19:32:17 03be685c-378b-4736-8b08-a67c1d***** [INFO] PreStop start
    2022-10-09 19:32:17 2022-10-09 19:32:17 03be685c-378b-4736-8b08-a67c1d***** [INFO] Handle PreStop: 03be685c-378b-4736-8b08-a67c1d*****
    2022-10-09 19:32:17 2022-10-09 19:32:17 03be685c-378b-4736-8b08-a67c1d***** [INFO] PreStop end
    2022-10-09 19:32:17 FC PreStop End RequestId: 03be685c-378b-4736-8b08-a67c1d*****