Topik ini menjelaskan cara mengimplementasikan panggilan balik siklus hidup untuk instance fungsi dalam lingkungan runtime PHP.
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 terjadi. Panggilan balik siklus hidup yang dapat dikonfigurasikan meliputi Initializer, PreFreeze, dan PreStop hooks. Dalam lingkungan runtime PHP, Anda dapat mengonfigurasi Initializer dan PreStop hooks. Untuk informasi lebih lanjut, lihat Siklus Hidup Instance Fungsi.
Aturan penagihan untuk panggilan balik siklus hidup instance fungsi sama dengan aturan penagihan untuk permintaan pemanggilan umum. Namun, log eksekusi hanya dapat diperoleh 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
Example
Panggilan balik Initializer dieksekusi setelah instance fungsi dimulai dan sebelum handler dijalankan. Function Compute memastikan bahwa panggilan balik Initializer dipanggil dengan sukses paling banyak sekali dalam siklus hidup instance fungsi. Sebagai contoh, jika panggilan balik Initializer gagal dipanggil, sistem akan mencoba kembali panggilan balik Initializer hingga berhasil dipanggil, kemudian menjalankan handler Anda. Pastikan bahwa panggilan balik Initializer dikonfigurasi dengan benar saat dipanggil berulang kali.
Panggilan balik Initializer memiliki satu parameter input saja, yaitu $context, dan dapat digunakan dengan cara yang sama seperti handler.
Kode sampel berikut memberikan contoh panggilan balik Initializer sederhana:
<?php
function my_initializer($context) {
$logger = $GLOBALS['fcLogger'];
$logger->info("hello world");
}
?> my_initializer 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 main.my_initializer, Function Compute memuat metode my_initializer yang didefinisikan di main.php setelah panggilan balik Initializer dikonfigurasikan.
Method signature
Fungsi initializer memiliki satu parameter input saja, yaitu
context. Informasi dalam parameter ini sama dengan parametercontextyang ditentukan untuk handler.Bidang
initializerdaninitializationTimeoutdalam parametercontextdigunakan untuk panggilan balik Initializer. Saat menggunakan panggilan balik Initializer, atur kedua bidang tersebut ke nilai yang Anda konfigurasikan untuk parameter Initializer Hook dan Initializer Timeout dari fungsi. Jika tidak, nilainya akan kosong dan tidak berlaku.Tidak ada nilai yang dikembalikan.
Panggilan balik PreStop
Panggilan balik PreStop dieksekusi sebelum instance fungsi dihapus. Tanda tangan metode panggilan balik PreStop sama dengan panggilan balik Initializer.
Kode sampel berikut memberikan contoh panggilan balik PreStop:
<?php
$counter = 0;
function preStop($context) {
$GLOBALS['fcLogger']->info("preStop ok");
}
function handler($event, $context) {
global $counter;
$counter += 2;
return $counter;
}
?>Anda dapat menanyakan log panggilan balik PreStop di penyimpanan log yang Anda aktifkan untuk fungsi tersebut. Sebagai contoh, Anda dapat menggunakan pernyataan dalam format berikut untuk menanyakan semua log fungsi. Untuk informasi lebih lanjut, lihat Kueri Log Terkait Panggilan Balik.
<funcName> AND <ServiceName> AND qualifier: <VERSION>Konfigurasikan panggilan balik siklus hidup
Use the Function Compute console
Anda dapat mengonfigurasi Initializer Hook dan PreStop Hook dalam konfigurasi fungsi di Function Compute console. Untuk informasi lebih lanjut, lihat Siklus Hidup Instance Fungsi. Format hook adalah [Nama file.Nama metode]. Contoh:
Jika Anda mengatur Initializer Hook ke
index.initialize, metodeinitializedalam fileindex.phpdigunakan.Jika Anda mengatur PreStop Hook ke
index.preStop, metodepreStopdalam fileindex.phpdigunakan.

Use Serverless Devs
Anda dapat menggunakan Serverless Devs untuk mengonfigurasi panggilan balik siklus hidup. Dalam hal ini, Anda harus menambahkan Initializer Hook dan PreStop Hook ke file s.yaml.
Konfigurasikan panggilan balik Initializer
Tambahkan bidang initializer dan initializationTimeout ke konfigurasi fungsi.
Konfigurasikan panggilan balik PreStop
Tambahkan bidang instanceLifecycleConfig.preStop, termasuk handler dan timeout, ke konfigurasi fungsi.
Kode sampel:
edition: 1.0.0 # Versi sintaks YAML. Versi ini sesuai dengan spesifikasi versi semantik.
name: hello-world-app # Nama proyek.
access: default # Alias kunci.
vars:
region: cn-hangzhou
service:
name: php72-mysql # Nama layanan.
description: 'hello world by serverless devs' # Deskripsi singkat layanan.
services:
helloworld: # Nama layanan atau modul.
component: fc
props:
region: ${vars.region}
service: ${vars.service}
function:
name: php72-mysql # Nama fungsi.
description: 'hello world by serverless devs' # Deskripsi singkat fungsi.
runtime: php7.2 # Lingkungan runtime.
codeUri: ./code # Lokasi kode.
handler: index.handler # Handler fungsi. Format nilainya bervariasi berdasarkan bahasa pemrograman yang Anda gunakan.
memorySize: 128 # Ukuran memori untuk fungsi.
timeout: 60 # Batas waktu untuk eksekusi fungsi.
initializationTimeout: 20 # Batas waktu untuk eksekusi metode Initializer.
initializer: index.initialize # Metode Initializer.
instanceLifecycleConfig: # Fungsi ekstensi.
preStop: # Panggilan balik PreStop.
handler: index.pre_stop # Handler fungsi.
timeout: 20 # Batas waktu.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 dari 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 secara langsung. Untuk memicu cepat panggilan balik PreStop, 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 program sampel pada database MySQL yang menggunakan panggilan balik Initializer dan panggilan balik PreStop. Dalam contoh ini, panggilan balik Initializer digunakan untuk mendapatkan konfigurasi database MySQL dari variabel lingkungan, membuat koneksi database MySQL, dan menguji konektivitas database. Panggilan balik PreStop digunakan untuk menutup koneksi MySQL.
Untuk informasi lebih lanjut, lihat php72-mysql.