全部产品
Search
文档中心

Function Compute:Kait siklus hidup untuk instans fungsi

更新时间:Nov 11, 2025

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.

Catatan

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 parameter context untuk handler.

  • Bidang context yaitu initializer dan initializationTimeout dirancang 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 Configuration > Instance Settings 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 metode initialize dalam file index.php.

  • Jika Anda mengatur PreStop Hook menjadi index.preStop, ini menunjukkan metode preStop dalam file index.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.

  1. Masuk ke Konsol Function Compute. Di panel navigasi sebelah 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 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.