Tüm Ürünler
Search
Belge Merkezi

Function Compute:Yerel bir OSS tetikleyicisini yapılandırma

Son Güncelleme:Oct 08, 2026

Function Compute konsolunda yerel bir OSS tetikleyicisi oluşturabilir ve yapılandırabilirsiniz. OSS'de belirli bir olay gerçekleştiğinde tetikleyici işlevinizi otomatik olarak çağırır. Bu sayede kodunuza olay dinleme mantığı eklemeye gerek kalmadan dosya yükleme gibi olaylara kolayca yanıt verebilir ve eksiksiz bir iş akışını hızla uygulayabilirsiniz.

Örnek senaryo

Bir OSS tetikleyicisi yapılandırıp nesne önekini source olarak ayarlayabilirsiniz. Belirtilen OSS paketindeki source dizinine bir görüntü yüklendiğinde tetikleyici işlevi otomatik olarak çağırır. İşlev görüntüyü yeniden boyutlandırır ve aynı paketteki processed dizinine kaydeder. Örneğin, işlev source/a.png dosyasını işler ve sonucu processed/a.png olarak kaydeder.

Ön koşullar

Sınırlamalar

  • Tek bir pakete en fazla 10 yerel OSS tetikleyicisi atanabilir.

    Not

    Bir pakete daha fazla OSS tetikleyicisi atamanız gerekiyorsa EventBridge tabanlı OSS tetikleyicileri oluşturabilirsiniz. Ancak tek bir pakete 10'dan fazla tetikleyici atamanızı önermiyoruz. Daha fazlasına ihtiyacınız varsa yeni bir paket oluşturup bunun için tetikleyiciler yapılandırmayı düşünün.

  • Yerel OSS tetikleyicileri ve EventBridge tabanlı OSS tetikleyicileri nesne önekleri ve sonekleri için joker karakter veya düzenli ifade eşleştirmesini desteklemez.

  • Yerel bir OSS tetikleyicisi yalnızca bir nesne öneği ve bir nesne sonuğunu destekler. Birden çok önek veya sonek yapılandırmanız için EventBridge tabanlı OSS tetikleyicisi kullanın.

Adım 1: Bir OSS tetikleyicisi oluşturma

  1. Function Compute konsoluna giriş yapın. Sol gezinme bölmesinde Function Management > Functions seçeneğini belirleyin.

  2. Üst gezinme çubuğunda bir bölge seçin. Functions sayfasında hedef işleve tıklayın.

  3. İşlev ayrıntıları sayfasında Trigger sekmesini seçin ve Create Trigger öğesine tıklayın. Tetikleyici Oluştur panelinde parametreleri yapılandırın ve OK düğmesine tıklayın.

    Parametre

    İşlemler

    Örnek

    Trigger Type

    OSS seçin.

    OSS

    Name

    Tetikleyici için özel bir ad girin.

    oss-trigger

    Version or Alias

    Varsayılan değer LATEST değeridir. Farklı bir sürüm veya takma ad için tetikleyici oluşturmak istiyorsanız önce işlev ayrıntıları sayfasındaki Version or Alias açılır listesinden bunu seçmeniz gerekir. Sürümler ve takma adlar hakkında daha fazla bilgi için bkz. Sürümleri yönetme ve Takma adları yönetme.

    LATEST

    Bucket Name

    Oluşturduğunuz OSS paketini seçin.

    testbucket

    Object Prefix

    Eşleştirilecek nesne adlarının önekini girin. Ekstra ücretlere neden olabilecek özyinelemeli tetikleyici çağırmalarını önlemek için hem bir nesne öneği hem de bir nesne sonuğu belirtmenizi öneririz. Ayrıca aynı paketteki farklı tetikleyiciler aynı olay türünü paylaşıyorsa önekleri ve sonekleri aynı olmamalıdır. Daha fazla bilgi için bkz. OSS tetikleyicileri için tetikleme kuralları.

    Önemli

    Nesne öneki eğik çizgi (/) ile başlayamaz. Aksi takdirde tetikleyici çağrılamaz.

    source

    Object Suffix

    Eşleştirilecek nesne adlarının sonukunu girin. Ekstra ücretlere neden olabilecek özyinelemeli tetikleyici çağırmalarını önlemek için hem bir önek hem de bir sonek belirtmenizi şiddetle tavsiye ederiz. Ayrıca aynı paketteki farklı tetikleyiciler aynı olay türünü paylaşıyorsa önekleri ve sonekleri aynı olmamalıdır. Daha fazla bilgi için bkz. OSS tetikleyicileri için tetikleme kuralları.

    png

    Trigger Event

    Bir veya daha fazla tetikleme olayı seçin. OSS için olay türleri hakkında daha fazla bilgi için bkz. OSS olay tanımları.

    Bu örnekte oss:ObjectCreated:PutObject kullanılır.

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

    Role Name

    AliyunOSSEventNotificationRole seçin.

    Not

    Bu tür bir tetikleyiciyi ilk kez oluşturuyorsanız OK öğesine tıkladıktan sonra görünen iletişim kutusunda Authorize Now seçeneğine tıklayın.

    AliyunOSSEventNotificationRole

    Tetikleyici oluşturulduktan sonra Authorize Now listesinde görünür. Tetikleyiciyi değiştirmek veya silmek için bkz. Tetikleyicileri yönetme.

