Todos los productos
Search
Centro de documentos

Function Compute:Disparadores de Tablestore

Última actualización: Sep 06, 2026

Tablestore es un servicio de almacenamiento de datos NoSQL distribuido basado en el sistema Apsara. Un disparador de Tablestore conecta Tablestore como origen de eventos para Function Compute. Cuando los datos cambian en una tabla de Tablestore, el disparador invoca automáticamente su función para procesar los datos incrementales, sin necesidad de sondeos.

Caso de uso típico: un origen de datos escribe en la Tabla A. Esta actualización activa una función que limpia los datos y escribe los resultados en la Tabla B, listos para lectura directa. Todo el pipeline se ejecuta como una aplicación serverless elástica y escalable.

image

Requisitos previos

Antes de empezar, asegúrese de contar con lo siguiente:

Limitaciones

  • Los disparadores de Tablestore son compatibles con las siguientes regiones: China (Beijing), China (Hangzhou), China (Shanghai), China (Shenzhen), Japan (Tokyo), Singapore, Germany (Frankfurt) y China (Hong Kong).

  • La tabla de Tablestore debe residir en la misma región que la función.

  • La ejecución de la función invocada por un disparador de Tablestore no puede superar 1 minuto.

  • Para acceder a Tablestore mediante una red interna, utilice un endpoint de Virtual Private Cloud (VPC) con el formato: {instance}.{region}.vpc.tablestore.aliyuncs.com.

Notas de uso

Evite los bucles de invocación. Si una función escribe de vuelta en la misma tabla que la activó —por ejemplo, la Tabla A activa la Función B y esta actualiza la Tabla A—, el disparador se vuelve a ejecutar y genera un bucle infinito. Diseñe el flujo de datos de modo que la salida de la función se dirija a una tabla distinta.

Comportamiento de reintento ante errores. Si falla la ejecución de una función, el disparador reintenta hasta que los datos de registro de Tablestore caducan.

Importante

Un error de ejecución de función ocurre en alguna de estas situaciones:

  • Se inicia una instancia de función, pero el código no se ejecuta como se esperaba. En este caso, se cobran tarifas por la instancia.

  • Una instancia de función no logra iniciarse (por ejemplo, debido a un error en el comando de inicio). En este caso, no se cobran tarifas.

Para detener los reintentos infinitos, deshabilite la función Stream de la tabla de datos. Antes de deshabilitar Stream, confirme que ningún otro disparador esté utilizando la misma tabla.

Paso 1: Habilite la función Stream de la tabla de datos

La función Stream de Tablestore captura los cambios incrementales de datos y los entrega a su función. Habilítela en la tabla de datos antes de crear el disparador.

  1. Inicie sesión en la consola de Tablestore.

  2. En la barra de navegación superior, seleccione una región.

  3. En la página Overview, haga clic en el alias de la instancia o haga clic en Manage Instance en la columna Actions.

  4. En la pestaña Instance Details, haga clic en la pestaña Data Tables. Luego, haga clic en el nombre de la tabla y seleccione la pestaña Stream, o bien haga clic en fig_001 y seleccione Stream.

  5. En la pestaña Stream, haga clic en Enable junto a Stream Information.

  6. En el cuadro de diálogo Enable Stream, establezca el parámetro Log Expiration Time y haga clic en Enable. El valor debe ser un número entero distinto de cero, expresado en horas. Máximo: 168 horas.

Importante

El tiempo de caducidad del registro no se puede modificar después de configurarlo. Elija el valor con cuidado.

Paso 2: Cree un disparador de Tablestore

  1. Inicie sesión en la consola de Function Compute. En el panel de navegación izquierdo, haga clic en Functions.

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

  3. En la página de detalles de la función, haga clic en la pestaña Configurations. En el panel de navegación izquierdo, haga clic en Triggers y luego en Create Trigger.

  4. En el panel Create Trigger, configure los siguientes parámetros y haga clic en OK.

Parámetro

Descripción

Ejemplo

Trigger type

Tipo de disparador. Seleccione Tablestore.

Tablestore

Name

Nombre del disparador.

Tablestore-trigger

Version or alias

Versión o alias de la función que se va a vincular. Valor predeterminado: LATEST. Para vincular otra versión o alias, selecciónelo en la lista desplegable Version or Alias de la página de detalles de la función. Consulte Manage versions y Manage aliases.

LATEST

Instance

Nombre de la instancia de Tablestore existente.

d00dd8xm\\\\

Table

Nombre de la tabla existente.

mytable

Role name

Rol de RAM que otorga a Function Compute el permiso para leer desde el Stream de Tablestore. Seleccione AliyunTableStoreStreamNotificationRole.

AliyunTableStoreStreamNotificationRole

Nota

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

Una vez creado el disparador, este aparece en la pestaña Triggers. Para modificar o eliminar un disparador, consulte Gestión de disparadores.

Paso 3: Configure los parámetros de prueba

Para probar la función antes de que lleguen datos de Tablestore, configure un evento de prueba que coincida con el formato de carga útil del disparador de Tablestore.

  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.

  2. En el panel Configure Test Parameters, haga clic en Create New Test Event o en Modify Existing Test Event, introduzca un nombre de evento y su contenido, y luego haga clic en OK.

El disparador de Tablestore codifica los datos incrementales en formato Concise Binary Object Representation (CBOR) y los pasa a su función como un evento. A continuación se muestra una carga útil con tres tipos de registros —PutRow, UpdateRow y DeleteRow— para que observe cómo varía la estructura según la operación:

