全部产品
Search
文档中心

Function Compute:Gunakan fungsi event untuk memproses event yang dihasilkan oleh layanan Alibaba Cloud

更新时间:Jul 06, 2025

Anda dapat membuat fungsi event untuk memproses berbagai event yang dihasilkan oleh layanan Alibaba Cloud. Event tersebut mencakup tetapi tidak terbatas pada pengunggahan file ke Object Storage Service (OSS) dan peringatan yang dipicu oleh produk pemantauan Anda. Untuk informasi lebih lanjut tentang event, lihat Ikhtisar Trigger. Saat mengimplementasikan fungsi event, Anda dapat fokus sepenuhnya pada logika bisnis Anda karena integrasi event dan manajemen sumber daya komputasi dasar ditangani oleh Function Compute. Selain itu, Function Compute menyediakan dan menyesuaikan instans secara otomatis sesuai permintaan, serta melepaskannya setelah pemrosesan event untuk memastikan Anda hanya membayar untuk sumber daya yang sebenarnya digunakan.

Skenario contoh

Pertimbangkan kebutuhan untuk menyimpan file yang tidak dikompresi di OSS sambil menerima unggahan ZIP untuk efisiensi transfer. Dalam hal ini, diperlukan proses otomatis untuk mendekompresi file dan menyimpannya kembali ke OSS.

Pendekatan konvensional akan memerlukan pembuatan dan integrasi beberapa program untuk memantau dan memproses perubahan file di OSS, sambil juga mempertimbangkan penyebaran dan pemeliharaan program-program tersebut. Sebaliknya, menggunakan fungsi event memungkinkan Anda fokus hanya pada logika dekompresi. Setiap kali file diunggah ke OSS, trigger event yang telah dikonfigurasi secara otomatis memanggil logika Anda jika event memenuhi kondisi yang ditentukan. Setelah pemrosesan, sumber daya komputasi dilepaskan secara otomatis, menghemat biaya.

Bagian berikut dari topik ini menunjukkan implementasi fungsi event.

Ini mensimulasikan event unggahan OSS yang memicu fungsi event untuk mendekompresi file, mencetak metadata file seperti nama dan informasi bucket di konsol Function Compute. Demo ini tidak bergantung pada sumber daya OSS aktual, sehingga Anda tidak perlu menyiapkan bucket OSS.

Berikut adalah item-item yang akan Anda pelajari dalam demo ini:

  1. Menyelesaikan seluruh proses pembuatan fungsi event, menulis handler, dan menguji fungsi di konsol Function Compute.

  2. Memahami konsep-konsep utama seperti lingkungan eksekusi Function Compute dan runtime bawaan.

  3. Belajar tentang parameter permintaan event dan context di handler.

Prasyarat

Akun Alibaba Cloud dibuat.

Akun Alibaba Cloud telah dibuat dan diverifikasi dengan autentikasi nama asli.

Function Compute diaktifkan.

Jika akun Alibaba Cloud Anda didaftarkan pada atau setelah 27 Agustus 2024 dan telah menyelesaikan verifikasi nama asli, Function Compute akan diaktifkan secara otomatis untuk Anda. Anda bisa mendapatkan uji coba gratis saat pertama kali masuk ke Konsol Function Compute. Untuk informasi lebih lanjut, lihat Kuota Percobaan Gratis.

