Topik ini menjelaskan cara mengimplementasikan dan menggunakan metode kait siklus hidup instans dalam Python.
Informasi latar belakang
Setelah Anda mengimplementasikan dan mengonfigurasi kait siklus hidup instans, Function Compute memanggil kait tersebut saat event siklus hidup yang sesuai terjadi. Siklus hidup instans mencakup kait Initializer dan PreStop. Untuk informasi selengkapnya, lihat Konfigurasikan siklus hidup instans.
Aturan penagihan untuk kait siklus hidup instans sama dengan pemanggilan fungsi standar. Namun, log eksekusinya hanya dapat dilihat di Real-time Logs, Function Logs, atau Advanced Logs. Log kait siklus hidup tidak ditampilkan di Invocation Request List. Untuk informasi selengkapnya, lihat Lihat log kait siklus hidup instans.
Kait Initializer
Kait Initializer dijalankan setelah instans fungsi dimulai dan sebelum penanganan dijalankan. Function Compute memastikan bahwa kait Initializer dijalankan hanya sekali per siklus hidup instans. Jika kait Initializer gagal pada eksekusi pertamanya, pemanggilan fungsi akan mengembalikan error. Saat Anda memanggil fungsi berikutnya, instans baru dibuat untuk menjalankan kembali kait Initializer.
Jika kait Initializer mengalami timeout atau gagal, server mengembalikan kode status HTTP 200. Untuk memeriksa kegagalan inisialisasi, periksa header respons X-Fc-Error-Type:InitializationError atau bidang errorMessage dalam badan respons.
Kait Initializer hanya memiliki satu parameter masukan, context, dan digunakan dengan cara yang sama seperti handler.
Kode berikut menunjukkan metode Initializer sederhana.
def initialize(context):
print("initialize invoked")initialize adalah nama metode kait Initializer. Nama ini harus sesuai dengan kait Initializer yang Anda konfigurasikan di Konsol Function Compute. Misalnya, jika Anda mengatur kait Initializer untuk suatu fungsi menjadi index.initialize, Function Compute memuat metode initialize dari file index.py.
Tanda tangan metode
Satu-satunya parameter masukan adalah
context. Parameter ini menyediakan konteks waktu proses untuk pemanggilan fungsi FC Anda.Tidak ada nilai yang dikembalikan.
Kait PreStop
Kait PreStop dijalankan sebelum instans fungsi dihapus. Tanda tangan metodenya sama dengan kait Initializer.
Kode berikut menunjukkan metode PreStop sederhana.
def preStop(context):
print("preStop invoked")Konfigurasikan kait siklus hidup
Konfigurasikan kait di konsol
Masuk ke Konsol Function Compute untuk mengonfigurasi Initializer Hook dan PreStop Hook untuk suatu fungsi. Untuk informasi selengkapnya, lihat Konfigurasikan siklus hidup instans.
Format untuk kait adalah [Nama file.Nama metode]. Misalnya, jika Anda mengatur Initializer Hook menjadi index.initialize, metode initialize dari file index.py akan digunakan.
Konfigurasikan kait menggunakan Serverless Devs
Jika Anda menggunakan Serverless Devs, Anda dapat menambahkan konfigurasi kait Initializer dan PreStop ke file s.yaml.
Konfigurasi kait Initializer
Di bawah konfigurasi function, tambahkan bidang instanceLifecycleConfig.initializer. Bidang ini mencakup parameter handler dan timeout.
Konfigurasi kait PreStop
Di bawah konfigurasi function, tambahkan bidang instanceLifecycleConfig.preStop. Bidang ini mencakup parameter handler dan timeout.
Kode berikut memberikan contoh.
edition: 3.0.0
name: fcDeployApp
access: "default"
vars: # Variabel global
region: "cn-hangzhou"
resources:
hello_world:
component: fc3 # Nama komponen
props:
region: ${vars.region} # Untuk informasi 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: "emojipy"
description: 'this is emoji'
runtime: "python3"
code: ./
handler: index.handler
memorySize: 128
timeout: 30
environmentVariables:
PYTHONPATH: /code:/code/python:/opt/python
# initializationTimeout: 20 # Timeout untuk metode inisialisasi
# initializer: index.my_initializer # Metode inisialisasi
instanceLifecycleConfig: # Fungsi ekstensi
preStop: # Fungsi PreStop
handler: index.preStop # Penanganan fungsi
timeout: 60 # Timeout
initializer: # Fungsi Initializer
handler: index.initialize
timeout: 60 Untuk informasi selengkapnya tentang spesifikasi konfigurasi YAML untuk Serverless Devs, lihat Perintah umum Serverless Devs.
Lihat log kait siklus hidup instans
Anda dapat melihat log untuk kait siklus hidup di Logs.
Masuk ke Konsol Function Compute. Di panel navigasi sebelah kiri, pilih .
Di bilah navigasi atas, pilih wilayah. Pada halaman Functions, klik fungsi yang dituju.
Pada halaman detail fungsi, klik tab Test Function, klik Test Function, lalu pilih .
Pada tab Logs, Anda dapat melihat log pemanggilan fungsi dan log Initializer. Contoh:
2024-03-04 17:57:28FC Initialize Start RequestId: 1-65e59b07-1520da26-bf73bbb91b69 2024-03-04 17:57:282024-03-04 09:57:28.192 1-65e59b07-1520da26-bf73bbb91b69 [info] initializer 2024-03-04 17:57:28FC Initialize End RequestId: 1-65e59b07-1520da26-bf73bbb91b69 2024-03-04 17:57:28FC Invoke Start RequestId: 1-65e59b07-1520da26-bf73bbb91b69 2024-03-04 17:57:28FC Invoke End RequestId: 1-65e59b07-1520da26-bf73bbb91b69Setiap instans fungsi di-cache selama periode tertentu dan tidak langsung dihapus, sehingga Anda tidak dapat langsung melihat log untuk kait PreStop. Untuk memicu kait PreStop dengan cepat, Anda dapat memperbarui konfigurasi fungsi atau kode fungsi. Setelah pembaruan selesai, Anda dapat melihat log untuk kait PreStop di Function Logs. Kode contoh berikut menunjukkan contohnya:
2024-03-04 18:33:26FC PreStop Start RequestId: 93c93603-9fbe-4576-9458-193c8b213031 2024-03-04 18:33:262024-03-04 10:33:26.077 93c93603-9fbe-4576-9458-193c8b213031 [info] preStop 2024-03-04 18:33:26FC PreStop End RequestId: 93c93603-9fbe-4576-9458-193c8b213031
Program contoh
Function Compute menyediakan program contoh MySQL yang menggunakan kait Initializer dan PreStop. Dalam contoh ini, kait Initializer mendapatkan konfigurasi database MySQL dari variabel lingkungan, membuat koneksi MySQL, dan menguji konektivitasnya. Kait PreStop menutup koneksi MySQL tersebut.
Untuk informasi selengkapnya, lihat python3-mysql.