All Products
Search
Document Center

Function Compute:Proses event layanan cloud dengan fungsi event

Last Updated:Apr 24, 2026

Fungsi event dapat merespons berbagai event yang dihasilkan oleh layanan cloud, seperti unggahan file ke Object Storage Service (OSS) atau alert yang dipicu oleh produk pemantauan. Dengan fungsi event, Anda hanya perlu menulis logika pemrosesan tanpa mengelola integrasi event atau sumber daya komputasi dasar. Function Compute secara otomatis menjalankan, menskalakan, dan menghentikan instans sesuai kebutuhan. Anda hanya membayar sumber daya yang digunakan.

Kasus penggunaan

Bayangkan Anda perlu menyimpan file di Object Storage Service (OSS). Untuk mempercepat unggahan, Anda mengompresi file tersebut ke dalam arsip ZIP terlebih dahulu. Namun, saat ingin menggunakan file tersebut, Anda menginginkan file aslinya, bukan arsip ZIP. Hal ini memerlukan dekompresi file secara otomatis dan menyimpannya kembali ke OSS.

Fungsi event memungkinkan Anda fokus pada kode pemrosesan file. Setiap kali file diunggah ke OSS, sebuah event dihasilkan. Jika event tersebut memenuhi kondisi yang Anda konfigurasikan, fungsi tersebut secara otomatis dipicu untuk menjalankan penanganan Anda. Setelah penanganan selesai, sumber daya komputasi dilepas untuk menghemat biaya.

Karena Anda mungkin belum memiliki bucket OSS, tutorial ini menunjukkan cara mengimplementasikan fungsi event menggunakan event simulasi.

Anda akan membuat event simulasi unggahan file Object Storage Service (OSS). Event ini memanggil fungsi event untuk memproses file dan mencetak informasi seperti nama file dan nama bucket ke konsol.

Dengan menyelesaikan contoh ini, Anda akan mempelajari cara:

  1. Membuat fungsi event, menulis penanganan, dan menguji fungsi menggunakan konsol.

  2. Memahami konsep utama seperti Function Compute runtime dan runtime bawaan.

  3. Memahami parameter penanganan event dan context.

Prasyarat

Buat Akun Alibaba Cloud

Buat Akun Alibaba Cloud dan lengkapi verifikasi nama asli.

Aktifkan Function Compute

Jika Anda membuat Akun Alibaba Cloud dan menyelesaikan verifikasi nama asli pada atau setelah 27 Agustus 2024, Anda dapat menggunakan Function Compute tanpa aktivasi manual. Saat pertama kali login ke Function Compute console, Anda juga dapat mengikuti petunjuk di layar untuk mengklaim paket sumber daya uji coba gratis. Untuk informasi selengkapnya, lihat Kuota Uji Coba Gratis.

Jika Akun Alibaba Cloud Anda didaftarkan sebelum 27 Agustus 2024, lakukan langkah-langkah berikut untuk mengaktifkan layanan:

  1. Buka Function Compute product page.

  2. Klik Console untuk menuju halaman aktivasi. Klik Activate Now untuk mengaktifkan layanan dan menuju Function Compute console.

    Catatan
    • Kami menyarankan mengaktifkan layanan dengan Akun Alibaba Cloud Anda dan menggunakan RAM user untuk mengelola sumber daya seperti fungsi. Anda dapat memberikan RAM user hanya izin yang diperlukan untuk bisnis Anda berdasarkan prinsip hak istimewa minimal. Untuk informasi selengkapnya, lihat Kebijakan dan contoh kebijakan.

  3. (Opsional) Saat pertama kali login ke Function Compute console, Anda perlu mengklik OK pada kotak dialog Alibaba Cloud Service Authorization yang muncul untuk membuat peran terkait layanan. Peran ini memungkinkan Function Compute mengakses layanan cloud lainnya.

    Setelah peran terkait layanan dibuat, Function Compute dapat mengakses sumber daya cloud Anda seperti VPC, ECS, Simple Log Service (SLS), dan Container Registry. Untuk informasi selengkapnya tentang peran terkait layanan, lihat Peran terkait layanan.

Prosedur

1. Pilih jenis fungsi

  1. Login ke Function Compute console. Di panel navigasi kiri, pilih Function Management > Functions. Di bilah navigasi atas, pilih wilayah tempat Anda ingin membuat fungsi. Klik Create Function, lalu ikuti petunjuk di layar untuk memilih dan membuat Event Function.

