All Products
Search
Document Center

Function Compute:Proses unggahan file OSS dengan fungsi event

Last Updated:Jul 16, 2026

Fungsi event dapat merespons berbagai event dari layanan cloud, seperti unggahan file ke Object Storage Service (OSS) atau alert yang dipicu oleh layanan pemantauan. Saat menggunakan fungsi event, Anda hanya perlu menulis logika pemrosesan—tanpa perlu mengelola integrasi event atau sumber daya komputasi yang mendasarinya. Function Compute menjalankan instans hanya saat diperlukan, melakukan scaling secara otomatis, dan menghapus instans setelah event selesai diproses. Anda hanya dikenai biaya berdasarkan sumber daya yang digunakan.

Kasus penggunaan

Bayangkan Anda perlu menyimpan file di OSS. Untuk mempercepat unggahan, Anda terlebih dahulu mengompres file tersebut ke dalam format ZIP. Namun, Anda ingin menggunakan file tersebut secara langsung, bukan arsip ZIP-nya. Hal ini memerlukan proses otomatis untuk mengekstrak file dan menyimpannya kembali ke OSS.

Pendekatan tradisional mengharuskan Anda membangun dan mengintegrasikan beberapa program untuk memantau serta menangani perubahan file di OSS, serta men-deploy dan memelihara program-program tersebut. Dengan fungsi event, Anda dapat fokus sepenuhnya pada logika pemrosesan file. Setiap kali file diunggah ke OSS, sebuah event akan dihasilkan. Jika event tersebut memenuhi kondisi yang telah Anda tentukan, fungsi tersebut akan secara otomatis dipicu untuk menjalankan handler Anda. Setelah tugas selesai, Function Compute secara otomatis melepaskan sumber daya komputasi guna menghemat biaya.

Karena Anda mungkin belum memiliki bucket OSS, tutorial ini menggunakan contoh praktis untuk memandu Anda dalam mengimplementasikan fungsi event.

Anda akan membuat simulasi event unggahan file OSS. Event ini memanggil fungsi event untuk memproses file dan mencetak informasi—seperti nama file dan nama bucket—di Konsol.

Dalam tutorial ini, Anda akan mempelajari cara:

  1. Menggunakan Konsol untuk membuat fungsi event, menulis handler, dan menguji fungsi secara end-to-end.

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

  3. Memahami parameter handler event dan context.

Prasyarat

Daftarkan Akun Alibaba Cloud

Daftarkan Akun Alibaba Cloud dan lengkapi otentikasi identitas.

Aktifkan Function Compute

Jika Akun Alibaba Cloud Anda didaftarkan dan diverifikasi pada atau setelah 27 Agustus 2024, Anda dapat langsung menggunakan Function Compute tanpa perlu aktivasi. Saat pertama kali login ke Konsol Function Compute, Anda juga dapat mengklaim uji coba gratis berdasarkan petunjuk di layar. Untuk informasi lebih lanjut, lihat Uji Coba Gratis.

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

  1. Buka halaman produk Function Compute.

  2. Klik Console untuk membuka halaman aktivasi. Klik Buy Now untuk mengaktifkan layanan dan masuk ke Konsol Function Compute.

    Catatan
    • Kami menyarankan agar Anda mengaktifkan layanan menggunakan Akun Alibaba Cloud Anda dan menggunakan RAM user untuk mengelola fungsi serta aplikasi terkait. Berikan RAM user hanya izin yang diperlukan untuk bisnis Anda. Untuk informasi lebih lanjut, lihat Kebijakan izin dan contoh.

  3. (Opsional) Saat pertama kali login ke Konsol Function Compute, klik OK pada kotak dialog Alibaba Cloud Service Authorization untuk membuat service-linked role. Hal ini memungkinkan Function Compute mengakses layanan cloud lainnya.

    Setelah role dibuat, Function Compute dapat mengakses sumber daya cloud Anda seperti VPC, ECS, Simple Log Service (SLS), dan Container Registry. Untuk informasi lebih lanjut tentang service-linked role, lihat Service-linked role.

Prosedur

Langkah 1: Pilih jenis fungsi

  1. Login ke Konsol Function Compute. Di panel navigasi kiri, pilih Function Management > Functions. Di bilah navigasi atas, pilih wilayah tempat Anda ingin membuat fungsi, klik Create Function, lalu pilih dan buat Event Function sesuai petunjuk.

Langkah 2: Pilih runtime

Python

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