Jika akun Alibaba Cloud Anda didaftarkan sebelum 27 Agustus 2024, lakukan langkah-langkah berikut untuk mengaktifkan Function Compute.

  1. Buka Halaman Produk Function Compute.

  2. Klik Console untuk pergi ke halaman pembelian Function Compute. Lalu, klik Buy Now untuk mengaktifkan Function Compute dan pergi ke Konsol Function Compute.

    Catatan
    • Kami merekomendasikan Anda mengaktifkan Function Compute menggunakan akun Alibaba Cloud Anda dan mengelola aplikasi seperti fungsi sebagai Pengguna Resource Access Management (RAM). Anda dapat memberikan izin minimal yang diperlukan kepada pengguna RAM. Untuk informasi lebih lanjut, lihat Kebijakan dan Contoh Kebijakan.

  3. (Opsional) Jika Anda masuk ke Konsol Function Compute untuk pertama kalinya, pesan Alibaba Cloud Service Authorization akan muncul. Klik OK untuk membuat peran terkait layanan untuk memberikan izin Function Compute untuk mengakses layanan Alibaba Cloud lainnya.

    Function Compute dapat menggunakan peran terkait layanannya untuk mengakses layanan Alibaba Cloud tertentu, seperti Virtual Private Cloud (VPC), Elastic Compute Service (ECS), Simple Log Service, dan Container Registry. Untuk informasi lebih lanjut, lihat Peran Terkait Layanan Function Compute.

Prosedur

1. Pilih tipe fungsi

  1. Masuk ke Konsol Function Compute. Di panel navigasi kiri, klik Functions. Di bilah navigasi atas, pilih wilayah tempat Anda ingin membuat fungsi, seperti Cina (Hangzhou). Lalu, klik Create Function.

  2. Di halaman Create Function, klik Event Function. Anda dapat menyesuaikan Function Name.image

2. Pilih runtime

Python

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

image

Kami merekomendasikan Anda menggunakan runtime bawaan untuk fungsi event Anda karena runtime bawaan mencakup dependensi yang diperlukan untuk merespons event dari layanan Alibaba Cloud lainnya. Misalnya, runtime Python bawaan mencakup modul oss2, yang diperlukan untuk mengakses OSS. Untuk informasi lebih lanjut, lihat Ikhtisar (Python). Jika Anda menggunakan runtime kustom atau runtime Kontainer Kustom, Anda harus menginstal dependensi yang diperlukan. Untuk informasi lebih lanjut tentang perbandingan antara berbagai jenis runtime, lihat Pemilihan Lingkungan Runtime Fungsi.

Node.js

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

image

Kami merekomendasikan Anda menggunakan runtime bawaan untuk fungsi event Anda karena runtime bawaan mencakup dependensi yang diperlukan untuk merespons event dari layanan Alibaba Cloud lainnya. Misalnya, runtime Node.js bawaan mencakup modul ali-oss, yang diperlukan untuk mengakses OSS. Untuk informasi lebih lanjut, lihat Ikhtisar (Node.js). Jika Anda menggunakan runtime kustom atau runtime Kontainer Kustom, Anda harus menginstal dependensi yang diperlukan. Untuk informasi lebih lanjut tentang perbandingan antara berbagai jenis runtime, lihat Pemilihan Lingkungan Runtime Fungsi.

3. Buat fungsi

Gunakan kode contoh Hello, world! untuk membuat fungsi. Pertahankan nilai default untuk Advanced Settings dan Environment Variables. Klik Create.

image

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

image.png

Seperti yang ditunjukkan pada gambar, template fungsi dengan handler dihasilkan secara otomatis. Anda dapat langsung menulis kode bisnis Anda berdasarkan template ini pada langkah-langkah berikutnya.

4. Ubah dan terapkan kode

Bahasa interpretasi seperti Python dan Node.js mendukung modifikasi kode langsung dan penyebaran dalam WebIDE, sedangkan bahasa yang dikompilasi seperti Java hanya memungkinkan kompilasi lokal paket kode untuk pengunggahan berikutnya dan tidak memiliki integrasi WebIDE.

Python

Buka index.py di WebIDE, ganti kode saat ini dengan kode berikut, dan klik Deploy.

index.py

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


