Todos los productos
Search
Centro de documentos

Function Compute:Configurar un disparador nativo de OSS

Última actualización: Sep 06, 2026

Cree y configure un disparador nativo de OSS en la consola de Function Compute. Cuando ocurre un evento específico en OSS, el disparador invoca automáticamente su función. Esto le permite responder fácilmente a eventos como la carga de archivos e implementar rápidamente un flujo de trabajo completo sin agregar lógica de escucha de eventos a su código.

Escenario de ejemplo

Configure un disparador de OSS y establezca su prefijo de objeto en source. Cuando se carga una imagen en el directorio source del bucket de OSS especificado, el disparador invoca automáticamente la función. La función cambia el tamaño de la imagen y la guarda en el directorio processed del mismo bucket. Por ejemplo, la función procesa source/a.png y guarda el resultado como processed/a.png.

Requisitos previos

Límites

  • Un bucket puede tener un máximo de 10 disparadores nativos de OSS.

    Nota

    Si necesita asociar más disparadores de OSS con un bucket, cree EventBridge-based OSS triggers. Sin embargo, se recomienda no asociar más de 10 disparadores con un solo bucket. Si requiere más, considere crear un nuevo bucket y configurar los disparadores correspondientes.

  • Los disparadores nativos de OSS y EventBridge-based OSS triggers no admiten coincidencias con comodines ni expresiones regulares para los prefijos y sufijos de objeto.

  • Un disparador nativo de OSS admite únicamente un prefijo de objeto y un sufijo de objeto. Para configurar varios prefijos o sufijos, utilice un EventBridge-based OSS trigger.

Paso 1: Crear un disparador de OSS

  1. Inicie sesión en la consola de Function Compute. En el panel de navegación izquierdo, elija Function Management > Functions.

  2. En la barra de navegación superior, seleccione una región. En la página Functions, haga clic en la función de destino.

  3. En la página de detalles de la función, seleccione la pestaña Trigger y haga clic en Create Trigger. En el panel Create Trigger, configure los parámetros y haga clic en OK.

    Parámetro

    Acciones

    Ejemplo

    Trigger Type

    Seleccione OSS.

    OSS

    Name

    Introduzca un nombre personalizado para el disparador.

    oss-trigger

    Version or Alias

    El valor predeterminado es LATEST. Si desea crear un disparador para una versión o alias diferente, primero debe seleccionarlo en la lista desplegable Version or Alias de la página de detalles de la función. Para obtener más información sobre versiones y alias, consulte Manage versions y Manage aliases.

    LATEST

    Bucket Name

    Seleccione el bucket de OSS que creó.

    testbucket

    Object Prefix

    Introduzca el prefijo de los nombres de objeto que desea coincidir. Se recomienda especificar tanto un prefijo como un sufijo de objeto para evitar invocaciones recursivas del disparador que generen cargos adicionales. Además, si distintos disparadores del mismo bucket comparten el mismo tipo de evento, sus prefijos y sufijos no deben ser idénticos. Para obtener más información, consulte Triggering rules for OSS triggers.

    Importante

    El prefijo de objeto no puede comenzar con una barra diagonal (/). De lo contrario, el disparador no se podrá invocar.

    source

    Object Suffix

    Introduzca el sufijo de los nombres de objeto que desea coincidir. Se recomienda encarecidamente especificar tanto un prefijo como un sufijo para evitar invocaciones recursivas del disparador que generen cargos adicionales. Además, si distintos disparadores del mismo bucket comparten el mismo tipo de evento, sus prefijos y sufijos no deben ser idénticos. Para obtener más información, consulte Triggering rules for OSS triggers.

    png

    Trigger Event

    Seleccione uno o más eventos de disparador. Para obtener más información sobre los tipos de eventos de OSS, consulte OSS event definitions.

    Este ejemplo utiliza oss:ObjectCreated:PutObject.

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

    Role Name

    Seleccione AliyunOSSEventNotificationRole.

    Nota

    Si es la primera vez que crea este tipo de disparador, haga clic en Authorize Now en el cuadro de diálogo que aparece después de hacer clic en OK.

    AliyunOSSEventNotificationRole

    Una vez creado el disparador, este aparecerá en la lista Trigger Name. Para modificar o eliminar el disparador, consulte Manage triggers.

Paso 2: (Opcional) Configurar los parámetros de entrada de la función