Adım 2: (İsteğe bağlı) İşlev giriş parametrelerini yapılandırma

OSS olay kaynağı verileri işlevinize bir event nesnesi olarak iletir. Bu nesneyi kodunuzda ayrıştırıp işleyebilirsiniz. Ayrıca tetikleyiciyi simüle etmek ve kodunuzu test etmek amacıyla işleve manuel olarak örnek bir event gönderebilirsiniz.

  1. İşlev ayrıntıları sayfasındaki OK sekmesinde Trigger Name öğesinin yanındaki image.png simgesine tıklayın ve açılan listeden Code seçeneğini belirleyin.

  2. Test Function panelinde, Configure Test Parameters veya Configure Test Parameters sekmesini seçin. Bir olay adı ve olay içeriği girin ardından OK düğmesine tıklayın.

    Not

    Olay içeriğini tetikleyiciyi oluştururken sağladığınız bilgilere göre yapılandırın. Bu örnekte belirtilen source/a.png nesnesinin pakette bulunduğundan emin olun. Aksi takdirde işlev çağrılmaz veya çağrı başarısız olur.

    Olay, bir Function Compute işlevi için bir giriş parametresidir. Belirtilen OSS paketinde bir nesne oluşturulduğunda veya silindiğinde OSS olay verilerini JSON biçiminde bağlı işleve gönderir. Aşağıda bir örnek gösterilmektedir:

    {
        "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****"
                }
            }
        ]
    }

    Aşağıdaki tabloda bir olay nesnesindeki parametreler açıklanmaktadır.

    Parametre

    Tür

    Değer

    Açıklama

    eventName

    String

    ObjectCreated:PutObject

    Olay türü.

    eventSource

    String

    acs:oss

    Olay kaynağı. Değer sabit olarak acs:oss şeklindedir.

    eventTime

    String

    2022-08-13T06:45:43.000Z

    ISO 8601 biçiminde olayın gerçekleştiği zaman.

    eventVersion

    String

    1.0

    Olay protokolünün sürümü.

    oss

    Map

    OSS olay ayrıntılarını içerir.

    bucket

    Map

    bucket parametresinin değeri.

    name

    String

    testbucket

    Paketin adı.

    arn

    String

    acs:oss:cn-hangzhou:123456789:testbucket

    Paketin benzersiz tanımlayıcısı.

    ownerIdentity

    String

    164901546557****

    Paketi oluşturan kullanıcının kimliği.

    object

    Map

    object parametresinin içeriği.

    size

    Int

    122539

    object boyutu. Birim: Byte.

    deltaSize

    Int

    122539

    object boyutundaki değişiklik. Birim: Byte.

    • Yeni bir nesne eklendiyse bu değer nesne boyutudur.

    • Mevcut bir nesnenin üzerine aynı ada sahip bir nesne yazılırsa bu değer yeni ve eski nesneler arasındaki boyut farkıdır.

    eTag

    String

    688A7BF4F233DC9C88A80BF985AB****

    Nesnenin ETag değeri.

    key

    String

    source/a.png

    Nesnenin tam yolu.

    objectMeta

    Map

    objectMeta parametresi içeriği.

    mimeType

    String

    application/zip

    Nesnenin dosya türü. Daha fazla bilgi için bkz. mimeType.

    userMeta

    Map

    Nesnenin amacını veya niteliklerini tanımlayan kullanıcı meta verileri.

    x-oss-meta-last-modified

    String

    20250213

    Kullanıcı meta verileri anahtar-değer çiftlerinden oluşur. Meta veri anahtarı x-oss-meta- ile başlamalıdır. Örneğin "x-oss-meta-last-modified":"20250213" çifti yerel dosyanın en son 13 Şubat 2025 tarihinde değiştirildiğini gösterir. Daha fazla bilgi için bkz. Kullanıcı meta verileri.

    ossSchemaVersion

    String

    1.0

    OSS şema sürümü.

    ruleId

    String

    9adac8e253828f4f7c0466d941fa3db81161****

    Olayın eşleştiği tetikleyici kuralının kimliği.

    region

    String

    cn-hangzhou

    Paketin bölgesi.

    requestParameters

    Map

    İstek parametreleri.

    sourceIPAddress

    String

    140.205.XX.XX

    İsteğin kaynak IP adresi.

    responseElements

    Map

    Yanıt öğeleri.

    requestId

    String

    58F9FF2D3DF792092E12044C

    İstek kimliği.

    userIdentity

    Map

    İsteği yapan kullanıcının kimliği.

    principalId

    String

    164901546557****

    İsteği başlatan Alibaba Cloud hesabının kimliği.

