全部产品
Search
文档中心

Function Compute:Panggilan balik siklus hidup untuk instance fungsi

更新时间:Dec 18, 2025

Topik ini menjelaskan cara mengonfigurasi panggilan balik siklus hidup untuk instance fungsi dalam lingkungan runtime Node.js.

Informasi latar belakang

Setelah Anda mengonfigurasi panggilan balik siklus hidup untuk sebuah instance fungsi, Function Compute akan memanggil panggilan balik tersebut ketika peristiwa siklus hidup terkait untuk instance tersebut terjadi. Panggilan balik siklus hidup berikut dapat dikonfigurasi untuk lingkungan runtime Node.js: Initializer, PreFreeze, dan PreStop. 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 tersedia di Function Logs, Instance Logs, dan Advanced Logs. Log untuk panggilan balik siklus hidup tidak ditampilkan di Call Request List. Untuk informasi lebih lanjut, lihat Lihat Log Instance Siklus Hidup.

Panggilan balik Initializer

Panggilan balik Initializer dieksekusi setelah instance fungsi dimulai dan sebelum handler dijalankan. Function Compute memastikan bahwa panggilan balik Initializer berhasil dieksekusi paling banyak sekali dalam siklus hidup instance fungsi. Sebagai contoh, jika panggilan balik Initializer gagal dieksekusi, sistem akan mencoba kembali hingga berhasil, kemudian menjalankan handler Anda.

Panggilan balik Initializer memiliki parameter input context dan dapat digunakan dengan cara yang sama seperti handler.

Kode sampel berikut menunjukkan contoh panggilan balik Initializer sederhana:

exports.initialize = function(context, callback) {
  console.log('initializer');
  callback(null, "");
};

initialize adalah nama metode dari panggilan balik Initializer. Nama tersebut harus sesuai dengan nilai parameter Initializer Hook yang Anda konfigurasikan di Function Compute console. Sebagai contoh, jika nilai parameter Initializer Hook untuk fungsi tersebut adalah index.initialize, Function Compute akan memuat metode initialize yang didefinisikan di index.js setelah panggilan balik Initializer dikonfigurasikan.

Tanda tangan metode

  • Parameter input context menentukan konteks runtime yang disediakan saat fungsi Function Compute dipanggil.
  • Tidak ada nilai yang dikembalikan.

Panggilan balik PreFreeze

Panggilan balik PreFreeze dieksekusi sebelum instance fungsi dibekukan. Tanda tangan metode panggilan balik PreFreeze sama dengan tanda tangan metode panggilan balik Initializer.

Kode sampel berikut menunjukkan contoh panggilan balik PreFreeze sederhana:

module.exports.preFreeze = function(context, callback) {
  console.log('preFreeze');
  callback(null, "");
};

Panggilan balik PreStop

Panggilan balik PreStop dieksekusi sebelum instance fungsi dihapus. Tanda tangan metode panggilan balik PreStop sama dengan tanda tangan metode panggilan balik Initializer.

Kode sampel berikut menunjukkan contoh panggilan balik PreStop sederhana:

module.exports.preStop = function(context, callback){
  console.log('preStop');
  callback(null, "");
}

Konfigurasikan panggilan balik siklus hidup

Menggunakan Konsol Function Compute

Anda dapat mengonfigurasi parameter Initializer Hook, PreFreeze Hook, dan PreStop Hook pada halaman konfigurasi fungsi Function Compute di Function Compute console. Untuk informasi lebih lanjut, lihat Siklus Hidup Instance Fungsi. Format hook adalah [Nama file.Nama metode].
  • Jika Anda mengatur Initializer Hook ke index.initialize, metode initialize di file index.js digunakan.
  • Jika Anda mengatur PreFreeze Hook ke index.preFreeze, metode preFreeze di file index.js digunakan.
  • Jika Anda mengatur PreStop Hook ke index.preStop, metode preStop di file index.js digunakan.
db-node.js-lifecycle

Menggunakan Serverless Devs

Anda dapat menggunakan Serverless Devs untuk mengonfigurasi panggilan balik siklus hidup. Dalam hal ini, Anda harus menambahkan Initializer hook, PreFreeze hook, dan PreStop hook ke file s.yaml.
  • Konfigurasikan panggilan balik Initializer

    Tambahkan bidang initializer dan initializationTimeout ke parameter function.

  • Konfigurasikan panggilan balik PreFreeze

    Tambahkan bidang instanceLifecycleConfig.preFreeze, termasuk handler dan timeout, ke parameter function.

  • Konfigurasikan panggilan balik PreStop

    Tambahkan bidang instanceLifecycleConfig.preStop, termasuk handler dan timeout ke parameter function.

Kode sampel:

edition: 1.0.0          #  Versi sintaks YAML. Versi tersebut sesuai dengan spesifikasi versi semantik.
name: hello-world       #  Nama proyek.
access: default         #  Alias kunci.

services:
  fc-deploy-test: # Nama modul.
    component: devsapp/fc  # Nama komponen.
    props:                 # Nilai properti komponen.
      region: cn-hangzhou   # ID wilayah.
      service:             # Konfigurasi layanan.
        name: fc-deploy-service    # Nama layanan.
        description: dem component # Deskripsi singkat layanan.
      function:                       # Konfigurasi fungsi.
        name: fc-base-service         # Nama fungsi.
        description: 'ini adalah tes'   # Deskripsi singkat fungsi.
        codeUri: './code'             # Direktori tempat kode berada.
        handler: 'index.handler'      # Handler fungsi. Formatnya bervariasi berdasarkan bahasa pemrograman.
        memorySize: 128               # Ukuran memori fungsi.
        runtime: nodejs14             # Lingkungan runtime.
        timeout: 60                   # Batas waktu untuk eksekusi fungsi.
        initializationTimeout: 20     # Batas waktu untuk eksekusi metode Initializer.
        initializer: index.initialize # Metode Initializer.
        instanceLifecycleConfig:      # Fungsi ekstensi.
          preFreeze:              # Fungsi PreFreeze.
            handler: index.preFreeze  # Handler.
            timeout: 60              # Batas waktu.  
          preStop:                    # Fungsi PreStop.
            handler: index.preStop    # Handler.
            timeout: 60               # Batas waktu.

Untuk informasi lebih lanjut tentang sintaks YAML Serverless Devs, lihat Perintah Serverless Devs.

Lihat log instance siklus hidup.

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 tersebut. 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 selama periode tertentu dan tidak langsung dihapus, sehingga Anda tidak dapat melihat log untuk panggilan balik PreStop secara langsung. Untuk memicu panggilan balik PreStop dengan cepat, 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. Panggilan balik PreStop digunakan untuk menutup koneksi MySQL.

Untuk informasi lebih lanjut, lihat nodejs14-mysql.