Topik ini menjelaskan cara mengonfigurasi panggilan balik siklus hidup untuk instance fungsi dalam lingkungan runtime Node.js.
Informasi latar belakang
Setelah Anda mengonfigurasi panggilan balik siklus hidup untuk sebuah instance fungsi, Function Compute akan memanggil panggilan balik tersebut ketika peristiwa siklus hidup terkait untuk instance tersebut terjadi. Panggilan balik siklus hidup berikut dapat dikonfigurasi untuk lingkungan runtime Node.js: Initializer, PreFreeze, dan PreStop. Untuk informasi lebih lanjut, lihat Siklus Hidup Instance Fungsi.
Aturan penagihan untuk panggilan balik siklus hidup instance fungsi sama dengan aturan penagihan untuk permintaan pemanggilan umum. Namun, log eksekusi hanya tersedia di Function Logs, Instance Logs, dan Advanced Logs. Log untuk panggilan balik siklus hidup tidak ditampilkan di Call Request List. Untuk informasi lebih lanjut, lihat Lihat Log Instance Siklus Hidup.
Panggilan balik Initializer
Panggilan balik Initializer dieksekusi setelah instance fungsi dimulai dan sebelum handler dijalankan. Function Compute memastikan bahwa panggilan balik Initializer berhasil dieksekusi paling banyak sekali dalam siklus hidup instance fungsi. Sebagai contoh, jika panggilan balik Initializer gagal dieksekusi, sistem akan mencoba kembali hingga berhasil, kemudian menjalankan handler Anda.
Panggilan balik Initializer memiliki parameter input context dan dapat digunakan dengan cara yang sama seperti handler.
Kode sampel berikut menunjukkan contoh panggilan balik Initializer sederhana:
exports.initialize = function(context, callback) {
console.log('initializer');
callback(null, "");
};initialize adalah nama metode dari panggilan balik Initializer. Nama tersebut harus sesuai dengan nilai parameter Initializer Hook yang Anda konfigurasikan di Function Compute console. Sebagai contoh, jika nilai parameter Initializer Hook untuk fungsi tersebut adalah index.initialize, Function Compute akan memuat metode initialize yang didefinisikan di index.js setelah panggilan balik Initializer dikonfigurasikan.
Tanda tangan metode
- Parameter input
contextmenentukan konteks runtime yang disediakan saat fungsi Function Compute dipanggil. - Tidak ada nilai yang dikembalikan.
Panggilan balik PreFreeze
Panggilan balik PreFreeze dieksekusi sebelum instance fungsi dibekukan. Tanda tangan metode panggilan balik PreFreeze sama dengan tanda tangan metode panggilan balik Initializer.
Kode sampel berikut menunjukkan contoh panggilan balik PreFreeze sederhana:
module.exports.preFreeze = function(context, callback) {
console.log('preFreeze');
callback(null, "");
};Panggilan balik PreStop
Panggilan balik PreStop dieksekusi sebelum instance fungsi dihapus. Tanda tangan metode panggilan balik PreStop sama dengan tanda tangan metode panggilan balik Initializer.
Kode sampel berikut menunjukkan contoh panggilan balik PreStop sederhana:
module.exports.preStop = function(context, callback){
console.log('preStop');
callback(null, "");
}Konfigurasikan panggilan balik siklus hidup
Menggunakan Konsol Function Compute
[Nama file.Nama metode].- Jika Anda mengatur Initializer Hook ke
index.initialize, metodeinitializedi fileindex.jsdigunakan. - Jika Anda mengatur PreFreeze Hook ke
index.preFreeze, metodepreFreezedi fileindex.jsdigunakan. - Jika Anda mengatur PreStop Hook ke
index.preStop, metodepreStopdi fileindex.jsdigunakan.

Menggunakan Serverless Devs
s.yaml.- Konfigurasikan panggilan balik Initializer
Tambahkan bidang initializer dan initializationTimeout ke parameter function.
- Konfigurasikan panggilan balik PreFreeze
Tambahkan bidang instanceLifecycleConfig.preFreeze, termasuk handler dan timeout, ke parameter function.
- Konfigurasikan panggilan balik PreStop
Tambahkan bidang instanceLifecycleConfig.preStop, termasuk handler dan timeout ke parameter function.
Kode sampel:
edition: 1.0.0 # Versi sintaks YAML. Versi tersebut sesuai dengan spesifikasi versi semantik.
name: hello-world # Nama proyek.
access: default # Alias kunci.
services:
fc-deploy-test: # Nama modul.
component: devsapp/fc # Nama komponen.
props: # Nilai properti komponen.
region: cn-hangzhou # ID wilayah.
service: # Konfigurasi layanan.
name: fc-deploy-service # Nama layanan.
description: dem component # Deskripsi singkat layanan.
function: # Konfigurasi fungsi.
name: fc-base-service # Nama fungsi.
description: 'ini adalah tes' # Deskripsi singkat fungsi.
codeUri: './code' # Direktori tempat kode berada.
handler: 'index.handler' # Handler fungsi. Formatnya bervariasi berdasarkan bahasa pemrograman.
memorySize: 128 # Ukuran memori fungsi.
runtime: nodejs14 # Lingkungan runtime.
timeout: 60 # Batas waktu untuk eksekusi fungsi.
initializationTimeout: 20 # Batas waktu untuk eksekusi metode Initializer.
initializer: index.initialize # Metode Initializer.
instanceLifecycleConfig: # Fungsi ekstensi.
preFreeze: # Fungsi PreFreeze.
handler: index.preFreeze # Handler.
timeout: 60 # Batas waktu.
preStop: # Fungsi PreStop.
handler: index.preStop # Handler.
timeout: 60 # Batas waktu.Untuk informasi lebih lanjut tentang sintaks YAML Serverless Devs, lihat Perintah Serverless Devs.
Lihat log instance siklus hidup.
Anda dapat melihat log untuk 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 tersebut. 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 selama periode tertentu dan tidak langsung dihapus, sehingga Anda tidak dapat melihat log untuk panggilan balik PreStop secara langsung. Untuk memicu panggilan balik PreStop dengan cepat, Anda dapat memperbarui konfigurasi fungsi 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 sampel
Function Compute menyediakan program sampel pada database MySQL yang menggunakan panggilan balik Initializer dan panggilan balik PreStop. Dalam contoh ini, panggilan balik Initializer digunakan untuk mendapatkan konfigurasi database MySQL dari variabel lingkungan, membuat koneksi database MySQL, dan menguji konektivitas. Panggilan balik PreStop digunakan untuk menutup koneksi MySQL.
Untuk informasi lebih lanjut, lihat nodejs14-mysql.