All Products
Search
Document Center

Function Compute:Konfigurasikan pemicu OSS berbasis EventBridge

Last Updated:Mar 20, 2026

Untuk menetapkan beberapa awalan dan akhiran file pada pemicu OSS atau mengaitkan lebih dari 10 pemicu ke satu bucket OSS, Anda dapat membuat pemicu OSS berbasis EventBridge guna menangani event seperti unggahan file.

Catatan penting

Pemicu OSS berbasis EventBridge berbeda dari pemicu OSS native. Perhatikan poin-poin berikut:

  • Pemicu OSS native mendukung hingga 10 pemicu per bucket. Jika Anda memerlukan lebih dari 10 pemicu OSS dalam satu bucket, gunakan pemicu OSS berbasis EventBridge.

    Catatan

    Secara umum, hindari mengaitkan lebih dari 10 pemicu ke satu bucket. Jika diperlukan lebih banyak pemicu, buat bucket baru dan konfigurasikan pemicu tersebut untuk bucket tersebut.

  • Pemicu OSS berbasis EventBridge mengikuti batas resource yang sama seperti EventBridge. Anda dapat membuat hingga 50 pemicu OSS berbasis EventBridge. Untuk informasi selengkapnya, lihat Batas.

  • Pemicu OSS berbasis EventBridge tidak memerlukan keunikan semantik. Kombinasi event type, file prefix, dan file suffix tidak perlu unik.

  • Pemicu OSS berbasis EventBridge mendukung beberapa file prefixes dan file suffixes. Namun, file prefixes dan file suffixes tidak mendukung pencocokan kabur (fuzzy matching) atau pencocokan ekspresi reguler.

  • Setelah Anda membuat pemicu OSS berbasis EventBridge, pemicu tersebut membutuhkan waktu sekitar 30 detik untuk menjadi aktif. Operasi Object Storage Service (OSS) hanya dapat memicu fungsi setelah pemicu aktif.

Contoh skenario

Contoh ini menunjukkan cara mengonfigurasi pemicu OSS dengan awalan source dan test serta akhiran .rar dan .zip. Ketika file terkompresi dengan akhiran .rar atau .zip diunggah ke direktori source atau test dalam bucket OSS yang ditentukan, fungsi akan dieksekusi secara otomatis. Setelah fungsi dieksekusi, file yang didekompresi disimpan ke direktori lain dalam bucket yang sama.

Prasyarat