def handler(event, context): # Handler berfungsi sebagai titik masuk untuk eksekusi kode.
    logger.info("Menguraikan informasi event...")
    input_events = json.loads(event)
    if not input_events.get('events'): # Periksa format event yang masuk.
        raise Exception("Format event tidak valid: array events hilang atau kosong")
    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 tempat fungsi berada.
    logger.info(f"Bucket OSS: {bucket_name}, file: {object_name}, wilayah: {region}")
    # Jika Anda sudah memiliki bucket OSS, hapus komentar bagian berikut untuk membuat instance klien OSS.
    # bucket = get_bucket(region, bucket_name, context)
    bucket = None
    result = process_event(bucket, object_name)  # Panggil subroutine pemrosesan event.
    return result


def process_event(bucket, object_name):
    logger.info("Memulai pemrosesan event...")
    # Tambahkan logika di sini untuk pemrosesan event.
    # zip_file = download_file(bucket, object_name)
    # result = extract_and_upload(bucket, zip_file)
    logger.info("Pemrosesan event selesai")
    result = 0
    return result  # 0 menunjukkan pemrosesan event berhasil.


# def get_bucket(region, bucket_name, context):
#     # Buat instance klien bucket OSS. Informasi autentikasi yang diperlukan dapat diperoleh dari konteks.
#     creds = context.credentials  # Dapatkan Token Layanan Keamanan (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):
#     # Contoh kode 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"Unduhan file gagal: {e}")


# def extract_and_upload(bucket, file_obj):
#     # Tambahkan logika di sini untuk mendekompres file dan mengunggahnya ke OSS.
#     return 0;

Deskripsi kode fungsi

  • def handler(event, context):

    • handler: Fungsi Python ini berfungsi sebagai handler. Meskipun kode Anda mungkin berisi beberapa fungsi Python, handler tetap menjadi titik masuk untuk eksekusi kode. Pertahankan nama handler tetap tidak berubah selama modifikasi kode untuk memastikan bahwa Function Compute mengenali handler dengan benar. Untuk informasi lebih lanjut, lihat Apa Itu Handler?

      image.png

    • event: Ketika sebuah event memicu fungsi, informasi terkait event, seperti nama bucket dan nama file dalam event pengunggahan file OSS, diteruskan ke fungsi melalui parameter event. Parameter ini diformat sebagai objek JSON. Untuk informasi lebih lanjut tentang apa saja yang termasuk dalam parameter event untuk setiap jenis event, lihat Format Event untuk Trigger Berbeda.

    • context: Objek konteks diteruskan ke fungsi melalui parameter context, berisi informasi tentang pemanggilan fungsi, konfigurasi, dan kredensial autentikasi. Kredensial autentikasi berasal dari peran yang ditetapkan untuk fungsi Anda. Berdasarkan peran fungsi, Function Compute memanggil operasi AssumeRole untuk mendapatkan token STS, yang kemudian diteruskan ke fungsi Anda melalui bidang credentials dalam objek context. Untuk informasi lebih lanjut tentang proses ini, lihat Gunakan Peran Fungsi untuk Memberikan Izin Function Compute Mengakses Layanan Cloud Lainnya. Untuk informasi lebih lanjut tentang apa saja yang termasuk dalam objek konteks, lihat Konteks.

  • logger.info(): Anda dapat menggunakan fitur logging standar bahasa pemrograman Anda untuk mengeluarkan log. Misalnya, dalam runtime Python, Anda dapat menggunakan modul logging untuk mencatat informasi. Demo ini mencetak nama bucket, nama file, dan wilayah. Setelah eksekusi fungsi, Anda dapat melihat keluaran log di konsol Function Compute. Untuk informasi lebih lanjut, lihat Log.

Node.js

Buka index.mjs di WebIDE, ganti kode saat ini dengan kode berikut, dan klik Deploy.

index.mjs

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

