All Products
Search
Document Center

Function Compute:Informasi Dasar

Last Updated:Apr 01, 2026

Function Compute menangani eksekusi kode melalui serangkaian konsep inti waktu proses: handler, kait siklus hidup, pencatatan log, dan penanganan error. Halaman ini menjelaskan cara kerja masing-masing agar Anda dapat menulis dan men-debug fungsi secara efektif.

Handlers

Setiap fungsi memerlukan handler—titik masuk yang dimuat dan dipanggil oleh waktu proses Function Compute untuk memproses permintaan. Tetapkan handler menggunakan parameter Handler di Konsol Function Compute. Untuk detail pengaturan, lihat Buat fungsi.

Function Compute mendukung dua jenis handler:

  • Event handler: memproses permintaan dari sumber event seperti Object Storage Service (OSS), Simple Log Service, dan ApsaraMQ for RocketMQ—apa pun kecuali pemicu HTTP.

  • HTTP handler: memproses permintaan HTTP secara langsung. Lihat Konfigurasi dan gunakan pemicu HTTP untuk detailnya.

Praktik terbaik untuk handler

Simpan kode inisialisasi di luar badan fungsi handler. Klien SDK, koneksi database, dan dependensi yang dimuat saat startup instans akan digunakan ulang di berbagai pemanggilan—mengurangi latensi dan biaya per pemanggilan. Kait Initializer (dijelaskan di bawah) merupakan tempat yang direkomendasikan untuk pekerjaan ini.

Jangan menyimpan data pengguna atau status sensitif keamanan dalam variabel global. Function Compute dapat menggunakan ulang satu instans untuk beberapa pemanggilan, dan status global tetap ada antar pemanggilan.

Kait siklus hidup untuk instans fungsi

Dalam mode permintaan, Function Compute secara otomatis membuat instans saat permintaan tiba. Saat tidak aktif, instans dibekukan dan akhirnya dihapus setelah periode ketidakaktifan tertentu.

Siklus hidup instans mengikuti urutan berikut:

Dibuat → Diinisialisasi (Initializer) → Berjalan → PreFreeze → Dibekukan → PreStop → Dihapus

Kait siklus hidup memungkinkan Anda menjalankan kode pada transisi penting dalam siklus ini. Function Compute menyediakan tiga kait: Initializer, PreFreeze, dan PreStop. Untuk model siklus hidup lengkap, lihat Siklus hidup instans fungsi.

Kait Initializer

Kait Initializer dijalankan setelah inisialisasi instans, sebelum handler memproses permintaan apa pun. Kait ini dijalankan tepat satu kali selama masa pakai instans.

Jika kait gagal, instans saat ini akan dihapus dan instans baru dibuat untuk mencoba ulang.

Gunakan kait Initializer untuk pekerjaan persiapan yang mahal jika diulang pada setiap pemanggilan: membuat kolam koneksi, memuat dependensi, atau menjalankan tugas inisialisasi database. Memindahkan pekerjaan ini ke tahap inisialisasi mengurangi latensi per pemanggilan.

Kait PreFreeze

Kait PreFreeze dijalankan tepat sebelum instans dibekukan. Gunakan kait ini untuk menyelesaikan operasi yang sedang berjalan sebelum instans menjadi tidak aktif—misalnya, memastikan metrik telah dikirim sebelum pembekuan.

Kait PreStop

Kait PreStop dijalankan tepat sebelum instans dihapus. Gunakan kait ini untuk membersihkan secara elegan—misalnya, menutup koneksi database atau melaporkan status akhir sebelum instans keluar.

Manajemen log

Catatan

Anda harus mengonfigurasi Logstore tingkat layanan sebelum log fungsi dapat disimpan. Lihat Konfigurasi pencatatan log untuk instruksi pengaturan. Jika Anda mengaktifkan pencatatan log saat membuat layanan di Konsol Function Compute, Logstore akan diatur secara otomatis.

Function Compute terintegrasi dengan Simple Log Service untuk menyimpan log pemanggilan maupun log yang dicetak dari kode fungsi Anda.

Baik pernyataan cetak bawaan bahasa pemrograman maupun pernyataan pencatatan log yang disediakan FC menulis ke Logstore. Perbedaannya adalah bahwa pernyataan pencatatan log FC memberi tag setiap entri dengan ID permintaan, sehingga mempermudah penyaringan dan korelasi log antar pemanggilan.