Langkah 1: Buat pemicu OSS berbasis EventBridge

  1. Masuk ke Konsol Function Compute. Di panel navigasi sebelah kiri, klik Services & Functions.

  2. Di bilah navigasi atas, pilih wilayah. Pada halaman Services, klik layanan yang diinginkan.

  3. Pada halaman Functions, klik fungsi yang ingin Anda kelola.
  4. Di halaman detail fungsi, klik tab Triggers, pilih versi atau alias dari daftar drop-down Version or Alias, lalu klik Create Trigger.
  5. Di panel Create Trigger, atur Trigger Type ke Object Storage Service (OSS) di bawah Cloud Service Event Trigger. Konfigurasikan pengaturan lainnya dan klik OK.

    Item konfigurasi

    Aksi

    Contoh dalam topik ini

    Name

    Masukkan nama pemicu kustom.

    oss-trigger

    Version or Alias

    Nilai default adalah LATEST. Untuk membuat pemicu untuk versi atau alias lain, pilih terlebih dahulu dari daftar drop-down Version or Alias di halaman detail fungsi. Untuk informasi selengkapnya tentang versi dan alias, lihat Kelola versi dan Kelola alias.

    LATEST

    Bucket name

    Pilih bucket OSS yang dibuat di wilayah saat ini.

    bucket-zh****

    File prefix

    Masukkan awalan nama file yang akan dicocokkan. Function Compute merekomendasikan mengonfigurasi awalan dan akhiran sekaligus untuk menghindari loop bersarang yang menyebabkan biaya tambahan.

    Untuk menambahkan beberapa file prefixes, klik + Add File Prefix di konsol.

    Penting

    Awalan file tidak boleh dimulai dengan /. Jika tidak, pemicu OSS tidak akan aktif.

    • source

    • test

    File suffix

    Masukkan akhiran nama file yang akan dicocokkan. Function Compute merekomendasikan mengonfigurasi awalan dan akhiran sekaligus untuk menghindari loop bersarang yang menyebabkan biaya tambahan.

    Untuk menambahkan beberapa file suffixes, klik + Add File Suffix di konsol.

    png

    Event type

    Pilih satu atau beberapa event pemicu. Untuk tipe event Object Storage Service (OSS), lihat Definisi Event OSS.

    oss:ObjectCreated:PutObject, oss:ObjectCreated:PostObject, oss:ObjectCreated:CompleteMultipartUpload

    Event pattern

    Field ini terisi otomatis setelah Anda mengonfigurasi file prefix, file suffix, dan triggering event.

    Penting

    Jangan mengubah event pattern kecuali diperlukan. Perubahan yang salah dapat menyebabkan pemicu gagal. Pahami aturan pola event sebelum melakukan perubahan. Untuk informasi selengkapnya, lihat Pola event.

    {
        "source":[
            "acs.oss"
        ]
    }

    Invocation method

    Pilih metode pemanggilan fungsi. Nilai default adalah panggilan sinkron.

    • Synchronous call: Event memicu fungsi dan menunggu hasilnya. Metode ini cocok untuk sebagian besar skenario. Untuk informasi selengkapnya, lihat Pemanggilan sinkron.

    • Asynchronous call: Event memicu fungsi dan langsung mengembalikan respons. Function Compute memastikan fungsi dieksekusi setidaknya sekali tetapi tidak mengembalikan hasilnya. Gunakan metode ini untuk fungsi dengan penundaan lama. Untuk informasi selengkapnya, lihat Ikhtisar.

    Synchronous call

    Trigger status

    Pilih apakah akan mengaktifkan pemicu segera setelah dibuat. Secara default, Enable trigger dipilih.

    Enable trigger

    Payload format

    Tentukan format data parameter input fungsi. Data dilewatkan melalui parameter Event fungsi.

    • CloudEvents: Format standar untuk mendeskripsikan data event. Format ini mencakup metadata event dan muatan (payload) untuk menyederhanakan deklarasi dan transmisi event lintas layanan dan platform.

    • RawData: Hanya mengirimkan muatan event tanpa metadata CloudEvents.

    Catatan

    Format payload berbeda antara pemicu OSS native dan pemicu OSS berbasis EventBridge. Pemicu OSS native mendukung templat OSSEvents, yaitu format event yang dihasilkan oleh Alibaba Cloud Object Storage Service (OSS).

    CloudEvents

    Setelah pemicu dibuat, pemicu tersebut ditampilkan di tab Triggers. Untuk mengubah atau menghapus pemicu yang sudah ada, lihat Kelola pemicu.

Langkah 2: Konfigurasikan parameter input fungsi

