Bu konu, bir PHP çalışma zamanında örnek yaşam döngüsü kancalarının nasıl uygulanıp kullanılacağını açıklar.
Arka plan
Bir örnek yaşam döngüsü kancası uygulayıp yapılandırdığınızda, Function Compute belirli bir yaşam döngüsü olayı gerçekleştiğinde ilgili kancayı çağırır. PHP çalışma zamanı Başlatıcı ve PreStop olmak üzere iki örnek yaşam döngüsü kancasını destekler. Daha fazla bilgi için bkz. Örnek yaşam döngülerini yapılandırma.
Bir örnek yaşam döngüsü kancası için faturalama kuralları, normal bir istek çağrısı için geçerli olanlarla aynıdır. Ancak bu kancaların çalıştırma günlüklerini yalnızca Real-time Logs, Function Logs veya Advanced Logs içinde sorgulayabilirsiniz. invocation request list bu kancalara ait günlükleri göstermez. Daha fazla bilgi için bkz. Örnek yaşam döngüsü kancası günlüklerini görüntüleme.
Başlatıcı kancası
Başlatıcı örneği
Başlatıcı kancası, bir işlev örneği başladıktan sonra ancak işleyicisi yürütülmeden önce çalışır. Function Compute bir işlev örneğinin yaşam döngüsü boyunca Başlatıcı kancasının en fazla bir kez başarıyla yürütülmesini sağlar. Başlatıcı kancası ilk denemede başarısız olursa işlev çağrısı hemen başarısız olur. Bir sonraki çağrıda yeni bir işlev örneği oluşturulur ve kanca tekrar çalışır.
Bir Başlatıcı kancası zaman aşımına uğradığında veya başarısız olduğunda sunucu her zaman HTTP 200 durum kodu döndürür. Hatanın bir başlatma hatasından kaynaklanıp kaynaklanmadığını belirlemek için X-Fc-Error-Type:InitializationError yanıt üst bilgisini veya yanıt gövdesindeki errorMessage alanını kontrol etmeniz gerekir.
Başlatıcı kancası, bir işleyici içindeki bağlam parametresiyle aynı olan tek bir giriş parametresi $context kabul eder.
Aşağıda temel bir Başlatıcı kancası örneği verilmiştir.
<?php
function my_initializer($context) {
$logger = $GLOBALS['fcLogger'];
$logger->info("hello world");
}
?>
my_initializer Başlatıcı kancası yönteminin adıdır. Bu ad, Function Compute konsolu içinde Initializer Hook için ayarladığınız değerle eşleşmelidir. Örneğin, işleviniz için Initializer Hook nu main.my_initializer olarak yapılandırırsanız Function Compute, main.php dosyasında tanımlanan my_initializer yöntemini yükler ve çalıştırır.
Yöntem imzası
Kanca, işleyicinin
contextnesnesiyle aynı olan tek bir giriş parametresi (context) kabul eder.contextnesnesi içindekiinitializerveinitializationTimeoutalanları Başlatıcı kancası için tasarlanmıştır. Başlatıcı özelliğini kullanırsanız bu alanlar, işlev için yapılandırdığınız Initializer Hook ve Initializer Hook Timeout Period değerlerine ayarlanır. Aksi takdirde bu alanlar boş kalır ve yoksayılır.Kancanın dönüş değeri yoktur.
PreStop kancası
PreStop kancası, bir işlev örneği yok edilmeden önce çalışır. Yöntem imzası Başlatıcı kancasıyla aynıdır.
Aşağıda bir PreStop kancası örneği verilmiştir.
<?php
$counter = 0;
function preStop($context) {
$GLOBALS['fcLogger']->info("preStop ok");
}
function handler($event, $context) {
global $counter;
$counter += 2;
return $counter;
}
?>
PreStop kancasına ait günlükleri, işleviniz için yapılandırılan Logstore içinde sorgulayabilirsiniz. Örneğin, işleve ait tüm günlükleri bulmak için aşağıdaki sorgu ifadesini kullanın. Daha fazla bilgi için bkz. Kancalarla ilgili günlükleri sorgulama.
<funcName> AND <ServiceName> AND qualifier: <VERSION>
Yaşam döngüsü kancalarını yapılandırma
Konsolda yapılandırma
Function Compute konsolu nda bir FC işlevi için Initializer Hook ve PreStop Hook nı bölümünde yapılandırabilirsiniz. Daha fazla bilgi için bkz. Örnek yaşam döngüsünü yapılandırma. Geri arama biçimi [dosya_adı.yöntem_adı] şeklindedir. Örnekler:
index.phpdosyasındakiinitializeyöntemini çağırmak için Initializer Hook nıindex.initializeolarak ayarlayın.index.phpdosyasındakipreStopyöntemini çağırmak için PreStop Hook nıindex.preStopolarak ayarlayın.
Serverless Devs kullanarak yapılandırma
Serverless Devs kullanıyorsanız Initializer Hook ve PreStop Hook yapılandırmalarını s.yaml dosyanıza ekleyin.
-
Başlatıcı kancası yapılandırması
functionyapılandırmasına,handlervetimeoutalanlarını içereninstanceLifecycleConfig.initializeralanını ekleyin. -
PreStop kancası yapılandırması
functionyapılandırmasına,handlervetimeoutalanlarını içereninstanceLifecycleConfig.preStopalanını ekleyin.
Aşağıdaki kod bir yapılandırma örneği sunar.
edition: 3.0.0
name: fcDeployApp
access: "default"
vars: # Global variables
region: "cn-hangzhou"
resources:
hello_world:
component: fc3 # Component name
props:
region: ${vars.region} # For more information about how to use variables, see: https://docs.serverless-devs.com/serverless-devs/yaml#%E5%8F%98%E9%87%8F%E8%B5%8B%E5%80%BC
functionName: "testphp"
description: 'this is a test'
runtime: "php7.2"
code: ./
handler: index.handler
memorySize: 128
timeout: 30
instanceLifecycleConfig: # Instance lifecycle hooks
initializer: # Initializer hook
handler: index.my_initializer
timeout: 60
preStop: # PreStop hook
handler: index.preStop # Function handler
timeout: 60 # Timeout
Serverless Devs için YAML yapılandırma belirtimleri hakkında daha fazla bilgi için bkz. Serverless Devs genel komutları.
Örnek yaşam döngüsü kancalarının günlüklerini görüntüleme
Yaşam döngüsü kancası günlüklerini Logs içinde görüntüleyebilirsiniz.
Function Compute konsolu na oturum açın. Sol gezinme bölmesinde seçeneğini belirleyin.
Üst gezinme çubuğunda bir bölge seçin. Functions sayfasında hedef işleve tıklayın.
-
İşlev ayrıntıları sayfasında Test Function sekmesine tıklayın, Test Function düğmesine tıklayın ve ardından seçeneğini belirleyin.
Logs sekmesinde işlev çağrı günlüklerini ve Başlatıcı günlüklerini görüntüleyebilirsiniz. Örnek:
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-bf73bbb91b69Her işlev örneği bir süre önbelleğe alınır ve hemen yok edilmez; bu nedenle PreStop kancası günlüklerini hemen görüntüleyemezsiniz. Bir PreStop kancasını hızlıca tetiklemek için işlev yapılandırmalarını veya işlev kodunu güncelleyebilirsiniz. Güncelleme tamamlandıktan sonra PreStop kancası günlüklerini Function Logs içinde görüntüleyebilirsiniz. Aşağıdaki örnek kod bir durumu gösterir:
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
Örnek program
Function Compute, Başlatıcı ve PreStop kancalarını kullanan bir MySQL örnek projesi sağlar. Bu örnekte Başlatıcı kancası MySQL veritabanı yapılandırmasını ortam değişkenlerinden okur, bir MySQL bağlantısı oluşturur ve bağlantısını test eder. PreStop kancası ise MySQL bağlantısını kapatır. Daha fazla bilgi için bkz. php72-mysql.