Tüm Ürünler
Search
Belge Merkezi

Function Compute:İşlev örnekleri için yaşam döngüsü kancaları

Son Güncelleme:Oct 08, 2026

Function Compute, Node.js işlev örnekleri için iki yaşam döngüsü kancası destekler: Bir örnek başladıktan sonra bir kez çalışan Initializer hook ve bir örnek yok edilmeden önce çalışan PreStop hook. Bu kancaları, örnek başına bir kez başlatılması ve örnek kapatıldığında serbest bırakılması gereken veritabanı bağlantıları gibi kaynakları yönetmek için kullanın.

Yaşam döngüsü kancalarının çalışma şekli

Bir işlev örneği aşağıdaki aşamalardan geçer:

  1. Örnek başlar

  2. Initializer hook çalışır (örnek başına en fazla bir kez)

  3. Her çağrı isteği için Handler çalışır

  4. Örnek yok edilmek üzere zamanlanır

  5. PreStop hook çalışır

  6. Örnek yok edilir

Kanca çalıştırma günlükleri, normal çağrı istekleriyle aynı oranda faturalandırılır. Ancak kanca günlükleri yalnızca Function Logs, Real-time Logs ve Advanced Logs bölümlerinde görünür; çağrı isteği listesinde yer almaz. Daha fazla bilgi için bkz. Yaşam döngüsü kancası günlüklerini görüntüleme.

Initializer hook

Initializer hook, bir işlev örneği başladıktan sonra ancak handler herhangi bir isteği işlemeden önce çalışır. Function Compute, bu kancanın örnek yaşam döngüsü boyunca en fazla bir kez çalışacağını garanti eder. Kanca başarısız olursa, Function Compute örneğe herhangi bir istek yönlendirmeden önce başarılı olana kadar yeniden dener.

Initializer hook'u paylaşılan kaynakları ayarlamak için kullanın. Örneğin, her çağrıda yeniden bağlanmak yerine sonraki tüm çağırmaların yeniden kullanabileceği bir veritabanı bağlantısı açın.

Yöntem imzası

Aspect Details
Input Yalnızca context — çağrı zamanında çalışma zamanı bağlamını sağlar
Return Dönüş değeri yok. Tamamlandığını belirtmek için return (ESM) veya callback (CommonJS) çağrısı yapın

Kod örnekleri

Her iki örnek de kanca işlevi adı olarak initialize kullanır. Bu ad, Function Compute konsolunda yapılandırılan Initializer hook adıyla eşleşmelidir.

ECMAScript modules (Node.js 18 and later)

export const initialize = async (context) => {
  console.log('initializer');
  return "";
}

CommonJS modules

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

PreStop hook

PreStop hook, bir işlev örneği yok edilmeden önce çalışır. Yöntem imzası Initializer hook ile aynıdır: Yalnızca giriş olarak context kabul eder ve tamamlanması için return veya callback çağrısı gerektirir.

PreStop hook'u, örnek tarafından tutulan kaynakları serbest bırakmak için kullanın. Örneğin, örnek kapanmadan önce veritabanı bağlantılarını kapatın.

İşlem durduktan sonra işlev örnekleri bir süre önbellekte tutulur, bu nedenle PreStop hook bir çağrı bittikten hemen sonra çalışmaz. Test amacıyla PreStop'u hızlıca tetiklemek için işlev yapılandırmasını veya kodunu güncelleyin. Bu işlem mevcut örneğin değiştirilmesini zorlayarak PreStop hook'un tetiklenmesine neden olur.

Kod örnekleri

Her iki örnek de kanca işlevi adı olarak preStop kullanır. Bu ad, konsolda yapılandırılan PreStop hook adıyla eşleşmelidir.

ECMAScript modules (Node.js 18 and later)

export const preStop = async (context) => {
  console.log('preStop');
  return "";
}

CommonJS modules

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

Yaşam döngüsü kancalarını yapılandırma

