Tous les produits
Search
Centre de documentation

Function Compute:Déclencheurs Simple Log Service

Dernière mise à jour :Aug 24, 2026

Un déclencheur Simple Log Service (SLS) intègre SLS à Function Compute en invoquant automatiquement une fonction lors de la génération de nouveaux journaux. Utilisez un déclencheur SLS pour consommer de manière incrémentielle les données d'un Logstore SLS et exécuter des tâches de traitement personnalisées.

Cas d'utilisation

  • Nettoyage et traitement des données

    Utilisez SLS pour collecter, traiter, interroger et analyser rapidement les journaux.

    image

  • Transfert de données

    Acheminez les données de journal vers des destinations telles que les produits Big Data sur le cloud ou des services tiers, et construisez des pipelines de données entre eux.

    image

Fonctionnement

Un déclencheur SLS correspond à une tâche ETL SLS dans Function Compute. Après avoir créé une tâche ETL SLS, SLS démarre un minuteur basé sur la configuration de la tâche ETL. Le minuteur interroge les informations des shards dans le Logstore. Lorsque de nouvelles données sont écrites, SLS génère un triplet <shard_id, begin_cursor, end_cursor> en tant qu'événement de fonction et invoque la fonction.

Lors d'une mise à niveau du système de stockage, un changement de curseur peut se produire même si aucune nouvelle donnée n'est écrite. Dans ce cas, chaque shard est déclenché une fois de plus sans données. Vous pouvez utiliser le curseur dans la fonction pour tenter d'obtenir les données du shard. Si aucune donnée n'est renvoyée, l'invocation est un déclenchement vide et vous pouvez l'ignorer dans la fonction. Pour plus d'informations, consultez Guide de développement de fonctions personnalisées.

Le mécanisme de déclenchement est basé sur le temps. Par exemple, si vous définissez l'intervalle de déclenchement de la tâche ETL sur 60 secondes et que des données sont continuellement écrites dans Shard0 du Logstore, le shard déclenche une invocation de fonction toutes les 60 secondes. Si aucune nouvelle donnée n'est écrite dans le shard, aucune invocation n'est déclenchée. L'entrée de chaque invocation correspond à la plage de curseurs des 60 dernières secondes. Dans la fonction, vous pouvez lire les données de Shard0 en fonction du curseur pour un traitement ultérieur.

La fréquence de déclenchement présente les caractéristiques suivantes :

  • Chaque shard est déclenché séparément. Le nombre total d'invocations observé pour un Logstore peut être élevé, mais le temps de déclenchement réel de chaque shard correspond toujours à l'intervalle configuré. Par exemple, si un Logstore comporte 10 shards, un traitement de données en temps réel sans délai de déclenchement entraîne 10 invocations de fonction toutes les 60 secondes.

  • L'intervalle de déclenchement d'un seul shard est identique à la plage temporelle des données traitées à chaque fois. Supposons que l'intervalle de déclenchement soit de 60 secondes. Lors de l'exécution de la fonction, l'intervalle de déclenchement relève de l'un des deux cas suivants :

    • Absence de délai de déclenchement : la fonction est déclenchée toutes les 60 secondes comme prévu, et la plage de données traitée est [now -60s, now).

    • Délai de déclenchement, qui se produit lorsque la position de traitement actuelle du shard SLS accuse un retard de plus de 10 secondes par rapport aux dernières données écrites : le déclencheur rattrape son retard et peut se déclencher toutes les 2 secondes. Chaque invocation traite toujours une fenêtre de 60 secondes.

    image

Fonctions de traitement des données

La fonction invoquée par un déclencheur SLS peut être de l'un des types suivants :

Prérequis

  • Function Compute

  • Simple Log Service (SLS)

    • Créer un projet et un Logstore

    • Créez un projet et deux Logstores. Un Logstore stocke les journaux collectés. Function Compute étant déclenché par des journaux incrémentiels, assurez-vous que les journaux peuvent être collectés en continu dans ce Logstore. L'autre Logstore stocke les journaux générés par le déclencheur SLS.

    Le projet doit se trouver dans la même région que le service Function Compute.

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