Pemicu OSS berbasis EventBridge meneruskan data event ke fungsi menggunakan templat CloudEvents. Anda dapat secara manual meneruskan event ke fungsi untuk mensimulasikan event pemicu.

  1. Di halaman detail fungsi, klik tab Function Code. Lalu, klik ikon drop-down icon di sebelah kanan Test Function, dan pilih Configure Test Parameters dari daftar drop-down.

  2. Di panel Configure Test Parameters, pilih tab Create New Test Event atau tab Edit Existing Test Event. Masukkan event name dan konten event. Lalu klik OK.

    Event tersebut merupakan parameter input untuk Function Compute. Saat event tertentu terjadi di bucket OSS, data event dikirim ke fungsi yang terikat dalam format JSON. Formatnya sebagai berikut:

    {
        "datacontenttype": "application/json;charset=utf-8",
        "aliyunaccountid": "143199913****",
        "data": {
            "eventVersion": "1.0",
            "responseElements": {
                "requestId": "6364D216511B143733C5A67B"
            },
            "eventSource": "acs:oss",
            "eventTime": "2023-11-04T08:49:26.000Z",
            "requestParameters": {
                "sourceIPAddress": "140.205.XX.XX"
            },
            "eventName": "ObjectCreated:PutObject",
            "userIdentity": {
                "principalId": "143199913****"
            },
            "region": "cn-hangzhou",
            "oss": {
                "bucket": {
                    "name": "bucket-zh***",
                    "arn": "acs:oss:cn-hangzhou:143199913****:bucket-zh***",
                    "virtualBucket": "",
                    "ownerIdentity": "143199913****"
                },
                "ossSchemaVersion": "1.0",
                "object": {
                    "size": 13,
                    "objectMeta": {
                        "mimeType": "text/plain"
                    },
                    "deltaSize": 13,
                    "eTag": "59CA0EFA9F5633CB0371BBC0355478D8",
                    "key": "source/a.png"
                }
            }
        },
        "subject": "acs:oss:cn-hangzhou:143199913****:bucket-zh***/source/a.png",
        "aliyunoriginalaccountid": "143199913****",
        "source": "acs.oss",
        "type": "oss:ObjectCreated:PutObject",
        "aliyunpublishtime": "203-11-04T08:49:26.745Z",
        "specversion": "1.0",
        "aliyuneventbusname": "default",
        "id": "6364D216511B143733C5A67B",
        "time": "2023-11-04T08:49:26Z",
        "aliyunregionid": "cn-hangzhou"
    }

    Tabel berikut menjelaskan field-field dalam parameter event.

    Parameter

    Type

    Nilai contoh

    Deskripsi

    datacontenttype

    String

    application/json;charset=utf-8

    Tipe konten dari parameter data. datacontenttype hanya mendukung application/json;charset=utf-8.

    aliyunaccountid

    String

    143199913****

    ID akun Alibaba Cloud. Anda dapat menemukan ID akun Alibaba Cloud Anda di bagian General Information pada halaman Overview di Konsol Function Compute.

    data

    Struct

    {}

    Konten event OSS sebagai objek JSON. CloudEvents membungkus konteks yang ditentukan OSS dalam field data.

    subject

    String

    acs:oss:cn-hangzhou:143199913****:bucket-zh****/source/a.png

    Subjek event.

    Format: acs:oss:<region>:<your_account_id>:<your_bucket>. Ganti <region> dengan wilayah yang dipilih saat membuat fungsi, <your_account_id> dengan ID akun Alibaba Cloud Anda, dan <your_bucket> dengan nama bucket aktual di wilayah yang sama.

    aliyunoriginalaccountid

    String

    143199913****

    ID akun Alibaba Cloud.

    source

    String

    acs.oss

    Sumber event. Untuk pemicu OSS, nilai ini selalu acs.oss.

    type

    String

    oss:ObjectCreated:PutObject

    Tipe event.

    aliyunpublishtime

    Timestamp

    2023-11-04T08:49:26.745Z

    Waktu event diterima.

    specversion

    String

    1.0

    Versi protokol CloudEvents.

    aliyuneventbusname

    String

    default

    Nama event bus yang menerima event.

    id

    String

    6364D216511B143733C5A67B

    ID event.

    time

    Timestamp

    2023-11-04T08:49:26Z

    Waktu event terjadi.

    aliyunregionid

    String

    cn-hangzhou

    Wilayah tempat event diterima.

    aliyunpublishaddr

    String

    140.205.XX.XX

    Alamat server yang menerima event.

    Perbarui field-field berikut di bagian data parameter event sesuai konfigurasi Anda.

    • userIdentity.principalId: Ganti dengan ID akun Alibaba Cloud Anda.

    • region: Ganti dengan wilayah yang Anda pilih saat membuat fungsi.

    • oss.bucket.name: Ganti dengan nama bucket di wilayah yang sama.

    • oss.bucket.arn: Formatnya adalah acs:oss:<region>:<your_account_id>:<your_bucket>. Ganti <region> dengan wilayah yang Anda pilih saat membuat fungsi, <your_account_id> dengan ID akun Alibaba Cloud Anda, dan <your_bucket> dengan nama bucket di wilayah yang sama.

    • oss.bucket.ownerIdentity: Ganti dengan ID akun Alibaba Cloud Anda.

    • object.key: Ganti dengan file aktual yang diunggah ke bucket target.

      Catatan

      Pastikan file yang ditentukan ada di bucket yang dikonfigurasi. Dalam contoh ini, file tersebut adalah source/a.png. Jika tidak, fungsi tidak akan dipicu atau gagal dieksekusi.

Langkah 3: Tulis dan uji kode fungsi

Setelah Anda membuat pemicu OSS, Anda dapat menulis dan menguji kode fungsi untuk memverifikasi kebenarannya. Fungsi akan dieksekusi secara otomatis ketika event OSS terjadi.

Peringatan