Kami menyarankan Anda menggunakan built-in runtime untuk fungsi event karena sudah mencakup dependensi yang diperlukan untuk merespons event dari layanan cloud lain (misalnya modul Python oss2). Untuk informasi lebih lanjut, lihat Environment overview. Jika Anda menggunakan custom runtime atau Custom Container runtime, Anda harus menginstal dependensinya sendiri. Untuk perbandingan detail antar runtime, lihat Select a runtime.

Node.js

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

Kami menyarankan Anda menggunakan built-in runtime untuk fungsi event karena sudah mencakup dependensi yang diperlukan untuk merespons event dari layanan cloud lain (misalnya modul Node.js ali-oss). Untuk informasi lebih lanjut, lihat Environment overview. Jika Anda menggunakan custom runtime atau Custom Container runtime, Anda harus menginstal dependensinya sendiri. Untuk perbandingan detail antar runtime, lihat Select a runtime.

Langkah 3: Buat fungsi

Pilih sampel Hello, world! untuk membuat fungsi. Pertahankan nilai default untuk Advanced Settings, lalu klik Create.

Setelah fungsi dibuat, Anda dapat melihat kode sampel yang dihasilkan di WebIDE pada tab Code. Berikut adalah kode sampel untuk Python.

# -*- coding: utf-8 -*-
import logging
import json

# Untuk mengaktifkan fitur initializer (https://www.alibabacloud.com/help/document_detail/2513452.html)
# implementasikan fungsi initializer seperti di bawah ini:
# def initializer(context):
#   logger = logging.getLogger()
#   logger.info('initializing')


def handler(event, context):
    # evt = json.loads(event)
    logger = logging.getLogger()
    logger.info('hello world')
    return 'hello world'
Kode sampel Hello, world! secara otomatis menghasilkan templat fungsi dengan titik masuk. Anda dapat membangun kode bisnis Anda berdasarkan templat ini pada langkah-langkah selanjutnya.

Langkah 4: Modifikasi dan deploy kode sampel

Bahasa terkompilasi seperti Java tidak mendukung WebIDE; bahasa tersebut memerlukan kompilasi lokal dan unggah paket kode.

Python

Di WebIDE Konsol, buka index.py, ganti kode yang ada dengan kode berikut, lalu klik Deploy.

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):  # Handler adalah titik masuk untuk eksekusi kode.
    logger.info("Parsing event information...")
    input_events = json.loads(event)
    if not input_events.get('events'):  # Periksa format event input.
        raise Exception("Invalid event format: The events array does not exist or is empty.")
    event_obj = input_events['events'][0]
    bucket_name = event_obj['oss']['bucket']['name']  # Uraikan nama bucket OSS.
    object_name = event_obj['oss']['object']['key']  # Uraikan nama file.
    region = context.region  # Uraikan wilayah fungsi.
    logger.info(f"OSS bucket name: {bucket_name}, File name: {object_name}, Region: {region}")
    # Jika Anda memiliki bucket OSS, Anda dapat menghapus komentar baris berikut untuk membuat instans klien OSS.
    # bucket = get_bucket(region, bucket_name, context)
    bucket = None
    result = process_event(bucket, object_name)  # Panggil fungsi pembantu untuk menjalankan logika pemrosesan event.
    return result


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


# def get_bucket(region, bucket_name, context):
#     # Buat instans klien bucket OSS di sini. Informasi otentikasi identitas yang diperlukan dapat diperoleh dari context.
#     creds = context.credentials  # Dapatkan kunci sementara.
#     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 sampel 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"Failed to download the file: {e}")


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

