Tous les produits
Search
Centre de documentation

Function Compute:Configurer un déclencheur OSS natif

Dernière mise à jour :Aug 12, 2026

La console Function Compute permet de créer et de configurer un déclencheur OSS natif. Lorsqu'un événement spécifique se produit dans OSS, ce déclencheur invoque automatiquement votre fonction. Vous pouvez ainsi réagir facilement à des événements comme le téléchargement de fichiers et mettre en œuvre rapidement un workflow complet, sans ajouter de logique d'écoute d'événements à votre code.

Scénario d'exemple

Configurez un déclencheur OSS et définissez son préfixe d'objet sur source. Lorsqu'une image est téléchargée dans le répertoire source du bucket OSS spécifié, le déclencheur invoque automatiquement la fonction. Celle-ci redimensionne l'image et l'enregistre dans le répertoire processed du même bucket. Par exemple, la fonction traite source/a.png et enregistre le résultat sous processed/a.png.

Prérequis

Limites

  • Un bucket peut comporter au maximum 10 déclencheurs OSS natifs.

    Remarque

    Pour associer davantage de déclencheurs OSS à un bucket, créez des déclencheurs OSS basés sur EventBridge. Toutefois, il est déconseillé d'associer plus de 10 déclencheurs à un même bucket. Si vos besoins dépassent cette limite, envisagez de créer un nouveau bucket et d'y configurer des déclencheurs.

  • Les déclencheurs OSS natifs et les déclencheurs OSS basés sur EventBridge ne prennent pas en charge les caractères génériques ni les expressions régulières pour les préfixes et suffixes d'objets.

  • Un déclencheur OSS natif n'accepte qu'un seul préfixe et un seul suffixe d'objet. Pour configurer plusieurs préfixes ou suffixes, utilisez un déclencheur OSS basé sur EventBridge.

Étape 1 : Créer un déclencheur OSS

  1. Connectez-vous à la console Function Compute. Dans le volet de navigation de gauche, choisissez Function Management > Functions.

  2. Dans la barre de navigation supérieure, sélectionnez une région. Sur la page Functions, cliquez sur la fonction cible.

  3. Sur la page de détails de la fonction, sélectionnez l'onglet Trigger puis cliquez sur Create Trigger. Dans le panneau Create Trigger, configurez les paramètres puis cliquez sur OK.

    Paramètre

    Actions

    Exemple

    Trigger Type

    Sélectionnez OSS.

    OSS

    Name

    Saisissez un nom personnalisé pour le déclencheur.

    oss-trigger

    Version or Alias

    La valeur par défaut est LATEST. Pour créer un déclencheur associé à une autre version ou à un alias, sélectionnez-le d'abord dans la liste déroulante Version or Alias sur la page de détails de la fonction. Pour plus d'informations sur les versions et les alias, consultez Gérer les versions et Gérer les alias.

    LATEST

    Bucket Name

    Sélectionnez le bucket OSS créé.

    testbucket

    Object Prefix

    Saisissez le préfixe des noms d'objets à faire correspondre. Nous vous recommandons de spécifier à la fois un préfixe et un suffixe d'objet afin d'éviter les invocations récursives du déclencheur, susceptibles d'entraîner des frais supplémentaires. Par ailleurs, si différents déclencheurs du même bucket partagent le même type d'événement, leurs préfixes et suffixes ne doivent pas être identiques. Pour plus d'informations, consultez Règles de déclenchement des déclencheurs OSS.

    Important

    Le préfixe d'objet ne doit pas commencer par une barre oblique (/), sinon le déclencheur ne pourra pas être invoqué.

    source

    Object Suffix

    Saisissez le suffixe des noms d'objets à faire correspondre. Nous vous recommandons vivement de définir un préfixe et un suffixe pour éviter les invocations récursives du déclencheur, qui peuvent générer des coûts additionnels. De plus, lorsque plusieurs déclencheurs d'un même bucket utilisent le même type d'événement, leurs préfixes et suffixes doivent différer. Pour plus d'informations, consultez Règles de déclenchement des déclencheurs OSS.

    png

    Trigger Event

    Sélectionnez un ou plusieurs événements de déclenchement. Pour plus d'informations sur les types d'événements OSS, consultez Définitions des événements OSS.

    Cet exemple utilise oss:ObjectCreated:PutObject.

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

    Role Name

    Sélectionnez AliyunOSSEventNotificationRole.

    Remarque

    Si vous créez ce type de déclencheur pour la première fois, cliquez sur Authorize Now dans la boîte de dialogue qui s'affiche après avoir cliqué sur OK.

    AliyunOSSEventNotificationRole

    Une fois créé, le déclencheur apparaît dans la liste Trigger Name. Pour modifier ou supprimer le déclencheur, consultez Gérer les déclencheurs.

Étape 2 : (Facultatif) Configurer les paramètres d'entrée de la fonction

