Tüm Ürünler
Search
Belge Merkezi

Function Compute:Örnek yaşam döngüsü kancaları

Son Güncelleme:Oct 08, 2026

Örnek yaşam döngüsü kancaları, bir işlev örneği başladığında veya durduğunda özel mantığınızı çalıştırır. Bu konuda, özel görüntüler kullanan işlevler için Initializer ve PreStop kancalarının nasıl uygulanacağı ve yapılandırılacağı açıklanmaktadır.

Arka plan bilgileri

Bir işlev örneğinin yaşam döngüsü Initializer ve PreStop kancalarını içerir. Function Compute, ilgili örnek yaşam döngüsü olayı gerçekleştiğinde karşılık gelen kancayı çağırır.

Initializer kancası iki türe sahiptir: invoke code ve execute instruction. Şu anda yalnızca GPU hızlandırmalı işlevler, execute instruction türündeki Initializer kancasını destekler. Daha fazla bilgi için bkz. Örnek yaşam döngüsünü yapılandırma.

Örnek yaşam döngüsü kancaları için faturalama kuralları, normal çağrı istekleriyle aynıdır.

Kanca günlükleri hakkında daha fazla bilgi için bkz. Örnek yaşam döngüsü kancası günlüklerini görüntüleme.

Kanca türleri

Initializer kancaları iki uygulama türünü destekler. Aşağıdaki tabloda bu türler karşılaştırılmaktadır.


Kanca türü


Mekanizma


Uygulanabilir kapsam


invoke code


Function Compute işlevinize bir HTTP isteği gönderir. İş kodunuz bu isteğe yanıt verir.


Initializer ve PreStop kancaları


execute instruction


Function Compute, sizin yapılandırdığınız bir kabuk komutunu veya betiğini çalıştırır. Çıkış kodu başarının veya başarısızlığın belirleyicisidir.


Yalnızca GPU hızlandırmalı işlevler için Initializer kancaları

Bir Initializer kancası için iki türden yalnızca birini yapılandırabilirsiniz.

Kancaları uygulama

Aşağıdaki bölümlerde her kanca türünün nasıl uygulanacağı açıklanmaktadır.

Kod çağırma (Invoke code)

Kod çağırma türünde bir kanca yapılandırdıktan sonra, bir işlev örneği başladığında veya durduğunda Function Compute işlevinize POST /initialize veya GET /pre-stop şeklinde bir HTTP isteği gönderir. İsteğe iş kodunuzla yanıt vermeniz gerekir.

Yol

İstek

Beklenen yanıt

(İsteğe bağlı) POST /initialize

İstek gövdesi: Yoktur. İstek üstbilgileri: ortak istek üstbilgileri. Daha fazla bilgi için bkz. Function Compute ortak istek üstbilgileri.

Yanıt gövdesi: işlev Initializer tarafından döndürülen değer. Durum kodu: 2xx: başarı. 2xx dışı: başarısızlık. Bir Initializer kancası zaman aşımına uğradığında veya başarısız olduğunda, sunucu her zaman HTTP 200 durum kodunu döndürür. Hatanın başlatma hatasından kaynaklanıp kaynaklanmadığını belirlemek için X-Fc-Error-Type:InitializationError yanıt üstbilgisini veya yanıt gövdesindeki errorMessage alanını kullanın. Her hata kodunun sistem davranışı için bkz. Kanca hata kodları.

(İsteğe bağlı) GET /pre-stop

İstek gövdesi: Yoktur. İstek üstbilgileri: ortak istek üstbilgileri. Daha fazla bilgi için bkz. Function Compute ortak istek üstbilgileri.

Yanıt gövdesi: işlev PreStop tarafından döndürülen değer.

  • 2xx: Başarılı.

  • 2xx dışı: Başarısız.

Path sütunu (Optional) olarak işaretlenmiştir çünkü her kanca isteğe bağlı bir yapılandırmadır. Oluşturduğunuz işlev için bir Initializer ayarlamazsanız /initialize uygulamanıza gerek yoktur. Bu durumda, HTTP sunucunuz /initialize yolunu uygulasanız bile kodunuzdaki /initialize mantığı asla çağrılmaz. Aynı durum PreStop için de geçerlidir.

Özel bir görüntüde Initializer kanca yöntemini kullanmak için HTTP sunucunuzda POST yöntemiyle /initialize yoluna yönelik mantığı uygulayın. PreStop kanca yöntemi için de durum aynıdır. Aşağıdaki örnek program Python 3.10 özel çalışma zamanını kullanır.

import os
from flask import Flask
from flask import request
app = Flask(__name__)
@app.route('/initialize', methods=['POST'])
def init_invoke():
    rid = request.headers.get('x-fc-request-id')
    print("FC Initialize Start RequestId: " + rid)
    # do your things
    print("FC Initialize End RequestId: " + rid)
    return "OK"
