All Products
Search
Document Center

Function Compute:Kait siklus hidup instans

Last Updated:Apr 24, 2026

Setelah Anda mengimplementasikan dan mengonfigurasi kait siklus hidup instans, Function Compute memanggil kait yang sesuai untuk peristiwa siklus hidup instans tertentu. Topik ini menjelaskan cara mengimplementasikan kait tersebut dalam custom image.

Latar Belakang

Siklus hidup instans mencakup kait Initializer dan kait PreStop. Kait Initializer memiliki dua jenis: invoke code dan execute instruction. Saat ini, hanya fungsi yang dipercepat GPU yang mendukung jenis execute instruction. Untuk informasi selengkapnya, lihat Konfigurasi siklus hidup instans.

Kait siklus hidup instans mengikuti aturan penagihan yang sama dengan permintaan pemanggilan biasa. Namun, log eksekusinya hanya tersedia di Real-time Log, Function Logs, atau Advanced Logs, dan tidak muncul di Invocation Request List. Untuk informasi selengkapnya, lihat Melihat log kait siklus hidup instans.

Catatan

Saat ini, log dari kait execute instruction tidak dapat ditulis ke Function Log.

Implementasi metode panggilan balik

Function Compute memanggil kait yang sesuai untuk peristiwa siklus hidup instans tertentu. Siklus hidup instans mencakup kait Initializer dan kait PreStop. Kait Initializer mendukung dua jenis: invoke code dan execute instruction. Anda tidak dapat mengonfigurasi kedua jenis secara bersamaan; hanya satu yang dapat aktif pada satu waktu.

Invoke code

Setelah Anda mengonfigurasi kait invoke code, sistem mengirim permintaan HTTP ke fungsi Anda, seperti POST /initialize atau GET /pre-stop, ketika instans dimulai atau akan dihentikan. Anda harus menangani permintaan tersebut dalam kode aplikasi Anda.

Path

Request

Expected response

(Opsional) POST /initialize

Response body: Nilai kembali dari kait Initializer fungsi.

StatusCode

  • 2xx: Berhasil.

  • Bukan 2xx: Gagal.

Catatan

Jika kait Initializer gagal atau timeout, server selalu mengembalikan kode status HTTP 200. Untuk memastikan adanya kegagalan, Anda harus memeriksa header respons X-Fc-Error-Type:InitializationError atau bidang errorMessage dalam badan respons.

(Opsional) GET /pre-stop

Response body: Nilai kembali dari kait PreStop fungsi.

Untuk menggunakan kait Initializer dalam custom image, server HTTP Anda harus mengimplementasikan logika untuk path /initialize dengan metode POST. Hal yang sama berlaku untuk kait PreStop, yang memerlukan logika untuk path /pre-stop dengan metode GET. Contoh kode berikut menunjukkan implementasi untuk runtime Python 3.10 kustom.

Catatan

Anda hanya perlu mengimplementasikan logika /initialize jika Anda mengonfigurasi kait Initializer. Jika kait tidak dikonfigurasi, kode terkait apa pun di server HTTP Anda tidak akan pernah dipanggil. Hal yang sama berlaku untuk kait PreStop dan path /pre-stop.

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)
    # lakukan tindakan Anda
    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)
    # lakukan tindakan Anda
    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)
    # lakukan tindakan Anda
    print("FC PreStop End RequestId: " + rid)
    return "OK"


if __name__ == '__main__':
    app.run(host='0.0.0.0', port=9000)

Contoh sebelumnya menunjukkan inisialisasi yang berhasil. Contoh berikut menunjukkan bagaimana kait /initialize dapat gagal dalam Python.

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

Execute instruction

Kait execute instruction menjalankan perintah untuk menginisialisasi instans setelah dimulai. Anda dapat menggunakan shell apa pun yang didukung oleh lingkungan runtime fungsi, seperti /bin/bash, /bin/sh, /bin/csh, atau /bin/zsh.

Konsol Function Compute menyediakan dua opsi preset: /bin/bash dan /bin/sh. Topik ini menggunakan /bin/sh sebagai contoh.

#!/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

Kode keluar (exit code) 0 menunjukkan keberhasilan. Kode keluar lainnya menunjukkan kegagalan. Untuk membantu troubleshooting, Anda dapat menulis detail kesalahan ke standard error (stderr) dalam skrip. Misalnya, cuplikan berikut menunjukkan cara mengeluarkan detail kesalahan dan mengatur kode keluar menjadi 1 ketika permintaan curl gagal.

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

Kode kesalahan panggilan balik

Invoke code

Kode kesalahan

Deskripsi

400

  • Jika kait Initializer gagal dengan kesalahan 400 atau 404, permintaan tersebut tidak diulang. Namun, sistem mencoba menginisialisasi instans lagi hingga berhasil.

  • Kegagalan 400 atau 404 pada kait PreStop tidak memengaruhi pembekuan atau penghentian instans fungsi.

404

500

Function Compute me-restart instans.

Execute instruction

Jika kode keluar bukan 0, instruksi gagal dan tidak dieksekusi ulang. Sistem kemudian mengembalikan kesalahan.

Mengonfigurasi instance lifecycle hooks

  1. Masuk ke Konsol Function Compute. Di panel navigasi kiri, pilih Function Management > Functions.

  2. Di bilah navigasi atas, pilih wilayah. Di halaman Functions, klik fungsi target.

  3. Di halaman detail fungsi, klik tab Configuration. Di bagian Instance Configuration, klik Modify.

  4. Di panel Instance Configuration, konfigurasi kait Initializer dan atur Initializer Timeout.

    • Invoke code

      image

    • Execute instruction

      Konsol menyediakan dua shell preset: /bin/bash dan /bin/sh.

      image

  5. Di panel Instance Configuration, konfigurasi kait PreStop dan atur timeout-nya. Lalu klik Deploy.

    image

Melihat log kait siklus hidup instans

Catatan

Saat ini, log dari kait execute instruction tidak dapat ditulis ke Function Log.

Anda dapat melihat log kait di Function Logs.

  1. Masuk ke Konsol Function Compute. Di panel navigasi kiri, pilih Function Management > Functions.

  2. Di bilah navigasi atas, pilih wilayah. Di halaman Functions, klik fungsi target.

  3. Di halaman detail fungsi, klik tab Test, klik Test Function, lalu pilih Logs > Function Logs.

    Di tab Function Logs, Anda dapat melihat log pemanggilan fungsi dan log kait Initializer. Berikut adalah contohnya:

    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*******

    Instans fungsi di-cache selama periode tertentu dan tidak langsung dihapus, sehingga log kait PreStop mungkin tidak muncul segera. Untuk memicu kait PreStop lebih cepat, perbarui konfigurasi atau kode fungsi. Setelah pembaruan selesai, lihat kembali Function Logs untuk melihat log kait PreStop. Berikut adalah contohnya:

    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*******