Detail kode

  • def handler(event, context):

    • handler: Fungsi Python ini adalah handler. Kode Anda dapat mencakup beberapa fungsi Python, tetapi handler selalu menjadi titik masuk. Pertahankan nama handler agar tidak berubah sehingga Function Compute dapat menemukannya dengan benar. Untuk informasi lebih lanjut, lihat What is a handler?.

      Di Konsol Function Compute, pada halaman detail fungsi, klik tab Function Details, pilih sub-tab Configuration untuk melihat atau mengedit bidang Request Handler. Format bidang tersebut adalah [filename].[function_name], misalnya index.handler.

    • event: Saat sebuah event memicu fungsi, informasi tentang event tersebut—seperti nama bucket dan nama file untuk event unggahan file OSS—diteruskan melalui parameter event. Parameter ini merupakan objek JSON. Untuk informasi lebih lanjut tentang isi parameter event untuk berbagai jenis pemicu, lihat Trigger event format.

    • context: Objek context diteruskan ke fungsi Anda melalui parameter context. Objek ini berisi informasi tentang pemanggilan, konfigurasi fungsi, dan otentikasi. Informasi otentikasi berasal dari izin role yang dikonfigurasi untuk fungsi tersebut. Setelah Anda mengonfigurasi role, Function Compute (FC) memperoleh kunci sementara (token STS) dengan memanggil operasi AssumeRole dan meneruskan kunci tersebut ke fungsi Anda dalam bidang credentials pada objek context. Untuk informasi lebih lanjut, lihat Grant Function Compute permissions to access other cloud services by using a function role. Untuk memahami informasi yang terdapat dalam objek context, lihat Context.

  • logger.info(): Anda dapat menggunakan fitur logging standar dari bahasa pemrograman untuk menghasilkan log. Misalnya, dalam Python, Anda dapat menggunakan metode seperti modul logging untuk menulis informasi ke log. Contoh ini menggunakan pernyataan untuk mencetak nama Bucket, nama file, dan nama Wilayah. Setelah fungsi dipanggil, Anda dapat melihat output log di Konsol. Untuk informasi lebih lanjut, lihat Logs.

Node.js

Di WebIDE Konsol, buka index.mjs, ganti kode yang ada dengan kode berikut, lalu klik Deploy.

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) => { // Handler adalah titik masuk untuk eksekusi kode.
  console.log("Parsing event information...");
  const inputEvents = JSON.parse(event);
  if (!Array.isArray(inputEvents.events) || inputEvents.events.length === 0) { // Periksa format event input.
    throw new Error("Invalid event format: The events array does not exist or is empty.");
  }
  const eventObj = inputEvents.events[0];
  const bucketName = eventObj.oss.bucket.name; // Uraikan nama bucket OSS.
  const objectName = eventObj.oss.object.key; // Uraikan nama file.
  const region = context.region;  // Uraikan wilayah fungsi.
  console.log(`OSS bucket name: ${bucketName}, File name: ${objectName}, Region: ${region}`);
  // Jika Anda memiliki bucket OSS, Anda dapat menghapus komentar baris berikut untuk membuat instans klien OSS.
  // const bucket = getBucket(region, context)
  const bucket = null;
  const result = processEvent(bucket, objectName); // Panggil fungsi pembantu untuk menjalankan logika pemrosesan event.
  return result;
};


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


// function getBucket (region, context) {
//   // Buat instans klien bucket OSS di sini. Informasi otentikasi identitas yang diperlukan dapat diperoleh dari context.
//   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 sampel 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 mengekstrak dan mengunggah file ke OSS di sini.
//     return 0;
// }

Detail kode

  • export const handler = async (event, context)

    • handler: Fungsi Node.js ini adalah handler. Kode Anda dapat mencakup beberapa fungsi Node.js, tetapi handler selalu menjadi titik masuk. Pertahankan nama handler agar tidak berubah sehingga Function Compute dapat menemukannya dengan benar. Untuk informasi lebih lanjut, lihat What is a handler?.

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

    • event: Saat sebuah event memicu fungsi, parameter event meneruskan informasi tentang event tersebut—seperti nama bucket dan nama file untuk event unggahan file OSS. Parameter ini merupakan objek JSON. Untuk memahami informasi apa saja yang termasuk dalam event untuk berbagai jenis event, lihat Trigger event format.

    • context: Objek konteks runtime fungsi. Objek ini diteruskan ke fungsi Anda melalui parameter context dan berisi informasi seperti pemanggilan, konfigurasi fungsi, dan otentikasi identitas. Informasi otentikasi identitas berasal dari izin role yang dikonfigurasi untuk fungsi tersebut. Setelah Anda mengonfigurasi role untuk fungsi, FC memperoleh kunci sementara (Token STS) dengan memanggil operasi AssumeRole. Kemudian, FC meneruskan kunci sementara tersebut ke fungsi Anda melalui bidang credentials dalam objek context. Untuk informasi lebih lanjut, lihat Use a function role to grant Function Compute permissions to access other cloud services. Untuk memahami informasi apa saja yang terdapat dalam objek context, lihat Context.

  • console.log(): Anda dapat menggunakan fitur logging standar dari bahasa pemrograman, seperti modul console dalam Node.js, untuk mencetak informasi ke log. Contoh dalam topik ini menggunakan pernyataan untuk mencetak nama bucket, nama file, dan nama wilayah. Setelah fungsi dipanggil, Anda dapat melihat output log di Konsol. Untuk informasi lebih lanjut, lihat Logs.