Bahasa pemrogramanPernyataan bawaanPernyataan pencatatan log FCReferensi
Node.jsconsole.log()context.logger.info()Cetak log
Pythonprint()logging.getLogger().info()Cetak log
JavaSystem.out.println()context.getLogger().info()Cetak log
PHPecho "" . PHP_EOL$GLOBALS['fcLogger']->info()Pencetakan log
C#Console.WriteLine("")context.Logger.LogInformation()Penanganan error

Format output berbeda antara kedua pendekatan tersebut. Pernyataan print() biasa menghasilkan pesan mentah; pernyataan pencatatan log FC mencakup timestamp, ID permintaan, dan tingkat log:

# Pernyataan cetak bawaan
# print('hello world')
message:  hello world

# Pernyataan pencatatan log FC
# logger.info('hello world')
message:  2020-03-13T04:06:49.099Z f84a9f4f-2dfb-41b0-9d6c-1682a2f3a650 [INFO] hello world

Gunakan pernyataan pencatatan log FC ketika Anda perlu mengorelasikan output log antar beberapa pemanggilan atau menyaring log berdasarkan ID permintaan.

Struktur log

Setiap entri log eksekusi fungsi berisi nama layanan, nama fungsi, versi, alias, dan konten pesan. Struktur lengkapnya tampak seperti berikut:

__source__:
__tag__:__receive_time__:  1584072413
__topic__:  myService
functionName:  myFunction
message:  2020-03-13T04:06:49.099Z f84a9f4f-2dfb-41b0-9d6c-1682a2f3a650 [INFO] hello world
qualifier:  LATEST
serviceName:  myService
versionId:

Deskripsi field:

FieldDeskripsi
__source__Asal entri log
__tag__:__receive_time__Timestamp Unix saat log diterima oleh Simple Log Service
__topic__Memetakan ke nama layanan
functionNameFungsi yang menghasilkan log
serviceNameLayanan tempat fungsi tersebut berada
qualifierAlias versi yang digunakan untuk pemanggilan ini (misalnya, LATEST)
versionIdID versi numerik, jika berlaku
messageKonten log, termasuk timestamp, ID permintaan, tingkat log, dan teks

Selain log kode, Function Compute secara otomatis menulis dua baris log sistem per pemanggilan:

  • FC Invoke Start RequestId: <id> — dicetak saat eksekusi dimulai

  • FC Invoke End RequestId: <id> — dicetak saat eksekusi selesai

Gunakan penanda batas ini untuk mengidentifikasi semua output log untuk satu permintaan: saring berdasarkan ID permintaan untuk melihat setiap baris yang dicatat selama pemanggilan tersebut.

Penanganan error

Function Compute mengklasifikasikan error pemanggilan menjadi dua jenis.

HandledInvocationError

Jenis ini hanya berlaku untuk error yang secara eksplisit dikembalikan melalui parameter callback di Node.js. Informasi error tersebut disertakan dalam badan respons.

'use strict';
module.exports.handler = function(event, context, callback) {
  console.log('hello world');
  callback('this is error', 'hello world');
};

Contoh respons error:

{"errorMessage":"this is error"}

UnhandledInvocationError

Semua error lainnya—exception waktu proses, timeout, error kehabisan memori—diklasifikasikan sebagai UnhandledInvocationError. stackTrace untuk error ini dicetak dalam log fungsi. Gunakan ID permintaan untuk menemukan entri log yang relevan dan menemukan stack trace tersebut.

Untuk mendiagnosis UnhandledInvocationError:

  1. Temukan baris FC Invoke Start RequestId di log Anda untuk pemanggilan yang gagal.

  2. Saring semua entri log berdasarkan ID permintaan tersebut.

  3. Temukan output stackTrace untuk mengidentifikasi akar penyebabnya.

Lingkungan sistem operasi

Function Compute berjalan di Debian 9 LTS. Hanya arsitektur x86_64 yang didukung.

Sesuaikan lingkungan menggunakan layer atau variabel lingkungan. Misalnya, instans fungsi berjalan dalam UTC secara default. Untuk beralih ke UTC+8, atur variabel lingkungan TZ ke Asia/Shanghai.

Untuk informasi lebih lanjut, lihat Kelola layer. Untuk variabel yang tersedia dan dampaknya, lihat Variabel lingkungan.