export const handler = async (event, context) => { // Handler berfungsi sebagai titik masuk untuk eksekusi kode.
  console.log("Menguraikan informasi event...");
  const inputEvents = JSON.parse(event);
  if (!Array.isArray(inputEvents.events) || inputEvents.events.length === 0) { // Periksa format event yang masuk.
    throw new Error("Format event tidak valid: array events hilang atau kosong");
  }
  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 tempat fungsi berada.
  console.log(`Bucket OSS: ${bucketName}, objek: ${objectName}, wilayah: ${region}`);
  // Jika Anda sudah memiliki bucket OSS, hapus komentar bagian berikut untuk membuat instance klien OSS.
  // const bucket = getBucket(region, context)
  const bucket = null;
  const result = processEvent(bucket, objectName); // Panggil subroutine pemrosesan event.
  return result;
};


async function processEvent (bucket, objectName) {
  console.log("Memulai pemrosesan event...");
  // Tambahkan logika di sini untuk pemrosesan event.
  // 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 autentikasi 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 {
//     // Contoh kode 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) {
//     // Tambahkan logika di sini untuk mendekompres file dan mengunggahnya ke OSS.
//     return 0;
// }

Deskripsi kode fungsi

  • export const handler = async (event, context)

    • handler: Fungsi Node.js ini berfungsi sebagai handler. Meskipun kode Anda mungkin berisi beberapa fungsi Node.js, handler tetap menjadi titik masuk untuk eksekusi kode. Pertahankan nama handler tetap tidak berubah selama modifikasi kode untuk memastikan bahwa Function Compute mengenali handler dengan benar. Untuk informasi lebih lanjut, lihat Apa Itu Handler?

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

    • event: Ketika sebuah event memicu fungsi, informasi terkait event, seperti nama bucket dan nama file dalam event pengunggahan file OSS, diteruskan ke fungsi melalui parameter event. Parameter ini diformat sebagai objek JSON. Untuk informasi lebih lanjut tentang apa saja yang termasuk dalam parameter event untuk setiap jenis event, lihat Format Event untuk Trigger Berbeda.

    • context: Objek konteks diteruskan ke fungsi melalui parameter context, berisi informasi tentang pemanggilan fungsi, konfigurasi, dan kredensial autentikasi. Kredensial autentikasi berasal dari peran yang ditetapkan untuk fungsi Anda. Berdasarkan peran fungsi, Function Compute memanggil operasi AssumeRole untuk mendapatkan token Security Token Service (STS), yang kemudian diteruskan ke fungsi Anda melalui bidang credentials dalam objek context. Untuk informasi lebih lanjut tentang proses ini, lihat Gunakan Peran Fungsi untuk Memberikan Izin Function Compute Mengakses Layanan Cloud Lainnya. Untuk informasi lebih lanjut tentang apa saja yang termasuk dalam objek konteks, lihat Konteks.

  • console.log(): Anda dapat menggunakan fitur logging standar bahasa pemrograman Anda untuk mengeluarkan log. Misalnya, dalam runtime Node.js, Anda dapat menggunakan modul console untuk mencatat informasi. Demo ini mencetak nama bucket, nama file, dan wilayah. Setelah eksekusi fungsi, Anda dapat melihat keluaran log di konsol Function Compute. Untuk informasi lebih lanjut, lihat Log.

5. Uji fungsi

Untuk mensimulasikan pengunggahan file ke OSS yang memicu fungsi, kami akan mendefinisikan event simulasi dan menggunakannya untuk memanggil fungsi.

Selain pengujian dengan event simulasi, Anda juga dapat menguji menggunakan event OSS nyata untuk memicu fungsi. Untuk informasi lebih lanjut, lihat Operasi Lanjutan.
  1. Buat Event Simulasi: Di halaman Function Details, klik tab Code, klik ikon drop-down di sebelah Test Function, lalu pilih Configure Test Parameters dari daftar drop-down. Di panel Konfigurasikan Parameter Uji, pilih OSS dari daftar drop-down Event Template. Sebuah event simulasi dihasilkan secara otomatis dalam format yang sama dengan event OSS nyata.

    Anda dapat menyesuaikan Event Name dan nilai parameter objek event, seperti nama bucket OSS dan nama file. Klik OK.

    image.png

    Contoh Event Simulasi OSS

    Konten event yang dihasilkan sesuai dengan pengaturan yang ditunjukkan pada tangkapan layar di atas adalah sebagai berikut. Anda dapat menempelkan kode yang sesuai ke dalam parameter uji dan 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. Klik Test Function untuk memicu eksekusi segera. Setelah eksekusi, periksa hasilnya di tab Response. Nilai balik 0 menunjukkan bahwa event telah diproses dengan sukses. Klik Log Output untuk melihat informasi log yang dihasilkan selama eksekusi.

    Untuk menguji fungsi, Function Compute meneruskan konten event simulasi ke handler melalui parameter event dan mengeksekusi kode yang telah Anda terapkan pada langkah sebelumnya, yang melibatkan penguraian parameter event dan memproses file.

    image.png

6. (Opsional) Bersihkan sumber daya

Function Compute ditagih berdasarkan sumber daya aktual yang Anda konsumsi. Fungsi yang dibuat hanya dikenakan biaya saat digunakan. Perhatikan layanan atau sumber daya Alibaba Cloud lainnya yang digunakan saat fungsi dipanggil, seperti data yang disimpan di OSS dan File Storage NAS (NAS).

Untuk menghapus fungsi, masuk ke Konsol Function Compute. Di panel navigasi kiri, klik Functions. Di bilah navigasi atas, pilih wilayah. Di halaman Fungsi, temukan fungsi yang ingin Anda hapus dan pilih the vertical ellipsis icon > Delete di kolom Actions. Di kotak dialog yang muncul, konfirmasikan bahwa fungsi yang ingin Anda hapus tidak terikat pada sumber daya apa pun. Lalu, klik Hapus.

image

Operasi lanjutan

Anda sekarang telah membuat fungsi event melalui Konsol Function Compute, mengonfigurasi handler fungsi, dan menguji fungsi menggunakan event simulasi event. Untuk konfigurasi lebih lanjut, lihat operasi lanjutan berikut berdasarkan kebutuhan bisnis Anda:

  • Tambahkan Trigger:

    • Mengingat bahwa Anda mungkin belum memiliki bucket OSS, demo dalam topik ini menggunakan event OSS simulasi untuk pengujian, tanpa bergantung pada sumber daya OSS aktual. Namun, jika Anda ingin memproses event OSS nyata dalam bisnis Anda, Anda harus menambahkan trigger OSS untuk fungsi Anda. Untuk informasi lebih lanjut tentang menambahkan trigger, lihat Konfigurasikan Trigger OSS Asli.

    • Selain OSS, event dari berbagai layanan Alibaba Cloud lainnya (seperti layanan antrian pesan, Tablestore, dan Simple Log Service) juga dapat memicu eksekusi fungsi di Function Compute. Untuk informasi lebih lanjut tentang jenis trigger yang didukung oleh Function Compute, lihat Jenis Trigger.

  • Tambahkan Dependensi: Meskipun dependensi umum untuk pemrosesan event sudah termasuk dalam setiap runtime bawaan Function Compute, mereka mungkin tidak memenuhi kebutuhan bisnis spesifik Anda. Dalam hal ini, solusi paling sederhana adalah mengemas kode Anda dan dependensi tambahan ke dalam file ZIP dan menyebarkannya ke Function Compute. Untuk langkah-langkah rinci, lihat Sebarkan Paket Kode. Jika Anda ingin mengurangi ukuran paket kode untuk mengurangi cold start fungsi, Anda dapat menggunakan layer untuk mengelola dependensi. Untuk informasi lebih lanjut, lihat Buat Layer Kustom.

  • Konfigurasikan Logging: Untuk memudahkan debugging, pemecahan masalah, dan audit keamanan fungsi, kami merekomendasikan Anda mengonfigurasi fitur logging untuk fungsi Anda. Untuk langkah-langkah rinci, lihat Konfigurasikan Fitur Logging.

Referensi