2. Pilih runtime

Python

Untuk Runtime, pilih Built-in Runtime > Python > Python 3.10.

image

Kami menyarankan menggunakan built-in runtime untuk fungsi event Anda. built-in runtime mencakup dependensi yang diperlukan untuk merespons event dari layanan cloud lainnya, seperti modul oss2 untuk Python. Untuk informasi selengkapnya, lihat Ikhtisar lingkungan runtime. Jika Anda menggunakan custom runtime atau custom image, Anda harus menginstal dependensi yang diperlukan. Untuk perbandingan detail antar runtime, lihat Pilih runtime.

Node.js

Untuk Runtime, pilih Built-in Runtime > Node.js > Node.js 20.

image

Kami menyarankan menggunakan built-in runtime untuk fungsi event Anda. built-in runtime mencakup dependensi yang diperlukan untuk merespons event dari layanan cloud lainnya, seperti modul ali-oss untuk Node.js. Untuk informasi selengkapnya, lihat Ikhtisar lingkungan runtime. Jika Anda menggunakan custom runtime atau custom image, Anda harus menginstal dependensi yang diperlukan. Untuk perbandingan detail antar runtime, lihat Pilih runtime.

3. Buat fungsi

Pilih Hello, world! example. Pertahankan nilai default untuk Advanced Settings, lalu klik Create. Tunggu hingga pembuatan fungsi selesai.

image

Setelah fungsi dibuat, Anda dapat melihat kode contoh yang dihasilkan di WebIDE pada tab Code. Gambar berikut menunjukkan contoh dalam Python.

image.png

Kode contoh Hello, world! secara otomatis menghasilkan templat fungsi beserta titik masuknya. Anda dapat langsung mengembangkan kode bisnis Anda berdasarkan templat ini pada langkah-langkah selanjutnya.

4. Modifikasi dan deploy kode contoh

Bahasa interpretatif seperti Python dan Node.js memungkinkan Anda langsung memodifikasi dan mendeploy kode di WebIDE. Bahasa terkompilasi seperti Java hanya mendukung kompilasi paket kode secara lokal lalu mengunggahnya, dan tidak mendukung WebIDE.

Python

Di WebIDE konsol, buka index.py. Ganti kode saat ini dengan kode berikut, lalu klik Deploy untuk menerapkan perubahan.

index.py

# -*- coding: utf-8 -*-
import logging
import json
# import oss2  # Hapus komentar baris ini jika Anda perlu membuat klien OSS.
logger = logging.getLogger()


def handler(event, context):  # Penanganan adalah titik masuk untuk eksekusi kode.
    logger.info("Mengurai informasi event...")
    input_events = json.loads(event)
    if not input_events.get('events'):  # Periksa format event masuk.
        raise Exception("Format event tidak valid: Array events tidak ada atau kosong.")
    event_obj = input_events['events'][0]
    bucket_name = event_obj['oss']['bucket']['name']  # Mengurai nama Bucket OSS.
    object_name = event_obj['oss']['object']['key']  # Mengurai nama file.
    region = context.region  # Mengurai wilayah tempat fungsi berada.
    logger.info(f"Nama bucket OSS: {bucket_name}, Nama file: {object_name}, Wilayah: {region}")
    # Jika Anda memiliki Bucket OSS, Anda dapat menghapus komentar baris berikut untuk membuat instance klien OSS.
    # bucket = get_bucket(region, bucket_name, context)
    bucket = None
    result = process_event(bucket, object_name)  # Panggil subrutin untuk menjalankan logika pemrosesan event.
    return result


def process_event(bucket, object_name):
    logger.info("Memulai pemrosesan event...")
    # Anda dapat menulis logika pemrosesan event di sini.
    # zip_file = download_file(bucket, object_name)
    # result = extract_and_upload(bucket, zip_file)
    logger.info("Pemrosesan event selesai.")
    result = 0
    return result  # Nilai kembali 0 menunjukkan bahwa event berhasil diproses.