El origen de eventos de OSS pasa los datos a su función como un objeto event. Analice y procese este objeto en su código. También puede pasar manualmente un event de muestra a la función para simular un disparador y probar su código.

  1. En la pestaña Code de la página de detalles de la función, haga clic en el icono image.png junto a Test Function y seleccione Configure Test Parameters en la lista desplegable.

  2. En el panel Configure Test Parameters, seleccione la pestaña Create New Test Event o Modify Existing Test Event. Introduzca un nombre de evento y el contenido del evento, y luego haga clic en OK.

    Nota

    Configure el contenido del evento según la información que proporcionó al crear el disparador. Asegúrese de que el objeto especificado, source/a.png en este ejemplo, exista en el bucket. De lo contrario, la función no se invocará o la invocación fallará.

    El evento es un parámetro de entrada para una función de Function Compute. Cuando se crea o elimina un objeto en el bucket de OSS especificado, OSS envía los datos del evento a la función vinculada en formato JSON. A continuación se muestra un ejemplo:

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

    La siguiente tabla describe los parámetros de un objeto de evento.

    Parámetro

    Tipo

    Valor

    Descripción

    eventName

    String

    ObjectCreated:PutObject

    El tipo de evento.

    eventSource

    String

    acs:oss

    El origen del evento. El valor está fijado en acs:oss.

    eventTime

    String

    2022-08-13T06:45:43.000Z

    La hora en que ocurrió el evento, en formato ISO 8601.

    eventVersion

    String

    1.0

    La versión del protocolo de eventos.

    oss

    Map

    Contiene los detalles del evento de OSS.

    bucket

    Map

    El valor del parámetro bucket.

    name

    String

    testbucket

    El nombre del bucket.

    arn

    String

    acs:oss:cn-hangzhou:123456789:testbucket

    El identificador único del bucket.

    ownerIdentity

    String

    164901546557****

    El ID del usuario que creó el bucket.

    object

    Map

    El contenido del parámetro object.

    size

    Int

    122539

    El tamaño del object. Unidad: Byte.

    deltaSize

    Int

    122539

    El cambio en el tamaño del object. Unidad: Byte.

    • Si se agrega un objeto nuevo, este valor corresponde al tamaño del objeto.

    • Si se sobrescribe un objeto existente con otro del mismo nombre, este valor representa la diferencia de tamaño entre el objeto nuevo y el anterior.

    eTag

    String

    688A7BF4F233DC9C88A80BF985AB****

    El ETag del objeto.

    key

    String

    source/a.png

    La ruta completa del objeto.

    objectMeta

    Map

    El contenido del parámetro objectMeta.

    mimeType

    String

    application/zip

    El tipo de archivo del objeto. Para obtener más información, consulte mimeType.

    userMeta

    Map

    Los metadatos de usuario que identifican el propósito o los atributos del objeto.

    x-oss-meta-last-modified

    String

    20250213

    Los metadatos de usuario constan de pares clave-valor. La clave de metadatos debe comenzar con x-oss-meta-. Por ejemplo, el par "x-oss-meta-last-modified":"20250213" indica que el archivo local se modificó por última vez el 13 de febrero de 2025. Para obtener más información, consulte User metadata.

    ossSchemaVersion

    String

    1.0

    La versión del esquema de OSS.

    ruleId

    String

    9adac8e253828f4f7c0466d941fa3db81161****

    El ID de la regla de disparador con la que coincidió el evento.

    region

    String

    cn-hangzhou

    La región del bucket.

    requestParameters

    Map

    Los parámetros de la solicitud.

    sourceIPAddress

    String

    140.205.XX.XX

    La dirección IP de origen de la solicitud.

    responseElements

    Map

    Los elementos de la respuesta.

    requestId

    String

    58F9FF2D3DF792092E12044C

    El ID de la solicitud.

    userIdentity

    Map

    La identidad del usuario que realizó la solicitud.

    principalId

    String

    164901546557****

    El ID de la cuenta de Alibaba Cloud que inició la solicitud.

Paso 3: Escribir y probar el código de la función

Después de crear el disparador de OSS, escriba y pruebe el código de la función para comprobar que funciona correctamente. En un escenario real, el disparador invoca automáticamente la función cuando ocurre el evento de OSS especificado.

Aviso

Debe evitar las invocaciones recursivas en su código. Un escenario recursivo común ocurre cuando una función se activa por la carga de un objeto en un bucket de OSS. Después de ejecutarse, la función genera uno o más objetos nuevos y los escribe de vuelta en el mismo bucket. Esta operación de escritura vuelve a activar la función, lo que crea un bucle infinito. Para obtener más información, consulte Triggering rules for OSS triggers.

  1. En la pestaña Code de la página de detalles de la función, introduzca su código en el editor y haga clic en Deploy.

    • El siguiente código de ejemplo aplica a los entornos de ejecución que admiten edición en línea.

      Nota

      Se recomienda utilizar un endpoint interno de OSS para leer y escribir datos en los buckets de OSS desde su función. Si usa un endpoint público, se generarán cargos por transferencia de datos de internet. Para obtener más información sobre los endpoints internos, consulte Regions and 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. Pruebe la función.

    Método 1: Si configuró el parámetro de entrada event para simular un origen de eventos, haga clic en Test Function.

    Método 2: En la página Configuration > Trigger, haga clic en Bucket Name para ir al bucket correspondiente. Cargue una imagen que coincida con el prefijo y el sufijo de objeto especificados. Una vez que la función se ejecute, consulte los registros de ejecución en la pestaña Logs y compruebe el resultado en la carpeta de destino del bucket.

Preguntas frecuentes

Referencias