Function Compute membekukan instans di antara permintaan alih-alih menghentikannya, yang meningkatkan performa cold-start tetapi melanggar asumsi umum pada aplikasi jangka panjang. Kait PreFreeze dan PreStop menyediakan jendela bagi kode Anda untuk bertindak sebelum setiap peristiwa pembekuan atau penghentian—memungkinkan Anda mengosongkan metrik, menutup koneksi database, dan melaporkan status tanpa menambah latensi penanganan permintaan.
Cara kerja
Function Compute menagih dengan granularitas satu milidetik dan hanya selama eksekusi permintaan. Saat tidak ada permintaan yang sedang berjalan, instans dibekukan alih-alih dihentikan. Pendekatan ini efisien, tetapi menciptakan tiga tantangan migrasi bagi aplikasi yang bergantung pada proses latar belakang jangka panjang:
| Tantangan | Deskripsi |
|---|---|
| Metrik tertunda atau hilang | Pelapor metrik asinkron—seperti Managed Service for OpenTelemetry atau pustaka manajemen performa aplikasi (APM) pihak ketiga—mungkin tidak sempat mengosongkan data sebelum instans dibekukan. Permintaan berikutnya memicu pengosongan, menyebabkan penundaan, atau data dibuang sepenuhnya. |
| Latensi lebih tinggi akibat pengosongan sinkron | Memanggil metode pengosongan setelah setiap permintaan menambah latensi dan meningkatkan beban pada server backend. |
| Tidak ada sinyal shutdown yang mulus | Tanpa notifikasi sebelum instans dihentikan, aplikasi tidak dapat menutup koneksi, menghentikan proses latar belakang, atau melaporkan status secara bersih. |
Kait PreFreeze dan PreStop mengatasi tantangan-tantangan ini dengan memperluas model server HTTP. Function Compute mengirim permintaan HTTP GET ke path yang telah ditentukan pada momen siklus hidup yang tepat, memberikan kesempatan bagi kode Anda untuk bertindak.
PreFreeze
Sebelum membekukan instans, Function Compute mengirim permintaan HTTP GET ke /pre-freeze. Gunakan kait ini untuk mengosongkan metrik atau menyelesaikan pekerjaan yang harus rampung sebelum instans dijeda.
Perilaku utama:
Waktu yang dihabiskan dalam PreFreeze tidak dihitung dalam durasi penagihan InvokeFunction.
Ketika beberapa permintaan dijalankan secara konkuren pada satu instans, PreFreeze dipanggil setelah semua permintaan selesai, sebelum instans dibekukan.
Tidak didukung pada runtime Python, PHP, atau C#.
Runtime Java: memerlukan fc-java-core 1.4.0 atau yang lebih baru. Lihat HTTP handler.
PreStop
Sebelum menghentikan instans, Function Compute mengirim permintaan HTTP GET ke /pre-stop. Gunakan kait ini untuk menutup koneksi database, menghentikan proses latar belakang, serta melaporkan atau memperbarui status.
PreStop didukung di semua runtime.
Batasan
Baik PreFreeze maupun PreStop tidak menerima parameter event sebagai input.
Kedua kait tersebut tidak mengembalikan nilai. Logika pengembalian apa pun yang ditambahkan ke kait tidak memiliki efek.
Ketika fungsi mengembalikan respons, Function Compute segera membekukan instans. Proses asinkron, thread, dan korutin tidak dijamin selesai, dan log yang ditulis secara asinkron mungkin tidak sempat dikosongkan.
Prasyarat
Sebelum memulai, pastikan Anda telah:
Membuat fungsi di Function Compute. Lihat Buat fungsi.
Konfigurasi kait siklus hidup
Penagihan untuk panggilan PreFreeze dan PreStop mengikuti aturan yang sama seperti panggilan InvokeFunction. Lihat Penagihan.
Format kait adalah [nama file].[nama fungsi]. Contohnya, index.preStopHandler merujuk ke fungsi preStopHandler dalam file index.py.
Pilih metode konfigurasi:
Konfigurasi kait di Konsol Function Compute
Kait siklus hidup tidak dapat diatur saat membuat fungsi. Konfigurasikan saat memperbarui fungsi yang sudah ada.
Masuk ke Konsol Function Compute. Di panel navigasi sebelah kiri, klik Services & Functions.
Di bilah navigasi atas, pilih wilayah. Pada halaman Services, klik layanan target.
Di halaman Functions, temukan fungsi tersebut dan klik Configure di kolom Actions.
Di halaman Modify Function Settings, buka bagian Instance Lifecycle Hook. Konfigurasikan handler dan timeout untuk setiap kait, lalu klik Save.

