Tous les produits
Search
Centre de documentation

Function Compute:Configurer un déclencheur OSS EventBridge

Dernière mise à jour :Aug 12, 2026

Pour spécifier plusieurs préfixes et suffixes d'objets, ou associer plus de 10 déclencheurs à un seul bucket Object Storage Service (OSS), créez un déclencheur OSS basé sur EventBridge afin de répondre à des événements tels que le téléchargement de fichiers.

Remarques

Notez les différences suivantes entre les déclencheurs OSS basés sur EventBridge et les déclencheurs OSS natifs :

  • Vous pouvez associer jusqu'à 10 déclencheurs OSS natifs à un bucket. Pour en associer davantage, utilisez des déclencheurs OSS basés sur EventBridge.

    Remarque

    Nous vous recommandons de ne pas associer plus de 10 déclencheurs à un même bucket. Si vous avez besoin de déclencheurs supplémentaires, créez un nouveau bucket puis configurez-y les déclencheurs nécessaires.

  • Vous pouvez créer jusqu'à 50 déclencheurs OSS basés sur EventBridge, conformément aux limites de ressources d'EventBridge. Pour plus d'informations, consultez Limites.

  • Pour les déclencheurs OSS basés sur EventBridge, la combinaison des champs Event Type, Object Prefix et Object Suffix n'a pas besoin d'être unique.

  • Vous pouvez configurer plusieurs valeurs pour les champs Object Prefix et Object Suffix. Toutefois, la correspondance floue et les expressions régulières ne sont pas prises en charge pour Object Prefix et Object Suffix.

  • Un déclencheur OSS basé sur EventBridge n'est pas actif immédiatement après sa création. Un délai d'environ 30 secondes est nécessaire avant qu'il ne commence à déclencher la fonction associée.

Exemple

Vous pouvez configurer un déclencheur OSS avec une règle spécifiant les préfixes source et test ainsi que les suffixes .rar et .zip. Lorsqu'un fichier compressé portant le suffixe .rar ou .zip est téléchargé dans le répertoire source ou test d'un bucket OSS spécifié, une fonction se déclenche automatiquement. Une fois l'exécution terminée, le fichier décompressé est stocké dans un autre répertoire du même bucket.

Prérequis

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

  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, cliquez sur l'onglet Trigger, puis sur Create Trigger.

  4. Dans le panneau Trigger Type, définissez Event triggers for Alibaba Cloud services sur Object Storage Service (OSS) sous OK, configurez les autres paramètres, puis cliquez sur OK.

    Paramètre

    Actions

    Exemple

    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 différent, sélectionnez d'abord la version ou l'alias 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éé.

    bucket-zh****

    Object Prefix

    Saisissez les préfixes des noms d'objets à faire correspondre. Function Compute recommande de configurer des préfixes et des suffixes afin d'éviter les invocations circulaires et les frais inattendus.

    Cliquez sur + Add Object Prefix pour ajouter plusieurs valeurs au champ Object Prefix.

    Important

    Un préfixe d'objet ne doit pas commencer par une barre oblique (/), sinon le déclencheur ne s'activera pas.

    • source

    • test

    Object Suffix

    Saisissez les suffixes des noms d'objets à faire correspondre. Function Compute recommande de configurer des préfixes et des suffixes afin d'éviter les invocations circulaires et les frais inattendus.

    Cliquez sur + Add Object Suffix pour ajouter plusieurs valeurs au champ Object Suffix.

    png

    Event Type

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

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

    Event Pattern Content

    Une fois les champs Object Prefix, Object Suffix et Event Type configurés, le système renseigne automatiquement ce paramètre.

    Important

    Modifiez le contenu du champ Event Pattern Content avec prudence. Une modification incorrecte peut entraîner l'échec du déclencheur. Avant toute modification, assurez-vous de bien comprendre les règles applicables. Pour plus d'informations, consultez Modèles d'événements.

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

    Invocation Method

    Sélectionnez la méthode d'invocation de la fonction. La méthode par défaut est l'invocation synchrone.

    • Sync Invocation : Function Compute déclenche la fonction et attend la fin de l'exécution avant de retourner le résultat. Cette méthode convient à un large éventail de cas d'utilisation. Pour plus d'informations, consultez Invocation synchrone.

    • Async Invocation : Function Compute déclenche la fonction et retourne une réponse immédiate. Le service garantit que la fonction s'exécute au moins une fois, mais ne retourne pas le résultat d'exécution. Cette méthode est adaptée aux fonctions dont le temps d'exécution est long. Pour plus d'informations, consultez Invocation asynchrone.

    Sync Invocation

    Trigger State

    Indique si le déclencheur doit être activé immédiatement lors de sa création. Par défaut, l'option Enable Trigger est sélectionnée, ce qui signifie que le déclencheur est activé dès sa création.

    N/A

    Push Format

    Spécifie le format de données du paramètre d'entrée d'événement de la fonction.

    • CloudEvents : Spécification décrivant les données d'événement dans un format commun. Elle inclut une description de l'événement et de sa charge utile, simplifiant ainsi la déclaration et la distribution des événements entre les services et les plateformes.

    • RawData : Distribue uniquement la charge utile de l'événement, sans les autres métadonnées du format CloudEvents.

    Remarque

    Les déclencheurs OSS natifs diffèrent des déclencheurs OSS basés sur EventBridge. Le paramètre d'événement d'un déclencheur OSS natif prend uniquement en charge le modèle OSSEvents, qui correspond au format d'événement généré par OSS.

    CloudEvents

    Pour plus d'informations sur les paramètres avancés, tels que les tentatives et les paramètres de lettre morte, consultez Fonctionnalités avancées des déclencheurs.

    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 : Configurer les paramètres d'entrée de la fonction