{
    "Version": "Sync-v1",
    "Records": [
        {
            "Type": "PutRow",
            "Info": {
                "Timestamp": 1506416585740836
            },
            "PrimaryKey": [
                {
                    "ColumnName": "pk_0",
                    "Value": 1506416585881590900
                },
                {
                    "ColumnName": "pk_1",
                    "Value": "2017-09-26 17:03:05.8815909 +0800 CST"
                },
                {
                    "ColumnName": "pk_2",
                    "Value": 1506416585741000
                }
            ],
            "Columns": [
                {
                    "Type": "Put",
                    "ColumnName": "attr_0",
                    "Value": "hello_table_store",
                    "Timestamp": 1506416585741
                },
                {
                    "Type": "Put",
                    "ColumnName": "attr_1",
                    "Value": 1506416585881590900,
                    "Timestamp": 1506416585741
                }
            ]
        },
        {
            "Type": "UpdateRow",
            "Info": {
                "Timestamp": 1506416600000000
            },
            "PrimaryKey": [
                {
                    "ColumnName": "pk_0",
                    "Value": 1506416585881590900
                }
            ],
            "Columns": [
                {
                    "Type": "Put",
                    "ColumnName": "attr_0",
                    "Value": "updated_value",
                    "Timestamp": 1506416600000
                },
                {
                    "Type": "DeleteOneVersion",
                    "ColumnName": "attr_1",
                    "Timestamp": 1506416585741
                }
            ]
        },
        {
            "Type": "DeleteRow",
            "Info": {
                "Timestamp": 1506416700000000
            },
            "PrimaryKey": [
                {
                    "ColumnName": "pk_0",
                    "Value": 1506416585881590900
                }
            ],
            "Columns": []
        }
    ]
}

A continuación se describen los campos del evento.

Campo

Descripción

Version

Versión de la carga útil. Valor: Sync-v1 (cadena).

Records

Arreglo de filas de datos incrementales. Cada elemento contiene Type, Info, PrimaryKey y Columns.

Type (fila)

Tipo de operación de la fila. Valores válidos: PutRow, UpdateRow, DeleteRow (cadena).

Info

Metadatos de la fila. Contiene Timestamp: la hora UTC de la última modificación de la fila (INT64).

PrimaryKey

Arreglo de columnas de clave primaria. Cada elemento contiene ColumnName (cadena) y Value (INTEGER, STRING o BLOB).

Columns

Arreglo de columnas de atributos. Cada elemento contiene: Type (operación sobre la columna: Put, DeleteOneVersion o DeleteAllVersions), ColumnName (cadena), Value (INTEGER, BOOLEAN, DOUBLE, STRING o BLOB) y Timestamp (hora UTC de la última modificación, INT64).

Paso 4: Escriba y pruebe el código de la función

Después de crear el disparador, escriba el código de la función para procesar la carga útil del evento de Tablestore. La función se invoca automáticamente cuando cambian los datos de la tabla.

  1. En la página de detalles de la función, haga clic en la pestaña Code, introduzca el código de la función y haga clic en Deploy. El siguiente ejemplo en Python lee los registros de eventos de Tablestore y extrae los valores de la clave primaria y de las columnas de atributos:

    import logging
    import cbor
    import json
    
    def get_attribute_value(record, column):
        attrs = record[u'Columns']
        for x in attrs:
            if x[u'ColumnName'] == column:
                return x['Value']
    
    def get_pk_value(record, column):
        attrs = record[u'PrimaryKey']
        for x in attrs:
            if x['ColumnName'] == column:
                return x['Value']
    
    def handler(event, context):
        logger = logging.getLogger()
        logger.info("Begin to handle event")
        #records = cbor.loads(event)
        records = json.loads(event)
        for record in records['Records']:
            logger.info("Handle record: %s", record)
            pk_0 = get_pk_value(record, "pk_0")
            attr_0 = get_attribute_value(record, "attr_0")
        return 'OK'
  2. Haga clic en Test Function.

Una vez finalizada la ejecución, consulte los resultados en la pestaña Code.

Preguntas frecuentes

¿Por qué falla la creación del disparador en una región específica?

Los disparadores de Tablestore solo están disponibles en ciertas regiones. Revise la sección Limitations para confirmar que su región sea compatible.

¿Por qué no encuentro mi tabla de Tablestore al crear un disparador?

La tabla de Tablestore debe residir en la misma región que la función. Si la tabla está en otra región, no aparecerá en la configuración del disparador.

¿Por qué sigo viendo errores de "Invocation canceled by client"?

Este error suele indicar que el tiempo de espera del cliente es más corto que la duración real de la ejecución de la función. Aumente el periodo de tiempo de espera del cliente. Para obtener más información, consulte What do I do if the client is disconnected and the message "Invocation canceled by client" is reported?

¿Por qué mi disparador de Tablestore no se activa después de escribir datos en la tabla?

Compruebe lo siguiente:

  1. Confirme que la función Stream esté habilitada para la tabla. Consulte Step 1: Enable the Stream feature for the data table.

  2. Confirme que se haya configurado el rol correcto (AliyunTableStoreStreamNotificationRole) al crear el disparador. Consulte Step 2: Create a Tablestore trigger.

  3. Revise los registros de ejecución de la función para comprobar si hay fallos. Si la función falla de manera repetida, reintenta hasta que los datos de registro caducan. Consulte What do I do if a trigger cannot trigger function execution?