Langkah 5: Uji fungsi

Untuk mensimulasikan pemicuan fungsi oleh unggahan file OSS, kami akan mendefinisikan event simulasi dan menggunakannya untuk memicu fungsi.

Selain menggunakan event simulasi, Anda juga dapat menggunakan event OSS nyata untuk memicu fungsi guna pengujian. Untuk informasi lebih lanjut, lihat Next steps.
  1. Buat event simulasi: Di halaman Function Details, klik tab Code. Klik panah tarik-turun di sebelah kanan Test Function dan pilih Configure Test Parameters. Di daftar Event Template, pilih OSS. Konsol secara otomatis menghasilkan event simulasi dalam format yang sama dengan event OSS nyata.

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

    Contoh event simulasi OSS

    Anda dapat menempelkan konten event sampel berikut ke dalam kotak teks parameter uji, lalu melanjutkan ke operasi 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 memicu fungsi. Setelah eksekusi berhasil, lihat Response. Nilai kembali 0 menunjukkan bahwa event berhasil diproses. Klik Log Output untuk melihat log yang dihasilkan selama eksekusi fungsi.

    Saat Anda menguji fungsi, Function Compute meneruskan konten event tiruan ke handler handler melalui parameter event dan mengeksekusi kode yang telah Anda definisikan pada langkah sebelumnya untuk mengurai parameter event dan memproses file.

    Output log menampilkan informasi kunci berikut: FunctionCompute python3 runtime inited, diikuti oleh empat entri log tingkat [INFO]: Parsing event information..., OSS bucket name is test-bucket, file name is source/example.zip, Region is cn-hangzhou, Starting event processing..., Event processing completed..., yang menunjukkan bahwa fungsi telah berhasil mengurai informasi event OSS simulasi dan menyelesaikan pemrosesan file.

Langkah 6: (Opsional) Bersihkan sumber daya

Function Compute dikenai biaya berdasarkan penggunaan sumber daya aktual. Fungsi yang tidak dipanggil tidak dikenai biaya. Namun, perhatikan produk cloud atau sumber daya lain yang terkait dengan fungsi tersebut, seperti data yang disimpan di OSS dan File Storage NAS (NAS).

Untuk menghapus fungsi, login ke Konsol Function Compute, pilih Function Management > Functions, lalu pilih wilayah. Di kolom Actions fungsi yang dituju, klik Delete. Di kotak dialog, pastikan fungsi tersebut tidak memiliki sumber daya terkait seperti trigger, lalu konfirmasi penghapusan.

Langkah selanjutnya

Anda kini telah membuat fungsi event di Konsol, memodifikasi handler, dan menguji fungsi dengan event tiruan. Anda dapat merujuk ke operasi lanjutan berikut berdasarkan kebutuhan bisnis Anda:

  • Tambahkan trigger:

    • Karena Anda mungkin belum memiliki bucket OSS, contoh ini menggunakan event unggahan OSS simulasi untuk pengujian. Untuk beban kerja nyata, tambahkan trigger OSS ke fungsi tersebut. Untuk informasi lebih lanjut, lihat Configure a native OSS trigger.

    • Selain penyimpanan objek, event dari banyak layanan Alibaba Cloud (seperti berbagai antrian pesan, Tablestore, dan SLS) juga dapat memicu Function Compute. Untuk daftar trigger yang didukung, lihat Trigger overview.

  • Tambahkan dependensi: Built-in runtimes mencakup dependensi umum untuk pemrosesan event, tetapi mungkin tidak memenuhi kebutuhan produksi Anda. Pendekatan paling sederhana adalah mengemas kode dan dependensi Anda ke dalam file ZIP (paket kode) dan mendeploynya ke Function Compute. Untuk informasi lebih lanjut, lihat Deploy a code package. Untuk mengurangi ukuran paket kode dan mempercepat cold start fungsi, gunakan layer untuk mengelola dependensi. Untuk informasi lebih lanjut, lihat Create a custom layer.

  • Konfigurasikan logging: Untuk memudahkan debugging, troubleshooting, atau audit keamanan fungsi, kami menyarankan agar Anda mengonfigurasi logging untuk fungsi Anda. Untuk informasi lebih lanjut, lihat Configure the logging feature.

Referensi