Un déclencheur OSS basé sur EventBridge transmet l'événement à la fonction sous forme de paramètre d'entrée au format CloudEvents. Vous pouvez transmettre manuellement un événement à la fonction pour simuler un déclenchement.

  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 Create New Test Event ou Modify Existing Test Event. Saisissez un nom d'événement ainsi que son contenu, puis cliquez sur OK.

    L'événement constitue le paramètre d'entrée pour Function Compute. Lorsqu'un événement spécifié se produit dans le bucket OSS cible, le système envoie les données de l'événement à la fonction liée au format JSON. L'exemple de code suivant illustre ce processus :

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

    Le tableau suivant décrit les champs du paramètre d'événement.

    Paramètre

    Type

    Exemple

    Description

    datacontenttype

    string

    application/json;charset=utf-8

    Type de contenu du paramètre data. Le paramètre datacontenttype accepte uniquement la valeur application/json;charset=utf-8.

    aliyunaccountid

    string

    143199913****

    ID de votre compte Alibaba Cloud. Vous pouvez le trouver dans la section References de la page Overview de la console Function Compute.

    data

    struct

    {}

    Contenu de l'événement OSS, représenté sous forme d'objet JSON. Les CloudEvents contiennent le contexte défini par OSS lors de la survenue de l'événement. Ces informations sont encapsulées dans le paramètre data.

    subject

    string

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

    Sujet de l'événement.

    Le format est acs:oss:<region>:<your_account_id>:<your_bucket>, où <region> correspond à la région de la fonction, <your_account_id> à l'ID de votre compte Alibaba Cloud, et <your_bucket> au nom de votre bucket.

    aliyunoriginalaccountid

    string

    143199913****

    ID du compte Alibaba Cloud à l'origine de l'événement.

    source

    string

    acs.oss

    Source de l'événement. Pour les déclencheurs OSS, cette valeur est fixée à acs.oss.

    type

    string

    oss:ObjectCreated:PutObject

    Type de l'événement.

    aliyunpublishtime

    timestamp

    2023-11-04T08:49:26.745Z

    Heure de réception de l'événement.

    specversion

    string

    1,0

    Version du protocole CloudEvents.

    aliyuneventbusname

    string

    default

    Nom du bus d'événements ayant reçu l'événement.

    id

    string

    6364D216511B143733C5A67B

    ID de l'événement.

    time

    timestamp

    2023-11-04T08:49:26Z

    Heure de survenue de l'événement.

    aliyunregionid

    string

    cn-hangzhou

    Région dans laquelle l'événement a été reçu.

    aliyunpublishaddr

    string

    140.205.XX.XX

    Adresse IP du serveur recevant l'événement.

    Vous devez mettre à jour les champs suivants du paramètre data pour les adapter à votre configuration :

    • userIdentity.principalId : Remplacez cette valeur par l'ID de votre compte Alibaba Cloud.

    • region : Remplacez cette valeur par la région où vous avez créé la fonction.

    • oss.bucket.name : Remplacez cette valeur par le nom de votre bucket, qui doit se trouver dans la même région que la fonction.

    • oss.bucket.arn : Le format est acs:oss:<region>:<your_account_id>:<your_bucket>, où <region> correspond à la région de la fonction, <your_account_id> à l'ID de votre compte Alibaba Cloud, et <your_bucket> au nom de votre bucket situé dans la même région.

    • oss.bucket.ownerIdentity : Remplacez cette valeur par l'ID de votre compte Alibaba Cloud.

    • object.key : Remplacez cette valeur par l'objet que vous avez téléchargé dans le bucket de destination.

    Important

    Lorsque vous simulez un déclenchement en configurant le paramètre d'événement, assurez-vous que l'objet spécifié (par exemple source/a.png dans ce tutoriel) existe bien dans le bucket configuré. Dans le cas contraire, la fonction ne sera pas déclenchée ou son exécution échouera.

