Topik ini menjelaskan konsep dasar terkait pengembangan kode di Function Compute, termasuk penanganan, hook siklus hidup untuk instance fungsi, logging, dan penanganan kesalahan.
Penanganan
Anda harus menentukan sebuah penanganan saat membuat fungsi. Waktu proses Function Compute memuat dan memanggil penanganan ini untuk memproses permintaan. Penanganan diklasifikasikan ke dalam jenis-jenis berikut:
Penanganan acara
Penanganan acara digunakan untuk memproses permintaan dari berbagai sumber acara selain pemicu HTTP. Sumber acara tersebut mencakup Object Storage Service (OSS), Simple Log Service, dan pemicu ApsaraMQ for RocketMQ.
Penanganan HTTP
Penanganan HTTP digunakan untuk memproses permintaan HTTP. Untuk informasi lebih lanjut, lihat Konfigurasi dan gunakan pemicu HTTP.
Untuk mengonfigurasi penanganan untuk fungsi Anda, tentukan parameter Handler di dalam Function Compute console. Untuk informasi lebih lanjut, lihat Buat fungsi.
Hook siklus hidup untuk instance fungsi
Dalam mode sesuai permintaan, instance dibuat secara otomatis sesuai kebutuhan. Saat tidak sedang memproses permintaan, instance sesuai permintaan akan dibekukan. Instance tersebut akan dihapus jika tetap dalam kondisi beku selama periode waktu tertentu. Anda dapat mengonfigurasi hook siklus hidup untuk instance agar melakukan operasi panggilan balik ketika status instance berubah. Hook siklus hidup berikut dapat dikonfigurasi di Function Compute: Initializer, PreFreeze, dan PreStop. Untuk informasi lebih lanjut, lihat Siklus hidup instance fungsi.
Initializer hook
Hook Initializer dipanggil setelah instance diinisialisasi, tetapi sebelum penanganan dieksekusi. Function Compute memastikan bahwa hook Initializer hanya dieksekusi sekali selama siklus hidup instance. Jika eksekusi gagal, instance saat ini akan dihapus, dan yang baru akan dibuat untuk mencoba kembali eksekusi.
Anda dapat memasukkan logika layanan yang memakan waktu ke dalam hook Initializer. Dengan demikian, tidak perlu menjalankan logika layanan tersebut setiap kali fungsi dipanggil, sehingga mengurangi latensi fungsi. Contoh logika layanan yang memakan waktu meliputi pembuatan kumpulan koneksi, memuat dependensi fungsi, dan melakukan tugas lain terkait database.
PreFreeze hook
Hook PreFreeze dijalankan sebelum instance fungsi dibekukan. Anda dapat menggunakan hook ini untuk melakukan operasi yang diperlukan sebelum instance dibekukan, seperti menunggu metrik berhasil dikirim.
PreStop hook
Hook PreStop dijalankan sebelum instance fungsi dihapus. Anda dapat memanfaatkan hook ini untuk melakukan tugas tertentu sebelum instance dihapus. Sebagai contoh, Anda dapat mengonfigurasi hook PreStop untuk memastikan bahwa koneksi database ditutup dan status dilaporkan serta diperbarui sebelum instance dihapus.
Pengelolaan log
Anda harus mengonfigurasi Logstore tingkat layanan untuk menyimpan log fungsi dari Function Compute. Untuk informasi lebih lanjut, lihat Konfigurasi logging.
Jika Anda mengaktifkan fitur logging saat membuat layanan di konsol Function Compute, Logstore akan diatur secara otomatis untuk Anda.
Function Compute terintegrasi dengan Layanan Log Sederhana untuk menyimpan log pemanggilan fungsi dan log yang dicetak dalam kode fungsi ke Logstore. Anda dapat menggunakan pernyataan logging yang disediakan oleh Function Compute untuk mencatat log fungsi, yang memudahkan debugging dan pemecahan masalah. Tabel berikut menjelaskan pernyataan pencetakan log bawaan dari berbagai bahasa pemrograman, bersama dengan pernyataan logging yang disediakan oleh Function Compute.
Bahasa pemrograman | Pernyataan pencetakan log bawaan bahasa pemrograman | Pernyataan logging yang disediakan oleh Function Compute | Referensi |
Node.js | console.log() | context.logger.info() | |
Python | print() | logging.getLogger().info() | |
Java | System.out.println() | context.getLogger().info() | |
PHP | echo "" . PHP_EOL | $GLOBALS['fcLogger']->info() | |
C# | Console.WriteLine("") | context.Logger.LogInformation() |
Baik log yang dicetak menggunakan pernyataan pencetakan log bawaan bahasa pemrograman maupun pernyataan logging yang disediakan oleh Function Compute dikumpulkan dan disimpan di Logstore. Log terakhir ditandai dengan ID permintaan untuk mempermudah penyaringan.
# Log dicetak menggunakan pernyataan pencetakan log bawaan bahasa pemrograman
# print('hello world')
message: hello world
# Log dicetak menggunakan pernyataan logging yang disediakan oleh Function Compute
# logger.info('hello world')
message: 2020-03-13T04:06:49.099Z f84a9f4f-2dfb-41b0-9d6c-1682a2f3a650 [INFO] hello world
Elemen log
Log eksekusi fungsi berisi nama layanan, nama fungsi, versi saat ini, alias, dan log kode.
Contoh berikut menunjukkan struktur data log eksekusi fungsi:
__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: Sistem mencetak
FC Invoke Start RequestId: f84a9f4f-2dfb-41b0-9d6c-1682a2f3a650saat eksekusi fungsi dimulai.Sistem mencetak
FC Invoke End RequestId: f84a9f4f-2dfb-41b0-9d6c-1682a2f3a650saat eksekusi fungsi berakhir.
Penanganan kesalahan
Ada dua jenis kesalahan di Function Compute: HandledInvocationError dan UnhandledInvocationError.
HandledInvocationError
Hanya kesalahan yang dikembalikan oleh parameter
callbackdi Node.js yang termasuk dalam jenisHandledInvocationError. Informasi kesalahan terdapat dalam respons.'use strict'; module.exports.handler = function(event, context, callback) { console.log('hello world'); callback('this is error', 'hello world'); }Berikut adalah contoh pesan kesalahan:
{"errorMessage":"this is error"}UnhandledInvocationError
Semua kesalahan, kecuali yang dikategorikan sebagai kesalahan
HandledInvocationError, termasuk dalam kategoriUnhandledInvocationError.Properti
stackTracedari kesalahanUnhandledInvocationErrordicetak di log. Anda dapat melihat log untuk menemukanstackTraceyang sesuai berdasarkan konteks.
Lingkungan sistem operasi
Function Compute menggunakan Debian 9 LTS untuk eksekusi, dan hanya mendukung arsitektur x86_64.
Anda dapat memodifikasi lingkungan sistem operasi dengan mengonfigurasi lapisan atau variabel lingkungan. Sebagai contoh, Anda dapat mengonfigurasi variabel lingkungan untuk mengubah zona waktu. Secara default, instance fungsi berjalan dalam UTC. Jika Anda menetapkan nilai variabel lingkungan TZ menjadi Asia/Shanghai, Function Compute mengubah zona waktunya menjadi UTC+8. Untuk informasi lebih lanjut, lihat Kelola lapisan dan Variabel lingkungan.