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.
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.
function(ctx context.Context)Mengimplementasikan 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)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)
} func initialize(ctx context.Context): metode panggilan balik Initializer. Parameterctx context.Contextmenyediakan informasi konteks saat fungsi dijalankan. Untuk informasi lebih lanjut, lihat Konteks.func preStop(ctx context.Context): metode panggilan balik PreStop. Parameterctx context.Contextmenyediakan informasi konteks saat fungsi dijalankan. Untuk informasi lebih lanjut, lihat Konteks.func preFreeze(ctx context.Context): metode panggilan balik PreFreeze. Parameterctx context.Contextmenyediakan 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 menambahkanfc.Start(HandleRequest)untuk menentukan metode handler danfc.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)denganfc.StartHttp(HandleRequest). - Metode panggilan balik siklus hidup harus didaftarkan sebelum
fc.Start(HandleRequest)ataufc.StartHttp(HandleRequest). Jika tidak, pendaftaran akan gagal.
- Contoh di atas hanya berlaku untuk handler acara. Jika menggunakan handler HTTP, ganti
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:

Untuk informasi lebih lanjut, lihat Siklus Hidup Instance Fungsi.
Use Serverless Devs
Gunakan Serverless Devs
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.
"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: 30Untuk 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.
Masuk ke Konsol Function Compute. Di panel navigasi kiri, klik Services & Functions.
Di bilah navigasi atas, pilih wilayah. Pada halaman Services, klik layanan yang diinginkan.
- Pada halaman Functions, klik nama fungsi yang diinginkan. Pada halaman Detail Fungsi yang muncul, klik tab Test Function.
- Pada tab Test Function, klik Test Function. Pilih .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.