Tüm Ürünler
Search
Belge Merkezi

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

Son Güncelleme:Oct 08, 2026

İşlev örnekleri, işleyici kodunuzun kontrol edemeyeceği başlatma ve temizleme süreçlerinde zaman harcar. Yaşam döngüsü kanca'ları, bu anlara özel mantık eklemenizi sağlar; ilk çağrıdan önce kurulum kodu çalıştırabilir ve örnek yok edilmeden önce temizlik kodu yürütebilirsiniz. Bu konu, Go çalışma zamanı için yaşam döngüsü kanca'larını kapsar.

Nasıl çalışır

Her işlev örneği üç aşamadan geçer:

Aşama Gerçekleşen işlem
Init Örnek başlar. Bir Initializer kanca'sı yapılandırılmışsa, ilk işleyici çağrısından önce çalışır.
Invoke Örnek istekleri işler.
Shutdown Örnek yok edilir. Bir PreStop kanca'sı yapılandırılmışsa, yok etme işleminden önce çalışır.

Yaşam döngüsü kanca'larının faturalandırması, normal çağrılarla aynı kurallara tabidir.

Initializer kanca'sı

  • Örneğin yaşam döngüsü boyunca tam olarak bir kez, örnek başladıktan sonra ancak ilk işleyici çağrısından önce çalışır.

  • Kanca başarısız olursa Function Compute başarılı olana kadar yeniden dener. Initializer başarıyla tamamlanana kadar işleyici çalışmaz.

  • Güvenle yeniden denenebilmesi için Initializer'ınızı idempotent olacak şekilde tasarlayın.

Yaygın kullanım senaryoları: ortam değişkenlerinden yapılandırma yükleme, veritabanı bağlantı havuzları oluşturma, önbellekleri ısıtma.

PreStop kanca'sı

  • Örnek yok edilmeden önce çalışır.

Önemli

PreStop kanca'sını kullanmak için fc-runtime-go-sdk sürümünü v0.1.0 veya üzerine güncelleyin.

Ön koşullar