Klik tab Code. Di editor kode, implementasikan fungsi kait. Jika Anda mengatur kait PreStop ke
index.preStopHandler, implementasikan fungsipreStopHandlerdalam kode Anda. Untuk contoh implementasi spesifik runtime, lihat Panduan implementasi runtime.CatatanIDE online mendukung PHP, Python, Node.js, dan runtime kustom. IDE ini tidak mendukung runtime bahasa terkompilasi seperti Java, Go, .NET, atau runtime kontainer kustom.
Klik Deploy, lalu klik Test Function.
Konfigurasi kait menggunakan Serverless Devs
Tambahkan blok instanceLifecycleConfig ke file s.yaml Anda:
codeUri: './code.zip'
......
instanceLifecycleConfig:
preFreeze:
handler: index.PreFreeze
timeout: 60
preStop:
handler: index.PreStop
timeout: 60Untuk menonaktifkan kait, atur handler-nya menjadi string kosong. Jika Anda tidak secara eksplisit mengatur handler menjadi string kosong, fungsi akan mempertahankan konfigurasi kait sebelumnya dan tidak diperbarui secara default. Saat handler kosong, nilai timeout diabaikan.
codeUri: './code.zip'
......
instanceLifecycleConfig:
preFreeze:
handler: ""
timeout: 60
preStop:
handler: index.PreStop
timeout: 60Untuk contoh implementasi spesifik runtime, lihat Panduan implementasi runtime.
Konfigurasi kait menggunakan SDK
Gunakan API CreateFunction untuk mengatur kait saat membuat fungsi.
Buka halaman CreateFunction dan klik Debug untuk membuka portal OpenAPI.
Di tab Parameters, isi informasi fungsi yang diperlukan. Atur handler PreFreeze dan PreStop di bawah
instanceLifecycleConfig.
Klik tab SDK Sample Code untuk mendapatkan contoh kode dalam bahasa pilihan Anda.
Untuk contoh implementasi spesifik runtime, lihat Panduan implementasi runtime.
Panduan implementasi runtime
| Runtime | Panduan implementasi |
|---|---|
| Node.js | Kait siklus hidup untuk instans fungsi |
| Python | Kait siklus hidup untuk instans fungsi |
| PHP | Kait siklus hidup untuk instans fungsi |
| Java | Kait siklus hidup untuk instans fungsi |
| C# | Kait siklus hidup untuk instans fungsi |
| Go | Kait siklus hidup untuk instans fungsi |
| Custom runtime | Kait siklus hidup untuk instans fungsi |
| Custom container | Kait siklus hidup untuk instans fungsi |
Kueri log kait
Setelah mengonfigurasi dan menjalankan kait siklus hidup, kueri log-nya untuk memverifikasi eksekusi.
Masuk ke Konsol Function Compute. Di panel navigasi kiri, klik Services & Functions.
Di bilah navigasi atas, pilih wilayah. Pada halaman Services, klik layanan target.
Di halaman Functions, klik fungsi tersebut dan buka tab Logs.
Di tab Request List, temukan permintaan yang relevan. Salin Instance ID, lalu klik SLS Logs.
Gunakan Instance ID untuk mengkueri log awal dan akhir semua kait siklus hidup. Gabungkan Instance ID dengan nama kait untuk memfilter log kait tertentu—misalnya: c-62833f38-20f1629801fa4bd***** and PreStop.

Untuk melacak permintaan tertentu, gunakan request ID dari entri log Start atau End. Jika log pengguna tidak menyertakan request ID, klik ikon
untuk melihat konteks log di sekitarnya.
Penagihan
| Item penagihan | Ditagih? |
|---|---|
| Waktu eksekusi kait (PreFreeze) | Tidak—waktu yang dihabiskan dalam kait PreFreeze tidak dihitung dalam durasi penagihan InvokeFunction |
| Panggilan kait (PreFreeze dan PreStop) | Ya—ditagih dengan tarif yang sama seperti panggilan InvokeFunction |
Permintaan HTTP ke path kait (/pre-freeze, /pre-stop) | Tidak—permintaan ke path kait tidak dihitung secara terpisah |
Permintaan konkuren: Jika beberapa permintaan dijalankan secara bersamaan pada instans yang sama, PreFreeze dipanggil sekali setelah semua permintaan selesai. Penagihan mencakup jendela eksekusi penuh dari awal permintaan konkuren paling awal hingga akhir PreFreeze.
Contoh: Fungsi dikonfigurasi dengan memori 1 GB. Asumsikan PreFreeze dimulai pada t1 dan permintaan konkuren terakhir (Permintaan 2) selesai pada t6, dengan rentang total 1 detik. Waktu eksekusi = t6 - t1 = 1 dtk. Sumber daya yang dikonsumsi = 1 dtk × 1 GB = 1 CU.
Untuk rincian lengkap aturan penagihan, lihat Ikhtisar penagihan.