全部产品
Search
文档中心

Function Compute:Panggilan balik siklus hidup untuk instance fungsi

更新时间:Dec 12, 2025

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

  • Bidang initializer dan initializationTimeout dalam parameter context digunakan 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, metode initialize dalam file index.php digunakan.

  • Jika Anda mengatur PreStop Hook ke index.preStop, metode preStop dalam file index.php digunakan.

db-php-lifecycle

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.

  1. Masuk ke Konsol Function Compute. Di panel navigasi kiri, klik Services & Functions.

  2. Di bilah navigasi atas, pilih wilayah. Pada halaman Services, klik layanan yang diinginkan.

  3. Pada halaman Functions, klik nama fungsi yang diinginkan. Pada halaman Detail Fungsi yang muncul, klik tab Test Function.

  4. Pada tab Test Function, klik Test Function. Pilih Logs > Function Logs.

    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.