É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 en vérifier le bon fonctionnement. La fonction sera ensuite déclenchée automatiquement par les événements OSS réels.

Avertissement

Veillez à éviter les déclenchements en boucle dans votre code, sous peine d'engendrer des frais inattendus. Un scénario typique de boucle survient lorsqu'un téléchargement d'objet dans un bucket OSS déclenche une fonction, laquelle génère ensuite un ou plusieurs fichiers et les écrit dans le même bucket, provoquant ainsi un nouveau déclenchement. Pour plus d'informations, consultez Règles des déclencheurs OSS.

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

    La section suivante détaille les préparatifs nécessaires et fournit des exemples de code.

    Remarque

    Si votre fonction doit lire ou écrire des ressources OSS, nous vous recommandons d'utiliser un endpoint OSS interne afin d'éviter le trafic Internet et les frais associés. Pour plus d'informations sur les endpoints internes OSS, consultez Régions et endpoints.

    /* Preparations:
    1. Run the following commands in a terminal to create the package.json file and install the jimp module.
      a. Run npm init to create the package.json file.
      b. Run npm install jimp to install the jimp module.
    2. Make sure that the function handler is 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;
    
         // OSS regions are prefixed with "oss-". Example: oss-cn-shanghai.
         var ossRegion = "oss-" + ossEvent.region;
         // Create an OSS client.
         var client = new oss({
             region: ossRegion,
             /*
             An Alibaba Cloud account's AccessKey pair grants full API access. For security, use a RAM user for API calls and routine O&M.
             Do not hard-code your AccessKey ID and secret in your code, as this can lead to leaks and compromise your account's security.
             This example retrieves credentials from the context.
             */
             accessKeyId: ctx.credentials.accessKeyId,
             accessKeySecret: ctx.credentials.accessKeySecret,
             stsToken: ctx.credentials.securityToken
         });
         // Obtain the bucket name from the event.
         client.useBucket(ossEvent.oss.bucket.name);
         // The processed image is saved to the processed/ directory.
         var newKey = ossEvent.oss.object.key.replace("source/", "processed/");
         var tmpFile = "/tmp/processed.png";
         // Obtain the OSS object.
         console.log('Getting object: ', ossEvent.oss.object.key)
         client.get(ossEvent.oss.object.key).then(function (val) {
             // Read the content of the OSS object from the cache.
             jimp.read(val.content, function (err, image) {
                 if (err) {
                     console.error("Failed to read image");
                     callback(err);
                     return;
                 }
                 // Resize the image and save it to the tmp file.
                 image.resize(128, 128).write(tmpFile, function (err) {
                     if (err) {
                         console.error("Failed to write image locally");
                         callback(err);
                         return;
                     }
                     // Upload the read OSS object to the OSS bucket and rename the object.
                     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
         });
     };
    # Preparations:
    # 1. Make sure that the role configured for the function has permissions to access OSS. You can log on to the RAM console to grant the required permissions to the role.
    # 2. Make sure that the function's request handler is index.handler.
    
    # -*- coding: utf-8 -*-
    import oss2, json
    from wand.image import Image
    def handler(event, context):
        evt = json.loads(event)
        creds = context.credentials
        # Required by OSS SDK
        # An Alibaba Cloud account's AccessKey pair grants full API access. For security, use a RAM user for API calls and routine O&M.
        # Do not hard-code your AccessKey ID and secret in your code, as this can lead to leaks and compromise your account's security.
        # This example retrieves credentials from the context.
        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']
        # Processed images will be saved to 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)
    /* Preparations:
    1. Make sure that the role configured for the function has permissions to access OSS. You can log on to the RAM console and grant the role permissions to access OSS.
    2. Make sure that the function's request handler is index.handler.
    */
    
    <?php
      use OSS\OssClient;
    function handler($event, $context) {
      $event           = json_decode($event, $assoc = true);
      /*
        An Alibaba Cloud account's AccessKey pair grants full API access. For security, use a RAM user for API calls and routine O&M.
        Do not hard-code your AccessKey ID and secret in your code, as this can lead to leaks and compromise your account's security.
        This example retrieves credentials from the context.
      */
      $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());
      }
    }
    /* Preparations:
    1. Add the following dependencies to pom.xml.
    <dependencies>
        <dependency>
          <groupId>com.aliyun.fc.runtime</groupId>
          <artifactId>fc-java-core</artifactId>
          <version>1.4.1</version>
        </dependency>
        <dependency>
          <groupId>com.aliyun.fc.runtime</groupId>
          <artifactId>fc-java-event</artifactId>
          <version>1.2.0</version>
        </dependency>
    </dependencies>
    2. Make sure that the function handler is example.App::handleRequest.
    */
    
    package example;
    
    import java.io.*;
    import java.util.Map;
    
    import com.aliyun.fc.runtime.Context;
    import com.aliyun.fc.runtime.StreamRequestHandler;
    import com.aliyun.fc.runtime.event.OSSEvent.Event;
    
    import com.fasterxml.jackson.annotation.JsonCreator;
    import com.fasterxml.jackson.annotation.JsonProperty;
    import com.fasterxml.jackson.core.type.TypeReference;
    import com.fasterxml.jackson.databind.DeserializationFeature;
    import com.fasterxml.jackson.databind.ObjectMapper;
    
    public class App implements StreamRequestHandler {
    
        private static final ObjectMapper mapper = new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        public static final class CloudEvent {
            public final String id;
    
            public final String source;
            public final String specversion;
    
            public final String type;
            public final String datacontenttype;
    
            public final String dataschema;
    
            public final String subject;
    
            public final String time;
    
            public final Map<String, ?> extensions;
    
            public final Event data;
    
            @JsonCreator
            public CloudEvent(@JsonProperty("id") String id, @JsonProperty("source") String source, @JsonProperty("specversion") String specversion, @JsonProperty("type") String type, @JsonProperty("datacontenttype") String datacontenttype, @JsonProperty("dataschema") String dataschema, @JsonProperty("subject") String subject, @JsonProperty("time") String time, @JsonProperty("extensions") Map<String, ?> extensions, @JsonProperty("data") Event data) {
                this.id = id;
                this.source = source;
                this.specversion = specversion;
                this.type = type;
                this.datacontenttype = datacontenttype;
                this.dataschema = dataschema;
                this.subject = subject;
                this.time = time;
                this.extensions = extensions;
                this.data = data;
            }
    
            public String getId() {
                return this.id;
            }
    
            public String getSource() {
                return this.source;
            }
    
            public String getSpecversion() {
                return this.specversion;
            }
    
            public String getType() {
                return this.type;
            }
    
            public String getDatacontenttype() {
                return this.datacontenttype;
            }
    
            public String getDataschema() {
                return this.dataschema;
            }
    
            public String getSubject() {
                return this.subject;
            }
    
            public String getTime() {
                return this.time;
            }
    
            public Map<String, ?> getExtensions() {
                return this.extensions;
            }
    
            public Event getData() {
                return this.data;
            }
        }
        @Override
        public void handleRequest(
                InputStream inputStream, OutputStream outputStream, Context context) throws IOException {
            CloudEvent cloudEvents = mapper.readValue(inputStream, new TypeReference<CloudEvent>() {});
            Event ossEvent = cloudEvents.getData();
            context.getLogger().info(String.format("received %s from %s @ %s", ossEvent.eventName, ossEvent.eventSource, ossEvent.region));
            outputStream.write(String.format("received %s from %s @ %s", ossEvent.eventName, ossEvent.eventSource, ossEvent.region).getBytes());
            outputStream.write(String.format("received bucket %s", ossEvent.oss.bucket.arn).getBytes());
            outputStream.write(String.format("received object %s and it's size is %s", ossEvent.oss.object.key, ossEvent.oss.object.size).getBytes());
        }
    }
  2. Cliquez sur Test Function.

    Une fois l'exécution terminée, vous pouvez consulter le résultat au-dessus de l'onglet Code.

FAQ

Rubriques connexes