# def get_bucket(region, bucket_name, context):
#     # Buat instance klien Bucket OSS. Informasi otentikasi yang diperlukan dapat diperoleh dari konteks.
#     creds = context.credentials  # Dapatkan token STS.
#     auth = oss2.StsAuth(
#         creds.access_key_id,
#         creds.access_key_secret,
#         creds.security_token)
#     endpoint = f'oss-{region}-internal.aliyuncs.com'
#     bucket = oss2.Bucket(auth, endpoint, bucket_name)
#     return bucket


# def download_file(bucket, object_name):
#     # Ini adalah kode contoh untuk mengunduh file dari OSS.
#     try:
#         file_obj = bucket.get_object(object_name)
#         return file_obj
#     except oss2.exceptions.OssError as e:
#         logger.error(f"Gagal mengunduh file. {e}")


# def extract_and_upload(bucket, file_obj):
#     # Anda dapat menentukan logika untuk mendekompresi dan mengunggah file ke OSS di sini.
#     return 0;

Pahami kode fungsi

  • def handler(event, context):

    • handler: Fungsi Python ini merupakan fungsi penanganan. Kode Anda mungkin berisi beberapa fungsi Python, tetapi penanganan selalu menjadi titik masuk untuk eksekusi kode. Saat mengubah kode, jangan mengganti nama penanganan agar Function Compute (FC) dapat mengenalinya dengan benar. Untuk informasi selengkapnya, lihat Apa itu penanganan?.

      image

    • event: Saat event memicu fungsi, informasi terkait event diteruskan melalui parameter event. Contohnya termasuk nama Bucket dan nama file dalam event unggahan file OSS. Parameter ini berupa objek JSON. Untuk mengetahui informasi yang dikandung event untuk berbagai jenis event, lihat Format event pemicu.

    • context: Objek konteks untuk runtime fungsi diteruskan ke fungsi melalui parameter context. Objek ini berisi informasi tentang pemanggilan, konfigurasi fungsi, dan otentikasi. Informasi otentikasi berasal dari izin peran yang dikonfigurasikan untuk fungsi. Setelah Anda mengonfigurasi peran untuk fungsi, FC memperoleh token STS dengan memanggil AssumeRole, lalu meneruskan token tersebut ke fungsi Anda dalam bidang credentials objek context. Untuk informasi selengkapnya, lihat Gunakan peran fungsi untuk memberikan izin fungsi mengakses layanan cloud lainnya. Untuk detail informasi yang dikandung objek konteks, lihat Konteks.

  • logger.info(): Anda dapat menggunakan fitur logging standar bahasa pemrograman untuk mengeluarkan log. Misalnya, dalam Python, gunakan metode dari modul logging untuk mencatat informasi ke log. Contoh dalam topik ini menggunakan pernyataan tersebut untuk mencetak nama Bucket, nama file, dan nama wilayah. Setelah fungsi dipanggil, Anda dapat melihat output log di konsol. Untuk informasi selengkapnya, lihat Log.

Node.js

Di WebIDE konsol, buka index.mjs. Ganti kode saat ini dengan kode berikut, lalu klik Deploy untuk menerapkan perubahan.

index.mjs

'use strict';
// import OSSClient from 'ali-oss'; // Hapus komentar baris ini jika Anda perlu membuat klien OSS.

export const handler = async (event, context) => { // Penanganan adalah titik masuk untuk eksekusi kode.
  console.log("Mengurai informasi event...");
  const inputEvents = JSON.parse(event);
  if (!Array.isArray(inputEvents.events) || inputEvents.events.length === 0) { // Periksa format event masuk.
    throw new Error("Format event tidak valid: Array events tidak ada atau kosong.");
  }
  const eventObj = inputEvents.events[0];
  const bucketName = eventObj.oss.bucket.name; // Mengurai nama Bucket OSS.
  const objectName = eventObj.oss.object.key; // Mengurai nama file.
  const region = context.region;  // Mengurai wilayah tempat fungsi berada.
  console.log(`Nama bucket OSS: ${bucketName}, Nama file objek: ${objectName}, Wilayah: ${region}`);
  // Jika Anda memiliki Bucket OSS, Anda dapat menghapus komentar baris berikut untuk membuat instance klien OSS.
  // const bucket = getBucket(region, context)
  const bucket = null;
  const result = processEvent(bucket, objectName); // Panggil subrutin untuk menjalankan logika pemrosesan event.
  return result;
};