@app.route('/', defaults={'path': ''})
@app.route('/<path:path>', methods=['GET', 'POST', 'PUT', 'DELETE'])
def hello_world(path):
    rid = request.headers.get('x-fc-request-id')
    print("FC invoke Start RequestId: " + rid)
    # do your things
    print("FC invoke End RequestId: " + rid)
    return "Hello, World!", 200, [('Function-Name', os.getenv('FC_FUNCTION_NAME'))]
@app.route('/pre-stop', methods=['GET'])
def prestop_invoke():
    rid = request.headers.get('x-fc-request-id')
    print("FC PreStop Start RequestId: " + rid)
    # do your things
    print("FC PreStop End RequestId: " + rid)
    return "OK"
if __name__ == '__main__':
    app.run(host='0.0.0.0', port=9000)

Kanca kodunuz çalışma zamanında da başarısız olabilir. Aşağıdaki /initialize örneklerinde iki tipik başarısızlık durumu ve Function Compute'in bunlara nasıl yanıt verdiği gösterilmektedir. Her hata kodunun sistem davranışı için bkz. Kanca hata kodları.

Aşağıdaki örnekte işleyici bir özel durum oluşturur. Function Compute bu hatayı 500 hatası olarak değerlendirir ve örneği yeniden başlatır.

@app.route('/initialize', methods=['POST'])
def init():
    raise Exception("hahaha")
    return "OK", 200, []

Aşağıdaki örnekte işleyici 404 durum kodu döndürür. Function Compute isteği yeniden göndermez.

@app.route('/initialize', methods=['POST'])
def init():
    return "OK", 404, []

Talimat yürütme (Yalnızca GPU hızlandırmalı işlevler)

Önemli

Talimat yürütme türü yalnızca GPU hızlandırmalı işlevler için kullanılabilir.

Talimat yürütme türünde, Function Compute işlev örneği başladıktan sonra yapılandırdığınız kabuk komutunu veya betiğini çalıştırır. 0 çıkış kodu kanca talimatının başarıyla çalıştığını gösterir. Diğer tüm çıkış kodları başarısızlığı ifade eder.

/bin/bash, /bin/sh, /bin/csh veya /bin/zsh gibi özel bir kabuk uygulaması kullanabilirsiniz. Kullandığınız kabuk uygulamasının işlev çalışma zamanı ortamı tarafından desteklendiğinden emin olun.

Function Compute konsolu /bin/bash ve /bin/sh seçeneklerini önceden ayarlanmış olarak sunar. Aşağıdaki örnek /bin/sh kullanır. Betik bir başlatma sağlık denetimi gerçekleştirir: yerel bir hizmete istek göndermek için curl ve çıktıyı biçimlendirmek için jq kullanır. Her iki aracın da çalışma zamanı ortamınızda mevcut olduğundan emin olun.

#!/bin/sh
URL="http://localhost:7860"
REQUEST_PATH="sdapi/v1/txt2img"
JSON_DATA='{
    "prompt": "",
    "steps": 1,
    "height": 8,
    "width": 8
}'
temp_file=$(mktemp)
trap 'rm -f "$temp_file"' EXIT
if ! http_code=$(curl -s -w "%{http_code}" \
    -H "Content-Type: application/json" \
    -d "$JSON_DATA" \
    -o "$temp_file" \
    -X POST "$URL"/"$REQUEST_PATH"); then
    echo "{\"status\": \"curl_error\", \"code\": $curl_exit_code}" \
| jq . >&2
    exit 1
fi
response=$(<"$temp_file")
echo "http code $http_code"
if [ "$http_code" -eq 200 ]; then
    echo "$response" | jq -r '.' || printf "%s\n" "$response"
    exit 0
else
    echo "$response_body" \
| jq -c 'if type == "object" then . else {raw: .} end' 2>/dev/null \
| jq -s '{status: "http_error", code: $code, response: .[0]}' \
        --arg code "$http_code" \
        >&2
    exit 1
fi

Hataya neden olan sorunu tespit etmenize yardımcı olmak için betiğinizdeki hata bilgilerini standart hata çıkışına (stderr) yazın. Örneğin, aşağıdaki kod parçacığı curl isteği başarısız olduğunda hata bilgilerini yazar ve çıkış kodunu 1 olarak ayarlar. Aynı başarısızlık davranışı geçerlidir: talimat sıfır olmayan bir çıkış kodu döndürürse talimat tekrar çalıştırılmaz ve sistem ilgili hatayı döndürür. Daha fazla bilgi için bkz. Kanca hata kodları.

if ! http_code=$(curl -s -w "%{http_code}" \
    -H "Content-Type: application/json" \
    -d "$JSON_DATA" \
    -o "$temp_file" \
    -X POST "$URL"/"$REQUEST_PATH"); then
    echo "{\"status\": \"curl_error\", \"code\": $curl_exit_code}" \
| jq . >&2
    exit 1
