All Products
Search
Document Center

Function Compute:Konfigurasikan pemicu OSS native

Last Updated:Apr 24, 2026

Anda dapat membuat dan mengonfigurasi pemicu OSS native di konsol Function Compute. Ketika event tertentu terjadi di OSS, pemicu tersebut secara otomatis memanggil fungsi Anda, sehingga memungkinkan Anda merespons event seperti unggahan file dengan mudah dan langsung menerapkan alur kerja lengkap tanpa perlu menambahkan logika pendengar event ke dalam kode.

Contoh skenario

Anda dapat mengonfigurasi pemicu OSS dengan menetapkan prefiks objek menjadi source. Ketika gambar diunggah ke direktori source di bucket OSS yang ditentukan, pemicu tersebut secara otomatis memanggil fungsi. Fungsi tersebut mengubah ukuran gambar dan menyimpannya ke direktori processed di bucket yang sama. Misalnya, fungsi memproses source/a.png dan menyimpan hasilnya sebagai processed/a.png.

Prasyarat

Batasan

  • Satu bucket dapat memiliki maksimal 10 pemicu OSS native.

    Catatan

    Jika Anda perlu mengaitkan lebih banyak pemicu OSS ke suatu bucket, Anda dapat membuat pemicu OSS berbasis EventBridge. Namun, kami tidak menyarankan mengaitkan lebih dari 10 pemicu ke satu bucket. Jika diperlukan lebih banyak, pertimbangkan untuk membuat bucket baru dan mengonfigurasi pemicu untuk bucket tersebut.

  • Pemicu OSS native dan pemicu OSS berbasis EventBridge tidak mendukung pencocokan wildcard atau ekspresi reguler untuk prefiks dan sufiks objek.

  • Pemicu OSS native hanya mendukung satu prefiks objek dan satu sufiks objek. Untuk mengonfigurasi beberapa prefiks atau sufiks, gunakan pemicu OSS berbasis EventBridge.

Langkah 1: Buat pemicu OSS

  1. Masuk ke konsol Function Compute. Di panel navigasi sebelah kiri, pilih Function Management > Functions.

  2. Di bilah navigasi atas, pilih wilayah. Di halaman Functions, klik fungsi target.

  3. Di halaman detail fungsi, pilih tab Trigger dan klik Create Trigger. Di panel Create Trigger, konfigurasikan parameter dan klik OK.

    Parameter

    Tindakan

    Contoh

    Trigger Type

    Pilih OSS.

    OSS

    Name

    Masukkan nama kustom untuk pemicu.

    oss-trigger

    Version or Alias

    Nilai default adalah LATEST. Jika Anda ingin membuat pemicu untuk versi atau alias yang berbeda, Anda harus terlebih dahulu memilihnya dari daftar drop-down Version or Alias di halaman detail fungsi. Untuk informasi selengkapnya tentang versi dan alias, lihat Manage versions dan Manage aliases.

    LATEST

    Bucket Name

    Pilih bucket OSS yang telah Anda buat.

    testbucket

    Object Prefix

    Masukkan prefiks nama objek yang akan dicocokkan. Kami merekomendasikan agar Anda menentukan baik prefiks maupun sufiks objek untuk mencegah pemanggilan pemicu secara rekursif yang dapat menyebabkan biaya tambahan. Selain itu, jika pemicu berbeda dalam bucket yang sama menggunakan jenis event yang sama, prefiks dan sufiksnya tidak boleh identik. Untuk informasi selengkapnya, lihat Triggering rules for OSS triggers.

    Penting

    Prefiks objek tidak boleh diawali dengan garis miring (/). Jika tidak, pemicu tidak dapat dipanggil.

    source

    Object Suffix

    Masukkan sufiks nama objek yang akan dicocokkan. Kami sangat menyarankan agar Anda menentukan baik prefiks maupun sufiks untuk mencegah pemanggilan pemicu secara rekursif yang dapat menyebabkan biaya tambahan. Selain itu, jika pemicu berbeda dalam bucket yang sama menggunakan jenis event yang sama, prefiks dan sufiksnya tidak boleh identik. Untuk informasi selengkapnya, lihat Triggering rules for OSS triggers.

    png

    Trigger Event

    Pilih satu atau beberapa event pemicu. Untuk informasi selengkapnya tentang jenis event untuk OSS, lihat OSS event definitions.

    Contoh ini menggunakan oss:ObjectCreated:PutObject.

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

    Role Name

    Pilih AliyunOSSEventNotificationRole.

    Catatan

    Jika ini pertama kalinya Anda membuat pemicu jenis ini, klik Authorize Now di kotak dialog yang muncul setelah Anda mengklik OK.

    AliyunOSSEventNotificationRole

    Setelah pemicu dibuat, pemicu tersebut akan muncul di daftar Trigger Name. Untuk memodifikasi atau menghapus pemicu, lihat Manage triggers.