La source d'événements OSS transmet les données à votre fonction sous la forme d'un objet event. Vous pouvez analyser et traiter cet objet dans votre code. Vous pouvez également transmettre manuellement un exemple d'objet event à la fonction afin de simuler un déclenchement et de tester votre code.

  1. Dans l'onglet Code de la page de détails de la fonction, cliquez sur l'icône image.png située à côté de Test Function, puis sélectionnez Configure Test Parameters dans la liste déroulante.

  2. Dans le panneau Configure Test Parameters, sélectionnez l'onglet Create New Test Event ou Modify Existing Test Event. Saisissez un nom d'événement ainsi que son contenu, puis cliquez sur OK.

    Remarque

    Configurez le contenu de l'événement en fonction des informations fournies lors de la création du déclencheur. Assurez-vous que l'objet spécifié, source/a.png dans cet exemple, existe bien dans le bucket. Dans le cas contraire, la fonction ne sera pas invoquée ou l'invocation échouera.

    L'événement constitue un paramètre d'entrée pour une fonction Function Compute. Lorsqu'un objet est créé ou supprimé dans le bucket OSS spécifié, OSS envoie les données de l'événement à la fonction liée au format JSON. L'exemple suivant illustre ce format :

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

    Le tableau suivant décrit les paramètres d'un objet d'événement.

    Paramètre

    Type

    Valeur

    Description

    eventName

    String

    ObjectCreated:PutObject

    Type de l'événement.

    eventSource

    String

    acs:oss

    Source de l'événement. Cette valeur est fixée à acs:oss.

    eventTime

    String

    2022-08-13T06:45:43.000Z

    Heure à laquelle l'événement s'est produit, au format ISO 8601.

    eventVersion

    String

    1.0

    Version du protocole d'événement.

    oss

    Map

    Contient les détails de l'événement OSS.

    bucket

    Map

    Valeur du paramètre bucket.

    name

    String

    testbucket

    Nom du bucket.

    arn

    String

    acs:oss:cn-hangzhou:123456789:testbucket

    Identifiant unique du bucket.

    ownerIdentity

    String

    164901546557****

    ID de l'utilisateur ayant créé le bucket.

    object

    Map

    Contenu du paramètre object.

    size

    Int

    122539

    Taille de l'object. Unité : octet.

    deltaSize

    Int

    122539

    Variation de la taille de l'object. Unité : octet.

    • Lorsqu'un nouvel objet est ajouté, cette valeur correspond à sa taille.

    • Si un objet existant est écrasé par un objet portant le même nom, cette valeur représente la différence de taille entre le nouvel objet et l'ancien.

    eTag

    String

    688A7BF4F233DC9C88A80BF985AB****

    ETag de l'objet.

    key

    String

    source/a.png

    Chemin complet de l'objet.

    objectMeta

    Map

    Contenu du paramètre objectMeta.

    mimeType

    String

    application/zip

    Type de fichier de l'objet. Pour plus d'informations, consultez mimeType.

    userMeta

    Map

    Métadonnées utilisateur identifiant la finalité ou les attributs de l'objet.

    x-oss-meta-last-modified

    String

    20250213

    Les métadonnées utilisateur se composent de paires clé-valeur. La clé de métadonnée doit commencer par x-oss-meta-. Par exemple, la paire "x-oss-meta-last-modified":"20250213" indique que le fichier local a été modifié pour la dernière fois le 13 février 2025. Pour plus d'informations, consultez Métadonnées utilisateur.

    ossSchemaVersion

    String

    1.0

    Version du schéma OSS.

    ruleId

    String

    9adac8e253828f4f7c0466d941fa3db81161****

    ID de la règle de déclenchement correspondant à l'événement.

    region

    String

    cn-hangzhou

    Région du bucket.

    requestParameters

    Map

    Paramètres de la requête.

    sourceIPAddress

    String

    140.205.XX.XX

    Adresse IP source de la requête.

    responseElements

    Map

    Éléments de la réponse.

    requestId

    String

    58F9FF2D3DF792092E12044C

    ID de la requête.

    userIdentity

    Map

    Identité de l'utilisateur ayant émis la requête.

    principalId

    String

    164901546557****

    ID du compte Alibaba Cloud à l'origine de la requête.

Étape 3 : Écrire et tester le code de la fonction

Après avoir créé le déclencheur OSS, écrivez et testez le code de la fonction pour vérifier son bon fonctionnement. Dans un scénario réel, le déclencheur invoque automatiquement la fonction lorsque l'événement OSS spécifié se produit.

Avertissement

Vous devez impérativement éviter les invocations récursives dans votre code. Un cas fréquent de récursivité survient lorsqu'une fonction est déclenchée par le téléchargement d'un objet dans un bucket OSS. Après son exécution, la fonction génère un ou plusieurs nouveaux objets et les écrit dans le même bucket. Cette opération d'écriture déclenche à nouveau la fonction, créant ainsi une boucle infinie. Pour plus d'informations, consultez Règles de déclenchement des déclencheurs OSS.

  1. Dans l'onglet Code de la page de détails de la fonction, saisissez votre code dans l'éditeur et cliquez sur Deploy.

    • Le code d'exemple ci-dessous concerne les environnements d'exécution prenant en charge l'édition en ligne.

      Remarque

      Nous vous recommandons d'utiliser un endpoint OSS interne pour lire et écrire des données dans les buckets OSS depuis votre fonction. L'utilisation d'un endpoint public entraîne des frais de transfert de données Internet. Pour plus d'informations sur les endpoints internes, consultez Régions et endpoints.

      "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. Testez la fonction.

    Méthode 1 : Si vous avez configuré le paramètre d'entrée event pour simuler une source d'événements, cliquez sur Test Function.

    Méthode 2 : Sur la page Configuration > Trigger, cliquez sur le Bucket Name pour accéder au bucket correspondant. Téléchargez une image correspondant au préfixe et au suffixe d'objet spécifiés. Une fois la fonction exécutée, consultez les journaux d'exécution dans l'onglet Logs et vérifiez le résultat dans le dossier de destination du bucket.

FAQ

Références