Setelah Anda mengimplementasikan dan mengonfigurasi instance lifecycle hooks, Function Compute memanggil hook yang sesuai ketika terjadi event siklus hidup instans terkait. Waktu proses Node.js saat ini mendukung kait siklus hidup instans Initializer dan PreStop.
Catatan penggunaan
Instance lifecycle hooks ditagih dengan cara yang sama seperti permintaan pemanggilan standar. Namun, log eksekusinya hanya dapat dilihat di Real-time Logs, Function Logs atau Advanced Logs. Log hook tidak ditampilkan di Invocation Request List. Untuk informasi selengkapnya, lihat Lihat log instance lifecycle hook.
Hook Initializer
Hook initializer dijalankan setelah instans fungsi dimulai tetapi sebelum penanganan permintaan dijalankan. Function Compute memastikan bahwa hook Initializer berhasil dieksekusi hanya sekali selama masa pakai instans. Jika hook Initializer gagal pada eksekusi pertamanya, pemanggilan fungsi juga gagal. Untuk pemanggilan berikutnya, instans fungsi baru dibuat untuk mengeksekusi hook initializer.
Ketika hook Initializer mengalami timeout atau gagal, server mengembalikan kode status HTTP 200. Untuk menentukan apakah kesalahan disebabkan oleh kegagalan inisialisasi, Anda harus memeriksa header respons X-Fc-Error-Type:InitializationError atau bidang `errorMessage` dalam badan respons.
Hook Initializer hanya memiliki satu parameter input context. Kode contoh berikut menunjukkan hook Initializer sederhana.
Modul ES
Contoh ini hanya mendukung waktu proses Node.js 18 dan versi yang lebih baru.
export const initialize = async (context) => {
console.log('initializer');
return "";
}
Modul CommonJS
exports.initialize = function(context, callback) {
console.log('initializer');
callback(null, "");
}; initialize adalah nama hook Initializer. Nama ini harus sesuai dengan nilai yang Anda konfigurasikan untuk Initializer Hook di Konsol Function Compute. Misalnya, jika Anda mengatur Initializer Hook untuk suatu fungsi menjadi index.initialize, Function Compute memuat metode initialize dari file index.js.
Tanda tangan metode
Satu-satunya parameter input adalah
context, yang menyediakan konteks waktu proses bagi fungsi FC Anda selama pemanggilan.Hook tidak mengembalikan nilai apa pun. Anda harus memanggil `return` atau `callback` dalam kode Anda untuk mengakhiri eksekusi fungsi.
Hook PreStop
Hook PreStop dijalankan sebelum instans fungsi dihapus. Tanda tangan metodenya sama dengan hook Initializer.
Kode contoh berikut memberikan contoh hook PreStop sederhana.
Modul ES
Contoh ini hanya mendukung waktu proses Node.js 18 dan versi yang lebih baru.
export const preStop = async (context) => {
console.log('preStop');
return "";
}
Modul CommonJS
module.exports.preStop = function(context, callback){
console.log('preStop');
callback(null, "");
}
Konfigurasi lifecycle hooks
Konfigurasi menggunakan konsol
Di Konsol Function Compute, buka tab dari fungsi FC untuk mengonfigurasi Initializer Hook dan PreStop Hook. Untuk informasi selengkapnya, lihat Konfigurasi siklus hidup instans. Format hook adalah [Nama file.Nama metode]. Contoh:
Atur Initializer Hook menjadi
index.initialize. Ini menentukan metodeinitializedalam fileindex.js.Atur PreStop Hook menjadi
index.preStop, yang menentukan metodepreStopdalam fileindex.js.
Konfigurasi menggunakan alat Serverless Devs
Jika Anda menggunakan alat Serverless Devs, Anda dapat menambahkan Initializer Hook dan PreStop Hook ke file konfigurasi s.yaml.
Konfigurasi hook Initializer
Tambahkan bidang instanceLifecycleConfig.initializer di bawah konfigurasi props. Bidang ini mencakup bidang handler dan timeout.
Konfigurasi hook PreStop
Tambahkan bidang instanceLifecycleConfig.preStop di bawah konfigurasi props. Bidang ini mencakup bidang handler dan timeout.
Berikut ini adalah contoh konfigurasi.
edition: 3.0.0
name: hello-world-app
access: default # Alias kunci.
resources:
hello_world:
component: fc3 # Nama komponen. Serverless Devs sendiri seperti konsol game dan tidak memiliki kemampuan bisnis spesifik. Komponen seperti kartrid game. Anda memasukkan kartrid berbeda ke konsol untuk mendapatkan fitur berbeda. Demikian pula, Anda menggunakan komponen berbeda untuk menerapkan kemampuan bisnis berbeda.
# actions: # Logika eksekusi kustom. Untuk informasi selengkapnya tentang actions, lihat: https://docs.serverless-devs.com/serverless-devs/yaml#%E8%A1%8C%E4%B8%BA%E6%8F%8F%E8%BF%B0actions
props:
region: cn-hangzhou # Untuk informasi selengkapnya tentang cara menggunakan variabel, lihat: https://docs.serverless-devs.com/serverless-devs/yaml#%E5%8F%98%E9%87%8F%E8%B5%8B%E5%80%BC
functionName: nodejs-fc-hooks
description: "Node.js lifecycle hooks by serverless devs"
runtime: nodejs20
code: ./code
handler: index.handler
memorySize: 128
timeout: 30
instanceLifecycleConfig:
preStop:
handler: index.preStop
timeout: 3
initializer:
handler: index.initialize
timeout: 3
internetAccess: true
logConfig: autoUntuk informasi selengkapnya tentang spesifikasi konfigurasi YAML untuk Serverless Devs, lihat Perintah umum Serverless Devs.
Lihat log instance lifecycle hooks
Anda dapat melihat log untuk lifecycle hook di Logs.
Masuk ke Konsol Function Compute. Di panel navigasi sebelah kiri, pilih .
Di bilah navigasi atas, pilih wilayah. Di halaman Functions, klik fungsi yang dituju.
Di halaman detail fungsi, klik tab Test Function, klik Test Function, lalu pilih .
Di tab Logs, Anda dapat melihat log pemanggilan fungsi dan log Initializer. Contoh:
2023-09-06 11:18:10FC Initialize Start RequestId: 1-64f7ef72-64caf1ff0046194d9a26bbd7 2023-09-06 11:18:10load code for handler:index.initialize 2023-09-06 11:18:102023-09-06 11:18:10 1-64f7ef72-64caf1ff0046194d9a26bbd7 [verbose] initializer 2023-09-06 11:18:10FC Initialize End RequestId: 1-64f7ef72-64caf1ff0046194d9a26bbd7 2023-09-06 11:18:10FC Invoke Start RequestId: 1-64f7ef72-64caf1ff0046194d9a26bbd7 2023-09-06 11:18:10load code for handler:index.handler 2023-09-06 11:18:10FC Invoke End RequestId: 1-64f7ef72-64caf1ff0046194d9a26bbd7Setiap instans fungsi di-cache selama periode tertentu dan tidak langsung dihapus, sehingga Anda tidak dapat langsung melihat log hook PreStop. Untuk memicu hook PreStop dengan cepat, Anda dapat memperbarui konfigurasi fungsi atau kode fungsi. Setelah pembaruan selesai, Anda dapat melihat log hook PreStop di Function Logs. Kode contoh berikut menunjukkan contohnya:
2023-09-06 11:08:10FC PreStop Start RequestId: 944bca62-b209-47a1-9e48-2723647bce0a 2023-09-06 11:08:10load code for handler:index.preStop 2023-09-06 11:08:102023-09-06 11:08:10 944bca62-b209-47a1-9e48-2723647bce0a [verbose] preStop 2023-09-06 11:08:10FC PreStop End RequestId: 944bca62-b209-47a1-9e48-2723647bce0a
Program contoh
Function Compute menyediakan program contoh MySQL yang menggunakan hook Initializer dan PreStop. Dalam contoh ini, hook Initializer mengambil konfigurasi database MySQL dari variabel lingkungan, membuat koneksi MySQL, dan menguji konektivitas. Hook PreStop menutup koneksi MySQL.
Untuk informasi selengkapnya, lihat nodejs14-mysql.
Referensi
Untuk informasi selengkapnya tentang instance lifecycle hooks, lihat Konfigurasi siklus hidup instans.