Adım 3: İşlev kodunu yazma ve test etme

OSS tetikleyicisini oluşturduktan sonra işlev kodunu yazıp test ederek doğru çalıştığını doğrulayabilirsiniz. Gerçek dünya senaryolarında belirtilen OSS olayı gerçekleştiğinde tetikleyici işlevi otomatik olarak çağırır.

Uyarı

Kodunuzda özyinelemeli çağırmaları engellemelisiniz. Yaygın bir özyineleme senaryosu işlevin bir OSS paketine nesne yüklenmesiyle tetiklenmesidir. İşlev çalıştıktan sonra bir veya daha fazla yeni nesne oluşturup bunları aynı pakete geri yazar. Bu yazma işlemi işlevi tekrar tetikleyerek sonsuz bir döngü yaratır. Daha fazla bilgi için bkz. OSS tetikleyicileri için tetikleme kuralları.

  1. İşlev ayrıntıları sayfasındaki Create New Test Event sekmesinde düzenleyicide kodunuzu girin ve Modify Existing Test Event düğmesine tıklayın.

    • Aşağıdaki örnek kod çevrimiçi düzenlemeyi destekleyen çalışma zamanları içindir.

      Not

      İşlevinizde OSS paketlerinden veri okumak ve bunlara veri yazmak için dahili bir OSS uç noktası kullanmanızı öneririz. Genel bir uç nokta kullanırsanız internet veri aktarım ücretlerine maruz kalırsınız. Dahili uç noktalar hakkında daha fazla bilgi için bkz. Bölgeler ve uç noktalar.

      "use strict";
      /*
      This sample code shows you how to perform the following operations:
      * 1. Parse OSS event information from the event.
      * 2. Initialize the OSS client based on the parsed information.
      * 3. Resize the source image and save it to a destination directory in the same bucket.
      */
      
      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;
      
          // Connect to the target OSS bucket.
          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/")
          // Resize the image to a fixed width and height of 128 px.
          const processStr = "image/resize,m_fixed,w_128,h_128"
          // Resize the source image and save the processed image to the destination path.
          const result = await client.processObjectSave(
              objectName,
              targetImage,
              processStr,
              bucketName
          );
          console.log(result.res.status);
      
          callback(null, "done");
      }
      """
      This sample code shows you how to perform the following operations:
      * Get OSS processing-related information from the event.
      * Initialize the OSS client with the target bucket.
      * Resize the source image and save it to a destination directory.
      """
      
      # -*- coding: utf-8 -*-
      import oss2, json
      import base64
      
      def handler(event, context):
          # Obtain key information from context.credentials.
          print("The content in context entity is: \n")
          print(context)
          creds = context.credentials
      
          # Configure authentication for the OSS SDK.
          auth = oss2.StsAuth(
              creds.access_key_id,
              creds.access_key_secret,
              creds.security_token)
      
          print("The content in event entity is: \n")
          print(event)
          # Load event content.
          oss_raw_data = json.loads(event)
          # Get OSS event parameters passed by the OSS trigger.
          oss_info_map = oss_raw_data['events'][0]['oss']
          # Get the OSS bucket name.
          bucket_name = oss_info_map['bucket']['name']
          # Set the OSS endpoint.
          endpoint = 'oss-' + oss_raw_data['events'][0]['region'] + '-internal.aliyuncs.com'
          # Initialize the OSS client.
          bucket = oss2.Bucket(auth, endpoint, bucket_name)
          object_name = oss_info_map['object']['key']
      
          # Download the original image from the OSS bucket.
          remote_stream = bucket.get_object(object_name)
          if not remote_stream:
              print(f'{object_name} does not exist in bucket {bucket_name}')
              return
          # Processed images are saved to the processed/ directory.
          processed_path = object_name.replace('source/', 'processed/')
      
          # Resize the image to a fixed width and height of 128 px.
          style = 'image/resize,m_fixed,w_128,h_128'
          # Specify the name of the processed image. If the image is not in the root directory of the bucket, you must specify the full path of the image. Example: 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)
      /*
      *This sample code shows you how to perform the following operations:
      * 1. Parse the endpoint, bucket, and object from the event.
      * 2. Initialize the OSS client based on the parsed information.
      * 3. Resize the source image and save the processed image to a destination directory in the same bucket.
      */
      <?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);
        /*
          An AccessKey pair of an Alibaba Cloud account has permissions on all API operations. We recommend that you use a RAM user to call API operations or perform routine O&M.
          Do not hard-code the AccessKey ID and AccessKey secret in your project code. Otherwise, the AccessKey pair may be leaked, which compromises the security of all resources in your account.
          This example shows how to obtain the AccessKey pair from the context.
        */
        $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 {
              // Connect to OSS.
              $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, false, $securityToken);
              // Resize the image to a fixed width and height of 128 px.
              $style = "image/resize,m_fixed,w_128,h_128";
              $process = $style.
                 '|sys/saveas'.
                 ',o_'.base64url_encode($targetObject).
                 ',b_'.base64url_encode($bucketName);
              // Resize the image and save it to the destination object.
              $result = $ossClient->processObject($bucketName, $objectName, $process);
              // Print the processing result.
              print($result);
          } catch (OssException $e) {
              print_r(__FUNCTION__ . ": FAILED\n");
              printf($e->getMessage() . "\n");
          }
      
          print(__FUNCTION__ . ": OK" . "\n");
      
          return $targetObject;
      }
  2. İşlevi test edin.

    Yöntem 1: Bir olay kaynağını simüle etmek için event giriş parametresini yapılandırdıysanız Code öğesine tıklayın.

    Yöntem 2: Deploy > Test Function sayfasında ilgili pakete gitmek için Bucket Name öğesine tıklayın. Belirtilen nesne öneği ve sonuğuyla eşleşen bir görüntü yükleyin. İşlev çalıştıktan sonra yürütme günlüklerini Logs sekmesinde görüntüleyebilir ve sonucu paketin hedef klasöründe kontrol edebilirsiniz.

SSS

İlgili konular