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:
Örnek başlar
Initializer hook çalışır (örnek başına en fazla bir kez)
Her çağrı isteği için Handler çalışır
Örnek yok edilmek üzere zamanlanır
PreStop hook çalışır
Ö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 |

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
Function Compute konsoluna oturum açın. Sol gezinme bölmesinde Functions öğesini tıklayın.
Üst gezinme çubuğunda bir bölge seçin. Functions sayfasında hedef işlevi tıklayın.
İş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.