全部产品
Search
文档中心

Function Compute:Kait siklus hidup instans

更新时间:Nov 11, 2025

Topik ini menjelaskan cara mengimplementasikan kait siklus hidup instans dalam Go.

Informasi latar belakang

Setelah Anda mengimplementasikan dan mengonfigurasi kait siklus hidup instans, Function Compute memanggil kait yang sesuai saat suatu event siklus hidup terjadi. Siklus hidup instans mencakup kait Initializer dan PreStop. Untuk informasi selengkapnya, lihat Konfigurasi siklus hidup instans.

Aturan penagihan untuk kait siklus hidup instans sama dengan aturan untuk pemanggilan fungsi biasa. Namun, log eksekusi hanya dapat dilihat di Real-time Logs, Function Logs, atau Advanced Logs. Log kait tidak ditampilkan di Invocation Request List. Untuk informasi selengkapnya, lihat Menampilkan log kait siklus hidup instans.

Penting

Untuk menggunakan kait PreStop, Anda harus meningkatkan fc-runtime-go-sdk ke v0.1.0 atau versi yang lebih baru.

Tanda tangan metode panggilan balik

  • Kait initializer dijalankan setelah instans fungsi dimulai tetapi sebelum penanganan dieksekusi. Function Compute menjamin bahwa kait initializer berhasil dieksekusi hanya sekali dalam siklus hidup sebuah instans. Jika kait initializer gagal pada percobaan pertama, pemanggilan fungsi langsung gagal. Pada pemanggilan berikutnya, instans fungsi baru dibuat untuk menjalankan kait tersebut.

    Catatan

    Jika kait initializer mengalami timeout atau gagal, server mengembalikan kode status HTTP 200. Untuk menentukan apakah kegagalan disebabkan oleh kesalahan inisialisasi, periksa header respons X-Fc-Error-Type:InitializationError atau bidang errorMessage dalam badan respons.

  • Kait PreStop dijalankan sebelum instans fungsi dihapus.

Kait Initializer dan PreStop memiliki tanda tangan metode yang sama. Keduanya menerima parameter input Context dan tidak memiliki nilai kembali. Definisinya adalah sebagai berikut:

function(ctx context.Context)

Mengimplementasikan metode panggilan balik

Anda dapat mengimplementasikan metode panggilan balik siklus hidup dalam kode Anda dan mendaftarkannya menggunakan fungsi yang sesuai. Metode pendaftarannya adalah sebagai berikut:

// Mendaftarkan kait Initializer.
fc.RegisterInitializerFunction(initialize)
// Mendaftarkan kait PreStop.
fc.RegisterPreStopFunction(preStop)

Kode berikut memberikan 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("this is preStop handler")
    fctx, _ := fccontext.FromContext(ctx)
    fctx.GetLogger().Infof("context: %#v\n", fctx)
}

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

func main() {
    fc.RegisterInitializerFunction(initialize)
    fc.RegisterPreStopFunction(preStop)
    fc.Start(HandleRequest)
}                

Daftar berikut menjelaskan kode contoh tersebut:

  • func initialize(ctx context.Context): Kait Initializer. Parameter ctx context.Context menyediakan informasi konteks untuk eksekusi fungsi. Untuk informasi selengkapnya, lihat Context.

  • func preStop(ctx context.Context): Kait PreStop. Parameter ctx context.Context menyediakan informasi konteks untuk eksekusi fungsi. Untuk informasi selengkapnya, lihat Context.

  • func main(): Titik masuk untuk menjalankan kode fungsi FC. Program Go harus menyertakan fungsi main. Tambahkan kode fc.Start(HandleRequest) untuk menetapkan metode eksekusi bagi penanganan. Tambahkan kode fc.RegisterInitializerFunction(initialize) untuk mendaftarkan kait Initializer. Anda dapat mendaftarkan kait PreStop dengan cara yang serupa.

    Penting

    Anda harus mendaftarkan metode panggilan balik siklus hidup sebelum menjalankan fc.Start(HandleRequest) atau fc.StartHttp(HandleRequest). Jika tidak, pendaftaran akan gagal.

Mengonfigurasi kait siklus hidup

Configure In The Console

Di Konsol Function Compute, buka halaman detail fungsi FC. Di bagian Configuration > Instance Configuration, aktifkan Initializer Hook dan PreStop Hook. Untuk informasi selengkapnya, lihat Konfigurasi siklus hidup instans.

Configure Using Serverless Devs

Jika Anda menggunakan Serverless Devs, tambahkan konfigurasi Initializer Hook dan PreStop Hook ke file s.yaml.

  • Konfigurasi kait initializer

    Tambahkan bidang function, initializer, dan initializationTimeout ke konfigurasi fungsi.

  • Konfigurasi kait PreStop

    Tambahkan bidang function dan instanceLifecycleConfig.preStop ke konfigurasi fungsi. Bidang preStop mencakup bidang handler dan timeout.

Penting

Bidang handler memerlukan nilai string yang tidak kosong. Misalnya, jika Anda menetapkan nilainya menjadi true dalam file s.yaml, Anda harus membungkusnya dengan tanda kutip ganda: `"true"`.

Kode berikut memberikan contoh konfigurasi.

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

vars: # Variabel global
  region: cn-hangzhou # Wilayah

resources:
  hello_world:     # Nama layanan/modul
    component: fc3   # Nama komponen
    props:   # Properti komponen
      region: ${vars.region}   # Wilayah
      functionName: "golang-lifecycle-hook-demo"
      description: 'ini adalah siklus hidup golang'
      runtime: "go1"
      code: ./
      handler: main
      memorySize: 128
      timeout: 60
      instanceLifecycleConfig:     # Fungsi ekstensi
        preStop:                          # Fungsi PreStop
          handler: preStop           # Penanganan fungsi
          timeout: 60                   # Timeout
        initializer:
          handler: initialize
          timeout: 60

Untuk informasi selengkapnya tentang spesifikasi konfigurasi YAML untuk Serverless Devs, lihat Perintah umum Serverless Devs.

Menampilkan log kait siklus hidup instans

Anda dapat melihat log untuk kait siklus hidup di Logs.

  1. Masuk ke Konsol Function Compute. Di panel navigasi sebelah kiri, pilih Function Management > Functions.

  2. Di bilah navigasi atas, pilih wilayah. Di halaman Functions, klik fungsi yang dituju.

  3. Di halaman detail fungsi, klik tab Test Function, klik Test Function, lalu pilih Logs > Function Logs.

    Di tab Logs, Anda dapat melihat log pemanggilan fungsi dan log Initializer. Contoh:

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

    Setiap instans fungsi di-cache selama periode tertentu dan tidak langsung dihapus, sehingga Anda tidak dapat langsung melihat log untuk kait PreStop. Untuk memicu kait PreStop dengan cepat, Anda dapat memperbarui konfigurasi fungsi atau kode fungsi. Setelah pembaruan selesai, Anda dapat melihat log untuk kait PreStop di Function Logs. Contoh kode berikut menunjukkan contohnya:

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

Program contoh

Function Compute menyediakan program contoh untuk kait Initializer. Contoh ini menunjukkan cara menggunakan kait Initializer dalam waktu proses Go untuk menginisialisasi kolam koneksi MySQL. Dalam contoh ini, konfigurasi database MySQL disimpan dalam variabel lingkungan fungsi, sebagaimana didefinisikan dalam file s.yaml. Kait Initializer mengambil konfigurasi database dari variabel lingkungan, membuat kolam koneksi MySQL, dan menguji konektivitasnya.

Untuk informasi selengkapnya, lihat go-initializer-mysql.