Langkah 2: (Opsional) Konfigurasikan parameter input fungsi

Sumber event OSS meneruskan data ke fungsi Anda sebagai objek event. Anda dapat mengurai dan memproses objek ini dalam kode Anda. Anda juga dapat secara manual meneruskan contoh event ke fungsi untuk mensimulasikan pemicu dan menguji kode Anda.

  1. Di tab Code halaman detail fungsi, klik ikon image.png di samping Test Function dan pilih Configure Test Parameters dari daftar drop-down.

  2. Di panel Configure Test Parameters, pilih tab Create New Test Event atau Modify Existing Test Event. Masukkan nama event dan konten event, lalu klik OK.

    Catatan

    Konfigurasikan konten event berdasarkan informasi yang Anda berikan saat membuat pemicu. Pastikan objek yang ditentukan, yaitu source/a.png dalam contoh ini, ada di bucket. Jika tidak, fungsi tidak akan dipanggil atau pemanggilannya akan gagal.

    Event tersebut merupakan parameter input untuk fungsi Function Compute. Ketika objek dibuat atau dihapus di bucket OSS yang ditentukan, OSS mengirim data event ke fungsi yang terikat dalam format JSON. Berikut ini contohnya:

    {
        "events": [
            {
                "eventName": "ObjectCreated:PutObject",
                "eventSource": "acs:oss",
                "eventTime": "2022-08-13T06:45:43.000Z",
                "eventVersion": "1.0",
                "oss": {
                    "bucket": {
                        "arn": "acs:oss:cn-hangzhou:123456789:testbucket",
                        "name": "testbucket",
                        "ownerIdentity": "164901546557****"
                    },
                    "object": {
                        "deltaSize": 122539,
                        "eTag": "688A7BF4F233DC9C88A80BF985AB****",
                        "key": "source/a.png",
                        "objectMeta": {
                           "mimeType": "application/zip",
                           "userMeta": {
                              "x-oss-meta-last-modified":"20250213"
                           }
                        },
                        "size": 122539
                    },
                    "ossSchemaVersion": "1.0",
                    "ruleId": "9adac8e253828f4f7c0466d941fa3db81161****"
                },
                "region": "cn-hangzhou",
                "requestParameters": {
                    "sourceIPAddress": "140.205.XX.XX"
                },
                "responseElements": {
                    "requestId": "58F9FF2D3DF792092E12044C"
                },
                "userIdentity": {
                    "principalId": "164901546557****"
                }
            }
        ]
    }

    Tabel berikut menjelaskan parameter dalam objek event.

    Parameter

    Type

    Nilai

    Deskripsi

    eventName

    String

    ObjectCreated:PutObject

    Jenis event.

    eventSource

    String

    acs:oss

    Sumber event. Nilainya tetap acs:oss.

    eventTime

    String

    2022-08-13T06:45:43.000Z

    Waktu terjadinya event, dalam format ISO 8601.

    eventVersion

    String

    1.0

    Versi protokol event.

    oss

    Map

    Berisi detail event OSS.

    bucket

    Map

    Nilai parameter bucket.

    name

    String

    testbucket

    Nama bucket.

    arn

    String

    acs:oss:cn-hangzhou:123456789:testbucket

    Pengidentifikasi unik bucket.

    ownerIdentity

    String

    164901546557****

    ID pengguna yang membuat bucket.

    object

    Map

    Konten parameter object.

    size

    Int

    122539

    Ukuran object. Satuan: Byte.

    deltaSize

    Int

    122539

    Perubahan ukuran object. Satuan: Byte.

    • Jika objek baru ditambahkan, nilai ini adalah ukuran objek.

    • Jika objek yang sudah ada ditimpa dengan objek bernama sama, nilai ini adalah selisih ukuran antara objek baru dan lama.

    eTag

    String

    688A7BF4F233DC9C88A80BF985AB****

    ETag objek.

    key

    String

    source/a.png

    Jalur lengkap objek.

    objectMeta

    Map

    Konten parameter objectMeta.

    mimeType

    String

    application/zip

    Jenis file objek. Untuk informasi selengkapnya, lihat mimeType.

    userMeta

    Map

    Metadata pengguna yang mengidentifikasi tujuan atau atribut objek.

    x-oss-meta-last-modified

    String

    20250213

    Metadata pengguna terdiri dari pasangan kunci-nilai. Kunci metadata harus diawali dengan x-oss-meta-. Misalnya, pasangan "x-oss-meta-last-modified":"20250213" menunjukkan bahwa file lokal terakhir dimodifikasi pada 13 Februari 2025. Untuk informasi selengkapnya, lihat User metadata.

    ossSchemaVersion

    String

    1.0

    Versi skema OSS.

    ruleId

    String

    9adac8e253828f4f7c0466d941fa3db81161****

    ID aturan pemicu yang cocok dengan event tersebut.

    region

    String

    cn-hangzhou

    Wilayah bucket.

    requestParameters

    Map

    Parameter permintaan.

    sourceIPAddress

    String

    140.205.XX.XX

    Alamat IP sumber permintaan.

    responseElements

    Map

    Elemen respons.

    requestId

    String

    58F9FF2D3DF792092E12044C

    ID permintaan.

    userIdentity

    Map

    Identitas pengguna yang melakukan permintaan.

    principalId

    String

    164901546557****

    ID Akun Alibaba Cloud yang menginisiasi permintaan.