Vous pouvez configurer un déclencheur SLS qui obtient périodiquement les données mises à jour et invoque une fonction pour consommer de manière incrémentielle les données d'un Logstore SLS. Dans la fonction, vous effectuez des tâches de traitement personnalisées, telles que le nettoyage et le traitement des données, et acheminez les données vers des services tiers. Cet exemple montre uniquement comment obtenir les données de journal et les afficher. La fonction utilisée pour le traitement des données peut être un modèle fourni par SLS ou une fonction personnalisée. Les étapes suivantes utilisent une fonction personnalisée.

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

  2. Dans la barre de navigation supérieure, sélectionnez une région. Sur la page Functions, cliquez sur la fonction que vous souhaitez gérer.

  3. Sur la page Function Details, cliquez sur l'onglet Trigger, puis cliquez sur Create Trigger. Dans le panneau Create Trigger, définissez Trigger Type sur Log Service, configurez les autres paramètres, puis cliquez sur OK.

ParamètreDescriptionExemple
NameNom personnalisé pour le déclencheur. Si vous laissez ce paramètre vide, Function Compute génère automatiquement un nom de déclencheur.log_trigger
Version or AliasValeur par défaut : LATEST. Pour créer un déclencheur pour une autre version ou un autre alias, basculez d'abord vers cette version ou cet alias dans le coin supérieur droit de la page Function Details. Pour une introduction aux versions et aux alias, consultez Gérer les versions et Gérer les alias.LATEST
Log Service ProjectProjet SLS à consommer.aliyun-fc-cn-hangzhou-2238f0df-a742-524f-9f90-976ba457****
LogstoreLogstore à consommer. Le déclencheur s'abonne périodiquement aux données de ce Logstore et les transmet à la fonction pour un traitement personnalisé.function-log
Trigger IntervalIntervalle auquel SLS invoque la fonction. Valeurs valides : [3 600]. Unité : secondes. Valeur par défaut : 60.60
Retries

Nombre maximal de tentatives autorisées pour un seul déclenchement. Valeurs valides : [0 100]. Valeur par défaut : 3.

Remarque

Une invocation est réussie lorsque status=200 et que l'en-tête X-Fc-Error-Type n'est ni UnhandledInvocationError ni HandledInvocationError. Tous les autres cas indiquent une invocation échouée et déclenchent une nouvelle tentative. Pour plus d'informations sur le paramètre X-Fc-Error-Type, consultez Paramètres de réponse. Si la fonction échoue, la requête actuelle est retentée jusqu'à ce que la fonction réussisse. Les tentatives suivent d'abord le nombre de tentatives configuré. Si l'invocation échoue toujours après le nombre maximal de tentatives, l'intervalle augmente et le système entre en mode de nouvelle tentative avec temporisation exponentielle (backoff).

3
Trigger LogSélectionnez un Logstore existant. Les journaux générés lorsque SLS invoque la fonction sont enregistrés dans ce Logstore.function-log2
Invocation ParametersPour transmettre des paramètres personnalisés, configurez-les ici. La valeur est transmise à la fonction en tant que champ parameter de l'événement. La valeur doit être une chaîne au format JSON. Valeur par défaut : vide.Aucun
Role Name

Sélectionnez AliyunLogETLRole.

Remarque

Si c'est la première fois que vous créez un déclencheur de ce type, cliquez sur OK, puis sélectionnez Authorize Now dans la boîte de dialogue qui s'affiche.

AliyunLogETLRole

Une fois le déclencheur créé, il apparaît dans l'onglet Triggers. Pour modifier ou supprimer le déclencheur, consultez « Manage Triggers » dans le guide d'utilisation de Function Compute.

Étape 2 : Configurer les autorisations

Le rôle de fonction fournit les autorisations SLS dont votre fonction a besoin lors de son invocation.

  1. Sur la page Function Details, cliquez sur l'onglet Configuration. Dans la section Advanced Settings, cliquez sur Modify. Dans le panneau Advanced Settings, sélectionnez un Function Role.

    • Si votre fonction lit uniquement les données de journal, vous pouvez utiliser le rôle par défaut AliyunFCServerlessDevsRole, qui dispose d'autorisations en lecture seule sur SLS par défaut.

    • Si votre fonction nécessite des autorisations dépassant l'accès en lecture seule à SLS, créez un rôle RAM personnalisé qui répond aux deux exigences suivantes :

      a. Lors de la création du rôle RAM, définissez Trusted entity sur Cloud Service et Trusted service sur Function Compute. Pour plus d'informations, consultez Créer un rôle RAM pour un service Alibaba Cloud approuvé.

      b. Accordez au rôle RAM les autorisations SLS requises par votre fonction. Pour plus d'informations, consultez Exemples de stratégies RAM personnalisées.

  2. Cliquez sur Deploy.