async function processEvent (bucket, objectName) {
  console.log("Memulai pemrosesan event...");
  // Anda dapat menulis logika pemrosesan event di sini.
  // const zipFile = downloadFile(bucket, objectName);
  // const result = extractAndUpload(bucket, zipFile);
  console.log("Pemrosesan event selesai.");
  const result = 0;
  return result;
}


// function getBucket (region, context) {
//   // Buat instance klien Bucket OSS. Informasi otentikasi yang diperlukan dapat diperoleh dari konteks.
//   const bucket = new OSSClient({
//     region: region,
//     accessKeyId: context.credentials.accessKeyId,
//     accessKeySecret: context.credentials.accessKeySecret,
//     securityToken: context.credentials.securityToken
//   });
//   return bucket;
// }


// async function downloadFile (bucket, objectName) {
//   try {
//     // Ini adalah kode contoh untuk mengunduh file dari OSS.
//     const result = await bucket.get(objectName, objectName);
//     console.log(result);
//     return result;
//   } catch (e) {
//     console.log(e);
//   }
// }

// async function extractAndUpload (bucket, zipFile) {
//     // Anda dapat menentukan logika untuk mendekompresi dan mengunggah file ke OSS di sini.
//     return 0;
// }

Pahami kode fungsi

  • export const handler = async (event, context)

    • handler: Fungsi Node.js ini adalah penanganan. Kode Anda mungkin berisi beberapa fungsi Node.js, tetapi penanganan selalu menjadi titik masuk untuk eksekusi kode. Saat memodifikasi kode, jangan mengubah nama penanganan agar Function Compute (FC) dapat mengenalinya dengan benar. Untuk informasi selengkapnya, lihat Apa itu penanganan?.

      2025-01-23_15-42-21 (1)

    • event: Saat event memicu fungsi, informasi terkait event diteruskan melalui parameter event. Contohnya termasuk nama Bucket dan nama file dalam event unggahan file OSS. Parameter ini berupa objek JSON. Untuk mengetahui informasi yang dikandung event untuk berbagai jenis event, lihat Format event pemicu.

    • context: Objek konteks untuk runtime fungsi diteruskan ke fungsi melalui parameter context. Objek ini berisi informasi tentang pemanggilan, konfigurasi fungsi, dan otentikasi. Informasi otentikasi berasal dari izin peran yang dikonfigurasikan untuk fungsi. Setelah Anda mengonfigurasi peran untuk fungsi, FC memperoleh token STS dengan memanggil AssumeRole, lalu meneruskan token tersebut ke fungsi Anda dalam bidang credentials objek context. Untuk informasi selengkapnya, lihat Gunakan peran fungsi untuk memberikan izin fungsi mengakses layanan cloud lainnya. Untuk detail informasi yang dikandung objek konteks, lihat Konteks.

  • console.log(): Anda dapat menggunakan fitur logging standar bahasa pemrograman untuk mengeluarkan log. Misalnya, dalam Node.js, gunakan modul console untuk mencatat informasi ke log. Contoh dalam topik ini menggunakan pernyataan tersebut untuk mencetak nama Bucket, nama file, dan nama wilayah. Setelah fungsi dipanggil, Anda dapat melihat output log di konsol. Untuk informasi selengkapnya, lihat Log.

5. Uji fungsi

Untuk mensimulasikan skenario di mana unggahan file ke OSS memicu fungsi, definisikan event tiruan dan gunakan untuk memicu fungsi.