Langkah 3: Tulis dan uji kode fungsi

Setelah membuat pemicu OSS, Anda dapat menulis dan menguji kode fungsi untuk memverifikasi bahwa fungsinya bekerja dengan benar. Dalam skenario dunia nyata, pemicu secara otomatis memanggil fungsi ketika event OSS yang ditentukan terjadi.

Peringatan

Anda harus mencegah pemanggilan rekursif dalam kode Anda. Skenario rekursif umum terjadi ketika fungsi dipicu oleh unggahan objek ke bucket OSS. Setelah fungsi dijalankan, fungsi tersebut menghasilkan satu atau beberapa objek baru dan menuliskannya kembali ke bucket yang sama. Operasi penulisan ini memicu fungsi lagi, sehingga menciptakan loop tak terbatas. Untuk informasi selengkapnya, lihat Triggering rules for OSS triggers.

  1. Di tab Code halaman detail fungsi, masukkan kode Anda di editor dan klik Deploy.

    • Kode contoh berikut ini untuk waktu proses yang mendukung pengeditan daring.

      Catatan

      Kami merekomendasikan agar Anda menggunakan titik akhir internal OSS untuk membaca dan menulis data ke bucket OSS dalam fungsi Anda. Jika Anda menggunakan titik akhir publik, Anda akan dikenai biaya transfer data internet. Untuk informasi selengkapnya tentang titik akhir internal, lihat Regions and endpoints.

      "use strict";
      /*
      Kode contoh ini menunjukkan cara melakukan operasi berikut:
      * 1. Mengurai informasi event OSS dari event.
      * 2. Menginisialisasi klien OSS berdasarkan informasi yang diurai.
      * 3. Mengubah ukuran gambar sumber dan menyimpannya ke direktori tujuan di bucket yang sama.
      */
      
      const OSS = require("ali-oss");
      
      exports.handler = async function(event, context, callback) {
          console.log("The content in context entity is: \n");
          console.dir(context);
      
          const {accessKeyId, accessKeySecret, securityToken} = context.credentials;
      
          const events = JSON.parse(event.toString()).events;
          console.log("The content in event entity is: \n");
          console.dir(events);
      
          let objectName = events[0].oss.object.key;
          let region = events[0].region;
          let bucketName = events[0].oss.bucket.name;
      
          // Menghubungkan ke bucket OSS target.
          const client = new OSS({
              region: region,
              accessKeyId: accessKeyId,
              accessKeySecret: accessKeySecret,
              stsToken: securityToken,
              bucket: bucketName,
              endpoint: "https://oss-" + region + "-internal.aliyuncs.com"
          });
      
          console.log("The client entity is: \n");
          console.dir(events);
      
          const targetImage = objectName.replace("source/", "processed/")
          // Mengubah ukuran gambar menjadi lebar dan tinggi tetap 128 px.
          const processStr = "image/resize,m_fixed,w_128,h_128"
          // Mengubah ukuran gambar sumber dan menyimpan gambar yang diproses ke jalur tujuan.
          const result = await client.processObjectSave(
              objectName,
              targetImage,
              processStr,
              bucketName
          );
          console.log(result.res.status);
      
          callback(null, "done");
      }
      """
      Kode contoh ini menunjukkan cara melakukan operasi berikut:
      * Mendapatkan informasi terkait pemrosesan OSS dari event.
      * Menginisialisasi klien OSS dengan bucket target.
      * Mengubah ukuran gambar sumber dan menyimpannya ke direktori tujuan.
      """
      
      # -*- coding: utf-8 -*-
      import oss2, json
      import base64
      
      def handler(event, context):
          # Mendapatkan informasi kunci dari context.credentials.
          print("The content in context entity is: \n")
          print(context)
          creds = context.credentials
      
          # Mengonfigurasi autentikasi untuk SDK OSS.
          auth = oss2.StsAuth(
              creds.access_key_id,
              creds.access_key_secret,
              creds.security_token)
      
          print("The content in event entity is: \n")
          print(event)
          # Memuat konten event.
          oss_raw_data = json.loads(event)
          # Mendapatkan parameter event OSS yang diteruskan oleh pemicu OSS.
          oss_info_map = oss_raw_data['events'][0]['oss']
          # Mendapatkan nama bucket OSS.
          bucket_name = oss_info_map['bucket']['name']
          # Menetapkan titik akhir OSS.
          endpoint = 'oss-' + oss_raw_data['events'][0]['region'] + '-internal.aliyuncs.com'
          # Menginisialisasi klien OSS.
          bucket = oss2.Bucket(auth, endpoint, bucket_name)
          object_name = oss_info_map['object']['key']
      
          # Mengunduh gambar asli dari bucket OSS.
          remote_stream = bucket.get_object(object_name)
          if not remote_stream:
              print(f'{object_name} does not exist in bucket {bucket_name}')
              return
          # Gambar yang diproses disimpan ke direktori processed/.
          processed_path = object_name.replace('source/', 'processed/')
      
          # Mengubah ukuran gambar menjadi lebar dan tinggi tetap 128 px.
          style = 'image/resize,m_fixed,w_128,h_128'
          # Menentukan nama gambar yang diproses. Jika gambar tidak berada di direktori root bucket, Anda harus menentukan jalur lengkap gambar tersebut. Contoh: exampledir/example.jpg.
          process = "{0}|sys/saveas,o_{1},b_{2}".format(style,
              oss2.compat.to_string(base64.urlsafe_b64encode(oss2.compat.to_bytes(processed_path))),
              oss2.compat.to_string(base64.urlsafe_b64encode(oss2.compat.to_bytes(bucket_name))))
          result = bucket.process_object(object_name, process)
          print(result)
      /*
      *Kode contoh ini menunjukkan cara melakukan operasi berikut:
      * 1. Mengurai titik akhir, bucket, dan objek dari event.
      * 2. Menginisialisasi klien OSS berdasarkan informasi yang diurai.
      * 3. Mengubah ukuran gambar sumber dan menyimpan gambar yang diproses ke direktori tujuan di bucket yang sama.
      */
      <?php
      
      use RingCentral\Psr7\Response;
      use OSS\OssClient;
      use OSS\Core\OssException;
      
      function base64url_encode($data)
      {
          return rtrim(strtr(base64_encode($data), '+/', '-_'), '=');
      }
      
      function handler($event, $context) {
        $event           = json_decode($event, $assoc = true);
        /*
          Pasangan AccessKey dari akun Alibaba Cloud memiliki izin atas semua operasi API. Kami menyarankan agar Anda menggunakan pengguna RAM untuk memanggil operasi API atau melakukan O&M rutin.
          Jangan hard-code ID AccessKey dan rahasia AccessKey di kode proyek Anda. Jika tidak, pasangan AccessKey dapat bocor, yang membahayakan keamanan semua sumber daya di akun Anda.
          Contoh ini menunjukkan cara mendapatkan pasangan AccessKey dari konteks.
        */
        $accessKeyId     = $context["credentials"]["accessKeyId"];
        $accessKeySecret = $context["credentials"]["accessKeySecret"];
        $securityToken   = $context["credentials"]["securityToken"];
        $evt        = $event['events']{0};
        $bucketName = $evt['oss']['bucket']['name'];
        $endpoint   = 'oss-' . $evt['region'] . '-internal.aliyuncs.com';
        $objectName = $evt['oss']['object']['key'];
        $targetObject = str_replace("source/", "processed/", $objectName);
      
          try {
              // Menghubungkan ke OSS.
              $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, false, $securityToken);
              // Mengubah ukuran gambar menjadi lebar dan tinggi tetap 128 px.
              $style = "image/resize,m_fixed,w_128,h_128";
              $process = $style.
                 '|sys/saveas'.
                 ',o_'.base64url_encode($targetObject).
                 ',b_'.base64url_encode($bucketName);
              // Mengubah ukuran gambar dan menyimpannya ke objek tujuan.
              $result = $ossClient->processObject($bucketName, $objectName, $process);
              // Mencetak hasil pemrosesan.
              print($result);
          } catch (OssException $e) {
              print_r(__FUNCTION__ . ": FAILED\n");
              printf($e->getMessage() . "\n");
          }
      
          print(__FUNCTION__ . ": OK" . "\n");
      
          return $targetObject;
      }
  2. Uji fungsi.

    Metode 1: Jika Anda mengonfigurasi parameter input event untuk mensimulasikan sumber event, klik Test Function.

    Metode 2: Di halaman Configuration > Trigger, klik Bucket Name untuk menuju bucket yang sesuai. Unggah gambar yang sesuai dengan prefiks dan sufiks objek yang ditentukan. Setelah fungsi dijalankan, Anda dapat melihat log eksekusi di tab Logs dan memeriksa hasilnya di folder tujuan bucket.

FAQ

Referensi