All Products
Search
Document Center

Function Compute:Instance lifecycle hooks

Last Updated:Apr 24, 2026

Topik ini menjelaskan cara mengimplementasikan dan menggunakan instance lifecycle hooks dalam runtime PHP.

Latar Belakang

Saat Anda mengimplementasikan dan mengonfigurasi instance lifecycle hook, Function Compute memanggil hook yang sesuai ketika event siklus hidup tertentu terjadi. Runtime PHP mendukung dua instance lifecycle hooks: Initializer dan PreStop. Untuk informasi lebih lanjut, lihat Konfigurasikan instance lifecycles.

Aturan penagihan untuk instance lifecycle hook sama dengan aturan untuk pemanggilan permintaan biasa. Namun, log eksekusinya hanya dapat dikueri di Real-time Logs, Function Logs, atau Advanced Logs. Daftar invocation request list tidak menampilkan log untuk hook-hook ini. Untuk informasi lebih lanjut, lihat Lihat log instance lifecycle hook.

Hook Initializer

Contoh Initializer

Hook Initializer dijalankan setelah instans fungsi dimulai tetapi sebelum penanganannya dieksekusi. Function Compute memastikan bahwa hook Initializer berhasil dieksekusi paling banyak satu kali dalam siklus hidup instans fungsi. Jika hook Initializer gagal pada percobaan pertama, pemanggilan fungsi langsung gagal. Pada pemanggilan berikutnya, instans fungsi baru dibuat dan hook dijalankan kembali.

Catatan

Ketika hook Initializer mengalami timeout atau gagal, server selalu mengembalikan kode status HTTP 200. Anda harus memeriksa header respons X-Fc-Error-Type:InitializationError atau bidang errorMessage dalam badan respons untuk menentukan apakah kesalahan disebabkan oleh kegagalan inisialisasi.

Hook Initializer menerima satu parameter input, $context, yang identik dengan parameter konteks dalam handler.

Berikut adalah contoh minimal hook Initializer.

<?php
function my_initializer($context) {
    $logger = $GLOBALS['fcLogger'];
    $logger->info("hello world");
}
?>            

my_initializer adalah nama metode hook Initializer. Nama ini harus sesuai dengan nilai yang Anda atur untuk Initializer Hook di Konsol Function Compute. Misalnya, jika Anda mengonfigurasi Initializer Hook sebagai main.my_initializer untuk fungsi Anda, Function Compute memuat dan menjalankan metode my_initializer yang didefinisikan dalam file main.php.

Signature metode

  • Hook menerima satu parameter input, context, yang identik dengan objek context pada handler.

  • Bidang initializer dan initializationTimeout dalam objek context dirancang khusus untuk hook Initializer. Jika Anda menggunakan fitur Initializer, bidang-bidang ini diatur ke nilai Initializer Hook dan Initializer Hook Timeout Period yang Anda konfigurasi untuk fungsi tersebut. Jika tidak, bidang-bidang ini kosong dan diabaikan.

  • Hook tidak memiliki nilai kembali.

Hook PreStop

Hook PreStop dijalankan sebelum instans fungsi dihapus. Hook ini memiliki signature metode yang sama dengan hook Initializer.

Berikut adalah contoh hook 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 hook PreStop di Logstore yang dikonfigurasi untuk fungsi Anda. Misalnya, gunakan pernyataan kueri berikut untuk menemukan semua log untuk fungsi tersebut. Untuk informasi lebih lanjut, lihat Kueri log terkait hook.

<funcName> AND <ServiceName> AND qualifier: <VERSION>

Konfigurasi lifecycle hooks

Konfigurasi di konsol

Di Konsol Function Compute, Anda dapat mengonfigurasi Initializer Hook dan PreStop Hook untuk fungsi FC di bagian Configuration > Instance Configuration. Untuk informasi lebih lanjut, lihat Konfigurasikan instance lifecycle. Format callback-nya adalah [file_name.method_name], misalnya:

  • Atur Initializer Hook ke index.initialize untuk memanggil metode initialize dalam file index.php.

  • Atur PreStop Hook ke index.preStop untuk memanggil metode preStop dalam file index.php.

Konfigurasi menggunakan Serverless Devs

Jika Anda menggunakan Serverless Devs, tambahkan konfigurasi untuk Initializer Hook dan PreStop Hook ke file s.yaml Anda.

  • Konfigurasi hook Initializer

    Dalam konfigurasi function, tambahkan bidang instanceLifecycleConfig.initializer, yang mencakup bidang handler dan timeout.

  • Konfigurasi hook PreStop

    Tambahkan bidang instanceLifecycleConfig.preStop, yang berisi bidang handler dan timeout, ke konfigurasi function.

Kode berikut memberikan contoh konfigurasi.

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: 'this is a test'
      runtime: "php7.2"
      code: ./
      handler: index.handler
      memorySize: 128
      timeout: 30
      instanceLifecycleConfig:      # Instance lifecycle hooks
        initializer:                # Initializer hook
          handler: index.my_initializer 
          timeout: 60     
        preStop:                    # PreStop hook
          handler: index.preStop    # Function handler
          timeout: 60               # Timeout
 

Untuk informasi lebih lanjut tentang spesifikasi konfigurasi YAML untuk Serverless Devs, lihat Perintah umum Serverless Devs.

Lihat log instance lifecycle hooks

Anda dapat melihat log untuk lifecycle hook di Logs.

  1. Masuk ke Konsol Function Compute. Di panel navigasi kiri, pilih Function Management > Functions.

  2. Di bilah navigasi atas, pilih wilayah. Di halaman Functions, klik fungsi yang dituju.

  3. Di halaman detail fungsi, klik tab Test Function, klik Test Function, lalu pilih Logs > Function Logs.

    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-bf73bbb91b69

    Setiap instans fungsi di-cache selama periode tertentu dan tidak langsung dihapus, sehingga Anda tidak dapat langsung melihat log untuk hook PreStop. Untuk memicu hook PreStop dengan cepat, Anda dapat memperbarui konfigurasi fungsi atau kode fungsi. Setelah pembaruan selesai, Anda dapat melihat log untuk hook 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 proyek contoh MySQL yang menggunakan hook Initializer dan PreStop. Dalam contoh ini, hook Initializer membaca konfigurasi database MySQL dari variabel lingkungan, membuat koneksi MySQL, dan menguji konektivitasnya. Hook PreStop menutup koneksi MySQL tersebut. Untuk informasi lebih lanjut, lihat php72-mysql.