Başlamadan önce şunlara sahip olduğunuzdan emin olun:

  • Go çalışma zamanını kullanan bir Function Compute işlevi

  • fc-runtime-go-sdk v0.1.0 veya üzeri (PreStop kanca'sı için gereklidir)

Yaşam döngüsü kanca'larını uygulama

Her iki kanca da aynı imzayı paylaşır — tek bir ctx context.Context parametresi alır ve dönüş değeri yoktur:

func(ctx context.Context)

Kanca'ları main() içinde fc.Start() veya fc.StartHttp() çağrısından önce kaydedin. fc.Start() çağrısından sonra yapılan kayıtlar yoksayılır.

package main

import (
    "context"
    "log"

    "github.com/aliyun/fc-runtime-go-sdk/fc"
    "github.com/aliyun/fc-runtime-go-sdk/fccontext"
)

func HandleRequest(ctx context.Context) (string, error) {
    return "hello world!", nil
}

func initialize(ctx context.Context) {
    log.Print("this is initialize handler")
    fctx, _ := fccontext.FromContext(ctx)
    fctx.GetLogger().Infof("context: %#v\n", fctx)
}

func preStop(ctx context.Context) {
    log.Print("this is preStop handler")
    fctx, _ := fccontext.FromContext(ctx)
    fctx.GetLogger().Infof("context: %#v\n", fctx)
}

func main() {
    fc.RegisterInitializerFunction(initialize) // Register the Initializer hook
    fc.RegisterPreStopFunction(preStop)        // Register the PreStop hook
    fc.Start(HandleRequest)
}

Temel işlevler:

İşlev Açıklama
initialize(ctx context.Context) Initializer kanca'sı. ctx parametresi çağrı bağlamını taşır. Bkz. Context.
preStop(ctx context.Context) PreStop kanca'sı. ctx parametresi çağrı bağlamını taşır. Bkz. Context.
main() Go işlevlerinin giriş noktası. İşleyicinizi fc.Start öğesine aktarmadan önce burada fc.RegisterInitializerFunction ve fc.RegisterPreStopFunction çağrılarını yapın.
Önemli

Tüm kanca'ları fc.Start(HandleRequest) veya fc.StartHttp(HandleRequest) çağrısından önce kaydedin. Bu çağrıdan sonra kaydedilen kanca'lar tanınmaz.

Yaşam döngüsü kanca'larını yapılandırma

Function Compute konsolunu kullanma

Function Compute konsolunda işlevinizin yapılandırmasını açın ve Initializer hook ile PreStop hook alanlarını ayarlayın.

db-go-lifecycle

Tam yapılandırma referansı için bkz. Örnek yaşam döngülerini yapılandırma.

Serverless Devs kullanma

s.yaml dosyanızın props bölümüne initializer ve instanceLifecycleConfig.preStop alanlarını ekleyin.

Önemli

handler alanı boş olmayan bir dize olmalıdır. Varsayılan değer olan "true" kullanılırken, bunu s.yaml dosyasında çift tırnak içine alın.

edition: 3.0.0
name: hello-world  # Project name
access: default    # Key alias

vars: # Global variables
  region: cn-hangzhou

resources:
  helloworld: # Service or module name
    component: fc3
    props:
      region: ${vars.region}
      functionName: "golang-lifecycle-hook-demo"
      description: 'this is golang lifecycle'
      runtime: "go1"
      code: ./
      handler: main
      memorySize: 128
      timeout: 60
      instanceLifecycleConfig:
        initializer:
          handler: initialize
          timeout: 60
        preStop:
          handler: preStop  # Function handler
          timeout: 60       # Timeout in seconds

Tam Serverless Devs YAML referansı için bkz. Serverless Devs genel komutları.

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

Yaşam döngüsü kanca günlükleri Function Logs, Real-time Logs ve Advanced Logs bölümlerinde görünür. Çağrı isteği listesinde gösterilmezler.

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

  2. Üst gezinme çubuğundan bir bölge seçin. Functions sayfasında yönetmek istediğiniz işleve tıklayın.

  3. Test Function sekmesine tıklayın, Test Function seçeneğine tıklayın ve ardından Logs > Function Logs yolunu izleyin.

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

2024-03-04 17:57:28 FC Initialize Start RequestId: 1-65e59b07-1520da26-bf73bbb91b69
2024-03-04 17:57:28 2024-03-04 09:57:28.192 1-65e59b07-1520da26-bf73bbb91b69 [info] initializer
2024-03-04 17:57:28 FC Initialize End RequestId: 1-65e59b07-1520da26-bf73bbb91b69
2024-03-04 17:57:28 FC Invoke Start RequestId: 1-65e59b07-1520da26-bf73bbb91b69
2024-03-04 17:57:28 FC Invoke End RequestId: 1-65e59b07-1520da26-bf73bbb91b69

İşlev örnekleri önbelleğe alınır ve hemen yok edilmez, bu nedenle PreStop günlükleri hemen görünmeyebilir. Bir PreStop kanca'sını hemen tetiklemek için işlevin kodunu veya yapılandırmasını güncelleyin; bu işlem mevcut örneğin kapatılmasını zorlar. Güncellemeden sonra PreStop günlükleri Function Logs bölümünde görünür:

2024-03-04 18:33:26 FC PreStop Start RequestId: 93c93603-9fbe-4576-9458-193c8b213031
2024-03-04 18:33:26 2024-03-04 10:33:26.077 93c93603-9fbe-4576-9458-193c8b213031 [info] preStop
2024-03-04 18:33:26 FC PreStop End RequestId: 93c93603-9fbe-4576-9458-193c8b213031

Örnek program

go-initializer-mysql örneği, Go'da MySQL bağlantı havuzu kurmak için Initializer kanca'sının nasıl kullanılacağını gösterir:

  1. MySQL bağlantı ayarlarını işlev ortam değişkenlerinden okuyun (s.yaml dosyasında tanımlanır).

  2. Initializer kanca'sında bir bağlantı havuzu oluşturun.

  3. İşleyici çalışmadan önce bağlantıyı test edin.

Bu yaklaşım, bağlantı kurulumunu kritik yoldan çıkararak her çağrının zaten kurulmuş bir havuzu yeniden kullanmasını sağlar.

Sırada ne var