fi

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

  1. Function Compute konsoluna giriş yapın. Sol gezinme bölmesinde Function Management > Functions seçeneğini belirleyin.

  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 Configuration sekmesini tıklayın. Instance Configuration bölümünde Modify seçeneğini tıklayın.

  4. Instance Configuration panelinde Initializer kancasını yapılandırın. Initializer hook anahtarını açın ve ardından iş gereksinimlerinize göre Initializer timeout değerini ayarlayın. Bu örnekte zaman aşımı 300 saniye olarak ayarlanmıştır. hook type için aşağıdaki türlerden birini seçin:

    • invoke code

      Kanca etkinleştirildikten sonra, örnek başladığında Function Compute işleve bir HTTP POST /initialize isteği gönderir. İş kodunuz bu isteğe yanıt vermeli ve 200 durum kodunu döndürmelidir.

    • execute instruction

      Talimat yürütme türü yalnızca GPU hızlandırmalı işlevler için kullanılabilir.

      Kanca türü olarak execute instruction seçeneğini belirleyin ve ardından /bin/sh gibi bir kabuk talimatı seçin. Kod düzenleyicide başlatma betiğini yazın. Tam bir örnek için bkz. Talimat yürütme (Yalnızca GPU hızlandırmalı işlevler).

  5. (İsteğe bağlı) PreStop kancasını yapılandırın. PreStop hook anahtarını açın ve ardından iş gereksinimlerinize göre PreStop timeout değerini ayarlayın. Bu örnekte zaman aşımı 3 saniye olarak ayarlanmıştır.

  6. Deploy seçeneğini tıklayın.

  7. Kancaların etkili olduğunu doğrulayın. Örnek oluşturma ve yok etme işlemini tetiklemek için işlevi çağırın veya işlev yapılandırmasını ya da kodunu güncelleyin. Ardından Örnek yaşam döngüsü kancası günlüklerini görüntüleme bölümündeki talimatları izleyerek kanca günlüklerini kontrol edin.

Örnek yaşam döngüsü kancası günlüklerini görüntüleme

Kanca yürütme günlüklerini Real-time Log, Function Logs veya Advanced Logs içinde sorgulayabilirsiniz. Invocation Request List kanca günlüklerini göstermez.

Önemli

Talimat yürütme kancaları tarafından oluşturulan günlükler Function Logs'a yazılamaz.

Function Logs özelliğini kullanarak kanca günlüklerini görüntüleyebilirsiniz.

  1. Function Compute konsoluna giriş yapın. Sol gezinme bölmesinde Function Management > Functions seçeneğini belirleyin.

  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 sekmesini tıklayın, Test Function seçeneğini tıklayın ve ardından Logs > Function Logs seçeneğini belirleyin.

    Function Logs sekmesinde işlevin çağrı günlüklerini ve Initializer kanca günlüklerini görüntüleyebilirsiniz. Aşağıdaki örnekte günlükler gösterilmektedir.

2024-06-26 10:59:23FC Initialize Start RequestId: 529eab23-9b3a-4ffc-88c8-9a686*******
2024-06-26 10:59:23FC Initialize End RequestId: 529eab23-9b3a-4ffc-88c8-9a686*******
2024-06-26 10:59:25FC Invoke Start RequestId: 1-667b840c-15c49df0-b7dc1*******
2024-06-26 10:59:25FC Invoke End RequestId: 1-667b840c-15c49df0-b7dc1*******

Her işlev örneği bir süre önbelleğe alınır ve hemen yok edilmez, bu nedenle PreStop kanca günlükleri hemen kullanılamaz. PreStop kancasını hızlı bir şekilde tetiklemek için işlev yapılandırmasını veya işlev kodunu güncelleyin. Güncelleme tamamlandıktan sonra PreStop kanca günlüklerini görüntülemek üzere Function Logs bölümünü tekrar kontrol edin. Aşağıdaki örnekte günlükler gösterilmektedir.

2024-06-26 11:04:33FC PreStop Start RequestId: c4385899-f071-490e-a8b7-e33c5*******
2024-06-26 11:04:33FC PreStop End RequestId: c4385899-f071-490e-a8b7-e33c5*******

Kanca hata kodları

Kod çağırma (Invoke code)


Hata kodu


Açıklama


400


Bir işlev Initializer kancası başarısız olur ve 400 veya 404 döndürürse istek yeniden gönderilmez ancak sistem çağrı başarılı olana kadar yeniden denemeye devam eder. Bir işlev PreStop kancası başarısız olur ve 400 veya 404 döndürürse işlev örneğinin dondurulması ve durdurulması etkilenmez.


404


500


Function Compute örneği yeniden başlatır.

Talimat yürütme (Execute instruction)

Talimat sıfır olmayan bir çıkış kodu döndürürse talimat tekrar çalıştırılmaz ve sistem ilgili hatayı döndürür. Betiğiniz hata bilgilerini stderr'e yazarsa bu çıktıyı kullanarak başarısızlığın nedenini tespit edebilirsiniz.