Étape 3 : Déployer la fonction et afficher les journaux imprimés

  1. Dans l'onglet Code de la page Function Details, écrivez votre code dans l'éditeur de code, puis cliquez sur Deploy.

    Cet exemple déploie une fonction Python qui effectue les opérations suivantes :

    • Obtient les informations d'événement SLS, telles que endpoint, projectName, logstoreName et beginCursor, à partir de event.

    • Obtient les informations d'identification accessKeyId, accessKeySecret et securityToken à partir de context.

    • Initialise le client SLS en fonction des informations obtenues.

    • Obtient les données de journal à la position de curseur spécifiée depuis le Logstore source. Vous pouvez utiliser l'exemple de code suivant comme modèle de départ pour la plupart des scénarios de traitement de journaux.

    """
    This sample code is mainly doing the following things:
    * Get SLS processing related information from event
    * Initiate SLS client
    * Pull logs from source log store
    """
    import logging
    import json
    from aliyun.log import LogClient
    
    logger = logging.getLogger()
    
    def handler(event, context):
        # Access keys can be fetched through context.credentials
        print("The content in context entity is: ", context)
        creds = context.credentials
        access_key_id = creds.access_key_id
        access_key_secret = creds.access_key_secret
        security_token = creds.security_token
    
        # parse event in object
        event_obj = json.loads(event.decode())
        print("The content in event entity is: ", event_obj)
    
        # Get the name of log project, the name of log store, the endpoint of sls, begin cursor, end cursor and shardId from event.source
        source = event_obj['source']
        log_project = source['projectName']
        log_store = source['logstoreName']
        endpoint = source['endpoint']
        begin_cursor = source['beginCursor']
        end_cursor = source['endCursor']
        shard_id = source['shardId']
    
        # Initialize client of sls
        client = LogClient(endpoint=endpoint, accessKeyId=access_key_id, accessKey=access_key_secret, securityToken=security_token)
    
        # Read data from source logstore within cursor: [begin_cursor, end_cursor) in the example, which contains all the logs trigger the invocation
        while True:
            response = client.pull_logs(project_name=log_project, logstore_name=log_store, shard_id=shard_id, cursor=begin_cursor, count=100, end_cursor=end_cursor, compress=False)
            log_group_cnt = response.get_loggroup_count()
            if log_group_cnt == 0:
                break
            logger.info("get %d log group from %s" % (log_group_cnt, log_store))
            logger.info(response.get_loggroup_list())
            begin_cursor = response.get_next_cursor()
    
        return 'success'
  2. Sur la page Function Details, choisissez Logs > Function Logs pour afficher les dernières données obtenues lors de l'exécution de la fonction. Si le message The logging feature is not enabled for the current function. s'affiche, cliquez sur Enable. Vous avez terminé la configuration du déclencheur SLS. Une fois l'intervalle de déclenchement écoulé et de nouvelles données écrites dans le Logstore source, le déclencheur invoque la fonction et les journaux de la fonction apparaissent sur la page Function Logs. Vous pouvez également vérifier le Logstore que vous avez spécifié pour le paramètre Trigger Log à l'étape 1 pour confirmer que le déclencheur s'est activé. Pour déboguer le code dans la console, suivez les étapes ci-dessous.

(Facultatif) Étape 4 : Tester la fonction avec un événement simulé

  1. Dans l'onglet Code de la page Function Details, cliquez sur l'icône image.png à droite de Test Function et 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 et le contenu de l'événement, puis cliquez sur OK. Si vous créez un nouvel événement de test, nous vous recommandons de sélectionner le modèle d'événement Log Service. Pour plus d'informations sur les données de test, consultez paramètre d'événement.

  3. Après avoir configuré l'événement simulé, cliquez sur Test Function. Une fois l'invocation terminée, vous pouvez afficher le résultat au-dessus de l'onglet Code.

Limites

