Topik ini menjelaskan cara mengimplementasikan panggilan balik siklus hidup untuk instance fungsi dalam lingkungan runtime Python.
Informasi latar belakang
Setelah Anda mengonfigurasi panggilan balik siklus hidup untuk instance fungsi, Function Compute memanggil panggilan balik tersebut ketika peristiwa siklus hidup terkait untuk instance tersebut terjadi. Panggilan balik siklus hidup berikut dapat dikonfigurasikan untuk instance fungsi: Initializer, PreFreeze, dan PreStop. Untuk informasi lebih lanjut, lihat Panggilan Balik Siklus Hidup untuk Instance Fungsi.
Aturan penagihan untuk panggilan balik siklus hidup instance fungsi sama dengan aturan penagihan untuk permintaan pemanggilan umum. Namun, log eksekusi hanya dapat diperiksa di Function Logs, Instance Logs, atau Advanced Logs. Log untuk panggilan balik siklus hidup tidak ditampilkan di Call Request List. Untuk informasi lebih lanjut, lihat Lihat Log Panggilan Balik Siklus Hidup Instance.
Panggilan balik Initializer
Panggilan balik Initializer dipanggil setelah instance fungsi dimulai dan sebelum penanganan dijalankan. Function Compute memastikan bahwa panggilan balik Initializer berhasil dipanggil hanya sekali dalam siklus hidup instance fungsi. Jika panggilan balik Initializer gagal dieksekusi, kesalahan akan dikembalikan untuk pemanggilan fungsi. Saat Anda memanggil fungsi lain kali, sistem membuat instance fungsi lain untuk mengeksekusi panggilan balik Initializer.
Panggilan balik Initializer terdiri dari parameter input context dan dapat dipanggil dengan cara yang sama seperti penanganan.
Kode sampel berikut memberikan contoh tentang cara mendefinisikan metode Initializer sederhana:
def initialize(context):
print("initialize invoked")initialize adalah nama metode dari panggilan balik Initializer. Nama tersebut harus sama dengan nilai parameter Initializer Hook yang Anda konfigurasikan di Function Compute console. Sebagai contoh, jika nilai parameter Initializer Hook untuk fungsi adalah index.initialize, Function Compute memuat metode initialize yang didefinisikan di index.py 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 dijalankan sebelum instance fungsi dibekukan. Tanda tangan metode panggilan balik PreFreeze sama dengan tanda tangan metode panggilan balik Initializer.
Kode sampel berikut memberikan contoh panggilan balik PreFreeze sederhana:
def preFreeze(context):
print("preFreeze invoked")Panggilan balik PreStop
Panggilan balik PreStop dijalankan sebelum instance fungsi dihapus. Tanda tangan metode panggilan balik PreStop sama dengan tanda tangan metode panggilan balik Initializer.
Kode sampel berikut memberikan contoh panggilan balik PreStop sederhana:
def preStop(context):
print("preStop invoked")Konfigurasikan panggilan balik siklus hidup
Gunakan Konsol Function Compute
Anda dapat mengonfigurasi parameter Initializer Hook, PreFreeze Hook, dan PreStop Hook pada halaman konfigurasi fungsi di Function Compute console. Untuk informasi lebih lanjut, lihat Siklus Hidup Instance Fungsi.
Format hook adalah [Nama file.Nama metode]. Sebagai contoh, jika Anda mengatur Initializer Hook ke index.initialize, metode initialize di file index.py digunakan.

Gunakan Serverless Devs
s.yaml.- Konfigurasikan panggilan balik Initializer
Tambahkan bidang initializer dan initializationTimeout ke konfigurasi 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 ini sesuai dengan spesifikasi versioning 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' # Lokasi kode.
handler: 'index.handler' # Penanganan fungsi. Format bervariasi berdasarkan bahasa.
memorySize: 128 # Ukuran memori untuk fungsi.
runtime: python3 # Lingkungan runtime.
timeout: 60 # Periode waktu habis untuk eksekusi fungsi.
initializationTimeout: 20 # Periode waktu habis untuk eksekusi metode Initializer.
initializer: index.my_initializer # Metode Initializer.
instanceLifecycleConfig: # Fungsi ekstensi.
preStop: # Panggilan balik PreStop.
handler: index.preStop # Penanganan fungsi.
timeout: 60 # Periode waktu habis.Untuk informasi lebih lanjut tentang sintaks YAML Serverless Devs, lihat Perintah Serverless Devs.
Lihat log panggilan balik siklus hidup instance.
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 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 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 sampel basis data MySQL yang menggunakan panggilan balik Initializer dan panggilan balik PreStop. Dalam contoh ini, panggilan balik Initializer digunakan untuk mendapatkan konfigurasi basis data MySQL dari variabel lingkungan, membuat koneksi basis data MySQL, dan menguji konektivitas. Panggilan balik PreStop digunakan untuk menutup koneksi MySQL.
Untuk informasi lebih lanjut, lihat python3-mysql.