全部产品
Search
文档中心

Function Compute:Panggilan balik siklus hidup untuk instance fungsi

更新时间:Dec 18, 2025

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

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 permintaan pemanggilan umum. Namun, log eksekusi hanya tersedia di Function Logs, Instance Logs, atau Advanced Logs. Log panggilan balik tidak ditampilkan di Call Request List. Untuk informasi lebih lanjut, lihat Lihat Log Panggilan Balik Siklus Hidup Instance.

Penting Jika ingin menggunakan panggilan balik PreFreeze dan PreStop, tingkatkan fc-runtime-go-sdk ke versi v0.1.0 atau yang lebih baru.

Tanda tangan metode panggilan balik

  • Panggilan balik Initializer dieksekusi setelah instance fungsi dimulai dan sebelum handler dijalankan. Function Compute memastikan bahwa panggilan balik Initializer dipanggil hanya sekali selama siklus hidup instance. Jika gagal, sistem akan mencoba kembali hingga berhasil, kemudian menjalankan handler. Pastikan konfigurasi panggilan balik Initializer benar agar dapat dipanggil berulang kali tanpa masalah.
  • Panggilan balik PreFreeze dieksekusi sebelum instance fungsi dibekukan.
  • Panggilan balik PreStop dieksekusi sebelum instance fungsi dihapus.
Tanda tangan metode untuk panggilan balik Initializer, PreFreeze, dan PreStop adalah sama, yaitu hanya berisi parameter input Context tanpa parameter respons. Sintaks:
function(ctx context.Context)

Mengimplementasikan metode panggilan balik

Anda harus mengimplementasikan metode panggilan balik siklus hidup dalam kode dan mendaftarkannya menggunakan fungsi terkait. Contoh berikut menunjukkan cara mendaftarkan metode panggilan balik:
// Daftarkan metode panggilan balik Initializer.
fc.RegisterInitializerFunction(initialize)
// Daftarkan metode panggilan balik PreStop.
fc.RegisterPreStopFunction(preStop)
// Daftarkan metode panggilan balik PreFreeze.
fc.RegisterPreFreezeFunction(preFreeze)
Program contoh:
package main

import (
    "context"
    "log"

    "github.com/aliyun/fc-runtime-go-sdk/fc"
    "github.com/aliyun/fc-runtime-go-sdk/fccontext"
)

func HandleRequest(ctx context.Context) (string, error) {
    return "hello world!", nil
}

func preStop(ctx context.Context) {
    log.Print("ini adalah handler preStop")
    fctx, _ := fccontext.FromContext(ctx)
    fctx.GetLogger().Infof("konteks: %#v\n", fctx)
}

func preFreeze(ctx context.Context) {
    log.Print("ini adalah handler preFreeze")
    fctx, _ := fccontext.FromContext(ctx)
    fctx.GetLogger().Infof("konteks: %#v\n", fctx)
}

func initialize(ctx context.Context) {
    log.Print("ini adalah handler initialize")
    fctx, _ := fccontext.FromContext(ctx)
    fctx.GetLogger().Infof("konteks: %#v\n", fctx)
}

func main() {
    fc.RegisterInitializerFunction(initialize)
    fc.RegisterPreStopFunction(preStop)
    fc.RegisterPreFreezeFunction(preFreeze)
    fc.Start(HandleRequest)
}                
Deskripsi
  • func initialize(ctx context.Context): metode panggilan balik Initializer. Parameter ctx context.Context menyediakan informasi konteks saat fungsi dijalankan. Untuk informasi lebih lanjut, lihat Konteks.
  • func preStop(ctx context.Context): metode panggilan balik PreStop. Parameter ctx context.Context menyediakan informasi konteks saat fungsi dijalankan. Untuk informasi lebih lanjut, lihat Konteks.
  • func preFreeze(ctx context.Context): metode panggilan balik PreFreeze. Parameter ctx context.Context menyediakan informasi konteks saat fungsi dijalankan. Untuk informasi lebih lanjut, lihat Konteks.
  • func main(): titik masuk untuk kode fungsi di Function Compute. Program Go harus berisi fungsi main. Anda dapat menambahkan fc.Start(HandleRequest) untuk menentukan metode handler dan fc.RegisterInitializerFunction(initialize) untuk mendaftarkan metode panggilan balik Initializer. Daftarkan metode panggilan balik PreStop dan PreFreeze dengan cara serupa.
    Penting
    • Contoh di atas hanya berlaku untuk handler acara. Jika menggunakan handler HTTP, ganti fc.Start(HandleRequest) dengan fc.StartHttp(HandleRequest).
    • Metode panggilan balik siklus hidup harus didaftarkan sebelum fc.Start(HandleRequest) atau fc.StartHttp(HandleRequest). Jika tidak, pendaftaran akan gagal.

Konfigurasi panggilan balik siklus hidup

Use the Function Compute console

Anda dapat mengonfigurasi parameter Initializer Hook, PreFreeze Hook, dan PreStop Hook pada halaman Detail Fungsi di Function Compute console.Function Compute Contoh:

db-go-lifecycle

Untuk informasi lebih lanjut, lihat Siklus Hidup Instance Fungsi.

Use Serverless Devs

Gunakan Serverless Devs

Anda dapat menggunakan Serverless Devs untuk mengonfigurasi panggilan balik siklus hidup. Dalam hal ini, tambahkan Initializer hook, PreFreeze hook, dan PreStop hook ke file s.yaml.
  • Konfigurasikan Panggilan Balik Initializer

    Tambahkan bidang initializer dan initializationTimeout ke parameter fungsi.

  • Konfigurasikan Panggilan Balik PreFreeze

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

  • Konfigurasikan Panggilan Balik PreStop

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

Penting Bidang handler harus dikonfigurasi sebagai string non-kosong. Saat menggunakan nilai default "true" dalam file s.yaml, tanda kutip ganda tidak boleh dihapus.

Kode contoh:

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
    props: # Nilai properti komponen.
      region: ${vars.region}
      service: ${vars.service}
      function:
        name: golang-lifecycle-hook-demo
        description: 'contoh fc oleh serverless devs'
        runtime: go1
        codeUri: ./target
        handler: main
        memorySize: 128
        timeout: 60
        initializationTimeout: 60
        initializer: "true"
        instanceLifecycleConfig:
          preFreeze:
            handler: "true"
            timeout: 30
          preStop:
            handler: "true"
            timeout: 30

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

Lihat log panggilan balik siklus hidup instance.

Anda dapat melihat log 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 melihat log untuk panggilan balik PreStop segera. Untuk memicu panggilan balik PreStop dengan cepat, 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*****

Program contoh

Function Compute menyediakan program contoh untuk memanggil panggilan balik Initializer. Program contoh ini menunjukkan cara menggunakan panggilan balik Initializer dalam lingkungan runtime Go untuk menginisialisasi kumpulan koneksi MySQL. Dalam program contoh, database MySQL dikonfigurasi menggunakan variabel lingkungan fungsi. Untuk informasi lebih lanjut, lihat file s.yaml. Panggilan balik Initializer mendapatkan konfigurasi database berdasarkan variabel lingkungan, membuat kumpulan koneksi MySQL, dan menguji konektivitas.

Untuk informasi lebih lanjut, lihat go-initializer-mysql.