Le nombre de déclencheurs SLS associés à un seul projet ne peut pas dépasser cinq fois le nombre de Logstores existants dans ce projet.

Ne configurez pas plus de cinq déclencheurs SLS pour chaque Logstore. Sinon, l'efficacité de la transmission des données vers Function Compute risque d'être affectée.

Paramètres d'entrée

context

Lorsque Function Compute exécute votre fonction, il transmet un objet de contexte au paramètre d'entrée context de la fonction. L'objet contient des informations sur l'invocation, le service, la fonction et l'environnement d'exécution.

Cette rubrique utilise context.credentials pour obtenir les informations d'identification. Pour plus d'informations sur les champs disponibles, consultez Contexte.

event

Après le déclenchement du déclencheur SLS, il transmet les données d'événement au runtime. Le runtime convertit l'événement en un objet JSON et transmet cet objet au paramètre d'entrée event de la fonction. Le format est le suivant :

{
    "parameter": {},
    "source": {
        "endpoint": "http://cn-hangzhou-intranet.log.aliyuncs.com",
        "projectName": "fc-test-project",
        "logstoreName": "fc-test-logstore",
        "shardId": 0,
        "beginCursor": "MTUyOTQ4MDIwOTY1NTk3ODQ2Mw==",
        "endCursor": "MTUyOTQ4MDIwOTY1NTk3ODQ2NA=="
    },
    "jobName": "1f7043ced683de1a4e3d8d70b5a412843d81****",
    "taskId": "c2691505-38da-4d1b-998a-f1d4bb8c****",
    "cursorTime": 1529486425
}
ParamètreDescription
parameterValeur des paramètres d'invocation que vous spécifiez lors de la création du déclencheur.
source

Informations sur le bloc de journaux que la fonction lit.

Remarque

endpoint : endpoint SLS de la région à laquelle appartient le projet SLS. projectName : nom du projet SLS. logstoreName : nom du Logstore consommé par Function Compute. Le déclencheur s'abonne périodiquement aux données de ce Logstore et les transmet à la fonction pour un traitement personnalisé. shardId : shard spécifique dans le Logstore. beginCursor : position à laquelle commence la consommation des données. endCursor : position à laquelle s'arrête la consommation des données. Lors du débogage de la fonction, vous pouvez appeler l'opération GetCursor by time pour obtenir beginCursor et endCursor, et construire un événement de fonction pour les tests en vous basant sur l'exemple précédent.

jobNameNom de la tâche ETL SLS. Un déclencheur SLS configuré pour une fonction correspond à une tâche ETL SLS. Ce paramètre est généré automatiquement par Function Compute. Vous n'avez pas besoin de le configurer.
taskIdPour une tâche ETL, taskId est un identifiant déterministe d'une invocation de fonction. Ce paramètre est généré automatiquement par Function Compute. Vous n'avez pas besoin de le configurer.
cursorTimeHorodatage Unix auquel le dernier journal est arrivé sur le serveur SLS. Unité : secondes.

FAQ

Pourquoi la fréquence à laquelle le déclencheur SLS invoque la fonction est-elle parfois plus élevée que prévu ?

Chaque shard est déclenché séparément, de sorte que le nombre total d'invocations pour un Logstore peut sembler plus élevé que l'intervalle configuré. La fréquence de déclenchement réelle de chaque shard correspond toujours à l'intervalle. Pour plus de détails sur le comportement de la fréquence de déclenchement, consultez Fonctionnement.

denied by sts or ram, action: log:GetCursorOrData, resource: ****

Si cette erreur apparaît dans les journaux de la fonction, il se peut que les autorisations ne soient pas configurées pour la fonction ou que la stratégie d'accès soit incorrecte. Consultez Étape 2 : Configurer les autorisations.

Le déclencheur SLS n'invoque pas la fonction lors de la génération de nouveaux journaux. Que faire ?

Vérifiez les points suivants :

  • Vérifiez s'il existe des modifications de données incrémentielles dans le Logstore configuré pour la tâche de déclenchement Function Compute. Une fonction est invoquée lorsque les données du shard changent.

  • Vérifiez les journaux du déclencheur et les journaux d'exécution de la fonction pour détecter d'éventuelles exceptions. Les journaux du déclencheur sont stockés dans le Logstore que vous avez spécifié pour le paramètre Trigger Log à l'étape 1.