Untuk mencegah biaya yang tidak perlu, hindari pemicu melingkar (circular triggers) dalam kode Anda. Skenario pemicu melingkar yang umum terjadi ketika unggahan file ke bucket OSS memicu fungsi, dan fungsi tersebut kemudian menulis satu atau beberapa file kembali ke bucket yang sama. Tindakan ini memicu fungsi lagi dan menciptakan loop. Untuk informasi selengkapnya, lihat Aturan pemicu OSS.

  1. Di halaman detail fungsi, klik tab Code. Tulis kode Anda di editor, lalu klik Deploy Code.

    Bagian berikut menjelaskan persiapan dan memberikan contoh kode.

    Catatan

    Jika fungsi Anda perlu membaca data dari atau menulis data ke resource OSS, kami merekomendasikan menggunakan titik akhir internal OSS untuk menghindari biaya jaringan publik. Untuk informasi selengkapnya tentang format titik akhir internal OSS, lihat Wilayah dan titik akhir.

    /* Persiapan:
    1. Jalankan perintah berikut di terminal Anda untuk menginstal package.json dan modul pemrosesan gambar jimp.
       a. Jalankan npm init untuk membuat package.json.
       b. Jalankan npm install jimp untuk menginstal modul jimp.
    2. Pastikan penanganan fungsi adalah index.handler.
    */
    'use strict';
    console.log('Loading function ...');
    var oss = require('ali-oss');
    var fs = require('fs');
    var jimp = require("jimp");
    module.exports.handler = function (eventBuf, ctx, callback) {
        console.log('Received event:', eventBuf.toString());
        var event = JSON.parse(eventBuf);
    
        var ossEvent = event.data;
    
        // Wilayah OSS menggunakan awalan "oss-", misalnya, "oss-cn-shanghai".
        var ossRegion = "oss-" + ossEvent.region;
        // Buat klien OSS.
        var client = new oss({
            region: ossRegion,
            /*
             AccessKey akun Alibaba Cloud memberikan akses API penuh. Kami merekomendasikan menggunakan Pengguna RAM untuk panggilan API atau O&M rutin.
             Jangan simpan ID AccessKey dan Rahasia AccessKey Anda di kode. Hal ini dapat menyebabkan kebocoran AccessKey dan membahayakan semua resource di bawah akun Anda.
             Contoh ini mengambil AccessKeyId dan AccessKeySecret dari konteks.
            */
            accessKeyId: ctx.credentials.accessKeyId,
            accessKeySecret: ctx.credentials.accessKeySecret,
            stsToken: ctx.credentials.securityToken
        });
        // Dapatkan nama bucket dari event.
        client.useBucket(ossEvent.oss.bucket.name);
        // Simpan gambar yang diproses di direktori processed/.
        var newKey = ossEvent.oss.object.key.replace("source/", "processed/");
        var tmpFile = "/tmp/processed.png";
        // Dapatkan objek OSS.
        console.log('Getting object: ', ossEvent.oss.object.key)
        client.get(ossEvent.oss.object.key).then(function (val) {
            // Baca konten objek OSS dari buffer.
            jimp.read(val.content, function (err, image) {
                if (err) {
                    console.error("Failed to read image");
                    callback(err);
                    return;
                }
                // Ubah ukuran gambar dan simpan ke file sementara.
                image.resize(128, 128).write(tmpFile, function (err) {
                    if (err) {
                        console.error("Failed to write image locally");
                        callback(err);
                        return;
                    }
                    // Unggah gambar yang telah diproses ke OSS dengan nama baru.
                    console.log('Putting object: ', newKey);
                    client.put(newKey, tmpFile).then(function (val) {
                        console.log('Put object:', val);
                        callback(null, val);
                        return;
                    }).catch(function (err) {
                        console.error('Failed to put object: %j', err);
                        callback(err);
                        return;
                    });
               });
           });
       }).catch(function (err) {
            console.error('Failed to get object: %j', err);
            callback(err);
            return
        });
    };
    # Persiapan:
    # 1. Pastikan peran yang dilampirkan ke layanan fungsi memiliki izin akses OSS. Masuk ke konsol RAM untuk memberikan izin OSS ke peran tersebut.
    # 2. Pastikan penanganan fungsi adalah index.handler.
    
    # -*- coding: utf-8 -*-
    import oss2, json
    from wand.image import Image
    def handler(event, context):
        evt = json.loads(event)
        creds = context.credentials
        # Diperlukan oleh SDK OSS
        # AccessKey akun Alibaba Cloud memberikan akses API penuh. Kami merekomendasikan menggunakan Pengguna RAM untuk panggilan API atau O&M rutin.
        # Jangan simpan ID AccessKey dan Rahasia AccessKey Anda di kode. Hal ini dapat menyebabkan kebocoran AccessKey dan membahayakan semua resource di bawah akun Anda.
        # Contoh ini mengambil AccessKeyId dan AccessKeySecret dari konteks.
        auth=oss2.StsAuth(
            creds.access_key_id,
            creds.access_key_secret,
            creds.security_token)
        evt = evt['data']
        bucket_name = evt['oss']['bucket']['name']
        endpoint = 'oss-' +  evt['region'] + '-internal.aliyuncs.com'
        bucket = oss2.Bucket(auth, endpoint, bucket_name)
        objectName = evt['oss']['object']['key']
        # Gambar yang diproses akan disimpan ke processed/
        newKey = objectName.replace("source/", "processed/")
        remote_stream = bucket.get_object(objectName)
        if not remote_stream:
            return
        remote_stream = remote_stream.read()
        with Image(blob=remote_stream)  as img:
            with img.clone() as i:
                i.resize(128, 128)
                new_blob = i.make_blob()
                bucket.put_object(newKey, new_blob)
    /* Persiapan:
    1. Pastikan peran yang dilampirkan ke layanan fungsi memiliki izin akses OSS. Masuk ke konsol RAM untuk memberikan izin OSS ke peran tersebut.
    2. Pastikan penanganan fungsi adalah index.handler.
    */
    
    <?php
      use OSS\OssClient;
    function handler($event, $context) {
      $event           = json_decode($event, $assoc = true);
      /*
        AccessKey akun Alibaba Cloud memberikan akses API penuh. Kami merekomendasikan menggunakan Pengguna RAM untuk panggilan API atau O&M rutin.
        Jangan simpan ID AccessKey dan Rahasia AccessKey Anda di kode. Hal ini dapat menyebabkan kebocoran AccessKey dan membahayakan semua resource di bawah akun Anda.
        Contoh ini mengambil AccessKey dan AccessSecretKey dari konteks.
      */
      $accessKeyId     = $context["credentials"]["accessKeyId"];
      $accessKeySecret = $context["credentials"]["accessKeySecret"];
      $securityToken   = $context["credentials"]["securityToken"];
      $evt        = $event['data'];
      $bucketName = $evt['oss']['bucket']['name'];
      $endpoint   = 'oss-' . $evt['region'] . '-internal.aliyuncs.com';
      $objectName = $evt['oss']['object']['key'];
      $newKey = str_replace("source/", "processed/", $objectName);
      try {
        $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, false, $securityToken);
        $content = $ossClient->getObject($bucketName , $objectName);
        if ($content == null || $content == "") {
          return;
        }
        $imagick = new Imagick();
        $imagick->readImageBlob($content);
        $imagick->resizeImage(128, 128, Imagick::FILTER_LANCZOS, 1);
        $ossClient->putObject($bucketName, $newKey, $imagick->getImageBlob());
      } catch (OssException $e) {
        print($e->getMessage());
      }
    }
  2. Klik tombol Test Function di tab Code.

    Setelah eksekusi, lihat hasilnya di atas tab Code.

FAQ

Referensi

  • Untuk mempelajari tipe event OSS yang dapat dikonfigurasi, lihat Definisi event OSS.

  • Untuk mengubah atau menghapus pemicu, lihat Perbarui konfigurasi pemicu.

  • Pertanyaan terkait pemicu

    • Untuk mengidentifikasi event mana yang memicu eksekusi fungsi, Anda dapat mencatat tipe event di kode Anda. Untuk informasi selengkapnya, lihat Catatan log.

    • Untuk memanggil fungsi lain dari dalam fungsi Anda, Anda dapat menggunakan panggilan API atau mengoordinasikan fungsi dengan CloudFlow. Untuk operasi asinkron yang memakan waktu lama, Anda dapat mengonfigurasi tujuan pemanggilan asinkron. Untuk informasi selengkapnya, lihat Apakah fungsi dapat saling memanggil? dan Konfigurasikan tujuan pemanggilan asinkron.