Function Compute konsolunu kullanma

Function Compute konsolunda, işlevin yapılandırma ayarlarında Initializer hook ve PreStop hook'u yapılandırın. Ayrıntılar için bkz. Örnek yaşam döngülerini yapılandırma.

Her kanca adını [filename.methodname] biçiminde belirtin:

Hook Value Description
Initializer hook index.initialize index.js dosyasındaki initialize yöntemi
PreStop hook index.preStop index.js dosyasındaki preStop yöntemi

db-node.js-lifecycle

Serverless Devs kullanma

s.yaml dosyanızda props altında instanceLifecycleConfig ekleyin. Her kanca için bir handler (filename.methodname biçiminde) ve saniye cinsinden bir timeout gerekir.

edition: 3.0.0
name: hello-world-app
access: default

resources:
  hello_world:
    component: fc3
    props:
      region: cn-hangzhou
      functionName: nodejs-fc-hooks
      description: "Node.js lifecycle hooks by serverless devs"
      runtime: nodejs20
      code: ./code
      handler: index.handler
      memorySize: 128
      timeout: 30
      instanceLifecycleConfig:
        preStop:
          handler: index.preStop
          timeout: 3
        initializer:
          handler: index.initialize
          timeout: 3
      internetAccess: true
      logConfig: auto

Desteklenen tüm YAML alanları için bkz. Serverless Devs ortak komutları.

Yaşam döngüsü kancası günlüklerini görüntüleme

  1. Function Compute konsoluna oturum açın. Sol gezinme bölmesinde Functions öğesini tıklayın.

  2. Üst gezinme çubuğunda bir bölge seçin. Functions sayfasında hedef işlevi tıklayın.

  3. İşlev ayrıntıları sayfasında Test Function sekmesini tıklayın, Test Function öğesini tıklayın ve ardından Logs > Function Logs seçeneğini belirleyin.

Logs sekmesi hem çağrı günlüklerini hem de Initializer günlüklerini gösterir. Örnek:

2023-09-06 11:18:10 FC Initialize Start RequestId: 1-64f7ef72-64caf1ff0046194d9a26bbd7
2023-09-06 11:18:10 load code for handler:index.initialize
2023-09-06 11:18:10 2023-09-06 11:18:10 1-64f7ef72-64caf1ff0046194d9a26bbd7 [verbose] initializer
2023-09-06 11:18:10 FC Initialize End RequestId: 1-64f7ef72-64caf1ff0046194d9a26bbd7
2023-09-06 11:18:10 FC Invoke Start RequestId: 1-64f7ef72-64caf1ff0046194d9a26bbd7
2023-09-06 11:18:10 load code for handler:index.handler
2023-09-06 11:18:10 FC Invoke End RequestId: 1-64f7ef72-64caf1ff0046194d9a26bbd7

PreStop hook günlüklerini görüntülemek için bir örnek değiştirmeyi zorlamak amacıyla işlev yapılandırmasını veya kodunu güncelleyin. Güncelleme tamamlandıktan sonra PreStop günlükleri Function Logs bölümünde görünür. Örnek:

2023-09-06 11:08:10 FC PreStop Start RequestId: 944bca62-b209-47a1-9e48-2723647bce0a
2023-09-06 11:08:10 load code for handler:index.preStop
2023-09-06 11:08:10 2023-09-06 11:08:10 944bca62-b209-47a1-9e48-2723647bce0a [verbose] preStop
2023-09-06 11:08:10 FC PreStop End RequestId: 944bca62-b209-47a1-9e48-2723647bce0a

Örnek program

Her iki kancayı da bir MySQL veritabanı ile kullanan eksiksiz bir Node.js örneği nodejs14-mysql adresinde mevcuttur. Initializer hook, MySQL yapılandırmasını ortam değişkenlerinden okur, bir bağlantı oluşturur ve bağlantıyı test eder. PreStop hook ise bağlantıyı kapatır.

Sonraki adımlar