Topik ini menjelaskan cara mengimplementasikan dan menggunakan metode kait siklus hidup instans dalam PHP.
Informasi latar belakang
Saat Anda mengimplementasikan dan mengonfigurasi kait siklus hidup instans, Function Compute memanggil kait yang sesuai ketika suatu event siklus hidup terjadi. Runtime PHP mendukung kait siklus hidup instans Initializer dan PreStop. Untuk informasi selengkapnya, lihat Konfigurasikan siklus hidup instans.
Penghitungan biaya untuk kait siklus hidup instans sama seperti pemanggilan fungsi biasa. Namun, log eksekusinya hanya muncul di Real-time Logs, Function Logs, atau Advanced Logs. Invocation Request List tidak menampilkan log untuk kait. Untuk informasi selengkapnya, lihat Lihat log kait siklus hidup instans.
Kait Initializer
Initializer Example
Kait Initializer dijalankan setelah instans fungsi dimulai dan sebelum penanganan dijalankan. Function Compute memastikan bahwa kait Initializer dijalankan dengan sukses hanya sekali selama siklus hidup sebuah instans. Jika kait Initializer gagal dijalankan, pemanggilan fungsi akan gagal. Pada pemanggilan berikutnya, Function Compute membuat instans baru untuk menjalankan kait initializer.
Ketika kait initializer mengalami timeout atau gagal, server selalu mengembalikan kode status HTTP 200. Untuk menentukan apakah kegagalan inisialisasi menyebabkan kesalahan tersebut, periksa header respons X-Fc-Error-Type:InitializationError atau bidang errorMessage dalam badan respons.
Kait Initializer hanya memiliki satu parameter masukan, $context, yang digunakan dengan cara yang sama seperti handler.
Kode berikut menunjukkan contoh sederhana kait Initializer.
<?php
function my_initializer($context) {
$logger = $GLOBALS['fcLogger'];
$logger->info("hello world");
}
?> my_initializer adalah nama metode callback Initializer, yang harus sesuai dengan Initializer Hook yang Anda konfigurasi di Konsol Function Compute. Misalnya, jika Anda mengatur Initializer Hook untuk fungsi Anda menjadi main.my_initializer, Function Compute memuat metode my_initializer yang didefinisikan dalam file main.php setelah properti Initializer dikonfigurasi.
Method Signature
Satu-satunya parameter masukan adalah
context. Informasi dalam parameter ini sama dengan parametercontextuntuk handler.Bidang
contextyaituinitializerdaninitializationTimeoutdirancang khusus untuk kait Initializer. Jika Anda menggunakan kait Initializer, bidang-bidang ini diatur ke nilai Initializer Hook dan Initializer Hook Timeout yang Anda konfigurasi untuk fungsi Anda. Jika tidak, bidang-bidang tersebut kosong dan kait tidak berlaku.Tidak ada nilai yang dikembalikan.
Kait PreStop
Kait PreStop dijalankan sebelum instans fungsi dihapus. Tanda tangan metodenya sama dengan kait Initializer.
Kode berikut menunjukkan contoh kait PreStop.
<?php
$counter = 0;
function preStop($context) {
$GLOBALS['fcLogger']->info("preStop ok");
}
function handler($event, $context) {
global $counter;
$counter += 2;
return $counter;
}
?>Anda dapat mengkueri log untuk kait PreStop di penyimpanan log yang Anda aktifkan untuk fungsi tersebut. Misalnya, Anda dapat menggunakan pernyataan dalam format berikut untuk mengkueri semua log untuk fungsi tersebut. Untuk informasi selengkapnya, lihat Kueri log terkait kait.
<funcName> AND <ServiceName> AND qualifier: <VERSION>Konfigurasikan kait siklus hidup
Configure Using The Console
Di Konsol Function Compute, navigasi ke tab untuk fungsi FC Anda untuk mengonfigurasi Initializer Hook dan PreStop Hook. Untuk informasi selengkapnya, lihat Konfigurasikan siklus hidup instans. Format untuk kait adalah [Nama file.Nama metode]. Berikut adalah beberapa contohnya:
Jika Anda mengatur Initializer Hook menjadi
index.initialize, ini menunjukkan metodeinitializedalam fileindex.php.Jika Anda mengatur PreStop Hook menjadi
index.preStop, ini menunjukkan metodepreStopdalam fileindex.php.
Use Serverless Devs
Jika Anda menggunakan Serverless Devs, tambahkan konfigurasi Initializer Hook dan PreStop Hook ke file s.yaml.
Kait Initializer:
Tambahkan bidang instanceLifecycleConfig.initializer di bawah konfigurasi function. Bidang ini mencakup properti handler dan timeout.
Kait PreStop:
Tambahkan bidang instanceLifecycleConfig.preStop di bawah konfigurasi function. Bidang ini mencakup properti handler dan timeout.
Kode berikut menunjukkan contohnya.
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 lebih lanjut 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: "testphp"
description: 'ini adalah pengujian'
runtime: "php7.2"
code: ./
handler: index.handler
memorySize: 128
timeout: 30
instanceLifecycleConfig: # Fungsi ekstensi
initializer: # Kait Initializer
handler: index.my_initializer
timeout: 60
preStop: # Kait PreStop
handler: index.preStop # Handler
timeout: 60 # Periode timeout
Untuk informasi selengkapnya tentang sintaks 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. 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:
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 mengambil konfigurasi database MySQL dari variabel lingkungan, membuat koneksi ke database MySQL, lalu menguji konektivitasnya. Kait PreStop menutup koneksi MySQL. Untuk informasi selengkapnya, lihat php72-mysql.