Selain menguji dengan event tiruan, Anda juga dapat menggunakan event OSS nyata untuk memicu fungsi. Untuk informasi selengkapnya, lihat Operasi lanjutan.
  1. Buat event tiruan: Di halaman Function Details, klik tab Code. Klik panah tarik-turun di samping Test Function dan pilih Configure Test Parameters. Di bagian Event Template, pilih Object Storage Service (OSS). Event tiruan akan dihasilkan secara otomatis dengan format yang sama seperti event OSS nyata.

    Anda dapat menyesuaikan Event Name serta nilai parameter dalam objek event, seperti nama Bucket OSS dan nama file. Setelah selesai, klik OK.

    image

    Contoh event tiruan OSS

    Kode berikut menunjukkan event contoh dari gambar sebelumnya. Anda dapat menempelkannya ke dalam kotak teks untuk parameter uji lalu melanjutkan ke langkah berikutnya.

    {
        "events": [
            {
                "eventName": "ObjectCreated:PutObject",
                "eventSource": "acs:oss",
                "eventTime": "2024-08-13T06:45:43.000Z",
                "eventVersion": "1.0",
                "oss": {
                    "bucket": {
                        "arn": "acs:oss:cn-hangzhou:164901546557****:test-bucket",
                        "name": "test-bucket",
                        "ownerIdentity": "164901546557****"
                    },
                    "object": {
                        "deltaSize": 122539,
                        "eTag": "688A7BF4F233DC9C88A80BF985AB****",
                        "key": "source/example.zip",
                        "size": 122539
                    },
                    "ossSchemaVersion": "1.0",
                    "ruleId": "9adac8e253828f4f7c0466d941fa3db81161****"
                },
                "region": "cn-hangzhou",
                "requestParameters": {
                    "sourceIPAddress": "140.205.XX.XX"
                },
                "responseElements": {
                    "requestId": "58F9FF2D3DF792092E12044C"
                },
                "userIdentity": {
                    "principalId": "164901546557****"
                }
            }
        ]
    }
  2. Di tab Code, klik Test Function untuk segera memicu fungsi. Setelah fungsi berhasil dijalankan, lihat Response. Kode contoh mengembalikan 0, yang menunjukkan bahwa event berhasil diproses. Klik Log Output untuk melihat informasi log yang dikeluarkan selama eksekusi fungsi.

    Saat menguji fungsi, Function Compute meneruskan konten event tiruan ke handler melalui parameter event. Fungsi tersebut kemudian menjalankan kode yang Anda definisikan pada langkah sebelumnya, yang mengurai parameter event dan memproses file.

    image.png

6. (Opsional) Bersihkan sumber daya

Function Compute dikenai biaya berdasarkan penggunaan sumber daya. Anda tidak dikenai biaya untuk fungsi yang tidak digunakan. Namun, perlu diingat bahwa sumber daya terkait dari layanan cloud lainnya—seperti data yang disimpan di Object Storage Service (OSS) dan Apsara File Storage NAS—dapat dikenai biaya secara terpisah.

Untuk menghapus fungsi, masuk ke Function Compute console. Di panel navigasi kiri, pilih Function Management > Functions. Pilih wilayah, temukan fungsi yang ingin dihapus, lalu klik Delete pada kolom Actions. Di kotak dialog yang muncul, pastikan fungsi tersebut tidak memiliki sumber daya terkait, seperti pemicu, lalu konfirmasi penghapusan.

Operasi lanjutan

Anda telah berhasil membuat fungsi event, memodifikasi penanganan, dan menguji fungsi menggunakan event simulasi di konsol. Untuk langkah selanjutnya, rujuk operasi lanjutan berikut sesuai kebutuhan:

  • Tambahkan pemicu:

    • Topik ini menggunakan event simulasi unggahan file Object Storage Service (OSS) untuk pengujian karena Anda mungkin belum memiliki bucket OSS. Jika ingin menggunakan fungsi ini untuk keperluan bisnis, tambahkan pemicu OSS ke fungsi tersebut. Untuk informasi selengkapnya, lihat Konfigurasikan pemicu OSS native.

    • Selain OSS, event dari berbagai layanan Alibaba Cloud lainnya juga dapat memicu Function Compute. Layanan tersebut mencakup berbagai antrian pesan, Tablestore, dan Simple Log Service (SLS). Untuk daftar lengkap pemicu yang didukung, lihat Pengantar pemicu.

  • Tambahkan dependensi: Runtime bawaan menyertakan pustaka dependensi umum untuk pemrosesan event. Namun, pustaka tersebut mungkin tidak memenuhi semua kebutuhan bisnis Anda. Solusi paling sederhana adalah mengemas kode beserta dependensi tambahannya ke dalam file ZIP, lalu mengunggah dan mendeploy paket tersebut ke Function Compute. Untuk informasi selengkapnya, lihat Deploy paket kode. Untuk mengurangi ukuran paket kode dan mempercepat cold start, kelola dependensi menggunakan layer. Untuk informasi selengkapnya, lihat Buat layer kustom.

  • Konfigurasikan log: Konfigurasikan logging untuk fungsi Anda guna mendukung debugging, troubleshooting, dan audit keamanan. Untuk langkah-langkah detailnya, lihat Konfigurasikan fitur logging.

Dokumen terkait