All Products
Search
Document Center

Function Compute:Pemicu Tablestore

Last Updated:Apr 01, 2026

Tablestore adalah layanan penyimpanan data NoSQL terdistribusi yang dibangun di atas sistem Apsara. Pemicu Tablestore menghubungkan Tablestore sebagai sumber event untuk Function Compute. Ketika data dalam tabel Tablestore berubah, pemicu tersebut secara otomatis memanggil fungsi Anda untuk memproses data inkremental—tanpa perlu polling.

Kasus penggunaan khas: sebuah sumber data menulis ke Tabel A. Pembaruan tersebut memicu fungsi untuk membersihkan data dan menulis hasilnya ke Tabel B, siap untuk dibaca langsung. Seluruh pipeline berjalan sebagai aplikasi arsitektur tanpa server yang elastis dan dapat diskalakan.

image

Prasyarat

Sebelum memulai, pastikan Anda telah memiliki:

Batasan

  • Pemicu Tablestore didukung di wilayah berikut: Tiongkok (Beijing), Tiongkok (Hangzhou), Tiongkok (Shanghai), Tiongkok (Shenzhen), Jepang (Tokyo), Singapura, Jerman (Frankfurt), dan Tiongkok (Hong Kong).

  • Tabel Tablestore harus berada di wilayah yang sama dengan fungsi.

  • Eksekusi fungsi yang dipicu oleh pemicu Tablestore tidak boleh melebihi 1 menit.

  • Untuk mengakses Tablestore melalui jaringan internal, gunakan titik akhir Virtual Private Cloud (VPC) dalam format: {instance}.{region}.vpc.tablestore.aliyuncs.com.

Catatan penggunaan

Hindari loop pemanggilan. Jika suatu fungsi menulis kembali ke tabel yang sama yang memicunya—misalnya, Tabel A memicu Fungsi B, dan Fungsi B memperbarui Tabel A—pemicu akan aktif kembali, menciptakan loop tak terbatas. Rancang alur data Anda agar output fungsi ditujukan ke tabel yang berbeda.

Perilaku pengulangan saat gagal. Jika eksekusi fungsi gagal, pemicu akan mencoba ulang hingga data log di Tablestore kedaluwarsa.

Penting

Kegagalan eksekusi fungsi terjadi dalam salah satu situasi berikut:

  • Instans fungsi dimulai tetapi kode tidak berjalan seperti yang diharapkan. Dalam kasus ini, biaya dikenakan untuk instans tersebut.

  • Instans fungsi gagal dimulai (misalnya, karena kesalahan perintah startup). Dalam kasus ini, tidak ada biaya yang dikenakan.

Untuk menghentikan pengulangan tak terbatas, nonaktifkan fitur Stream untuk tabel data tersebut. Sebelum menonaktifkan Stream, pastikan tidak ada pemicu lain yang menggunakan tabel yang sama.

Langkah 1: Aktifkan fitur Stream untuk tabel data

Fitur Stream Tablestore menangkap perubahan data inkremental dan mengirimkannya ke fungsi Anda. Aktifkan fitur ini pada tabel data sebelum membuat pemicu.

  1. Masuk ke Konsol Tablestore.

  2. Di bilah navigasi atas, pilih wilayah.

  3. Di halaman Ikhtisar, klik alias instans atau klik Manage Instance di kolom Actions.

  4. Di tab Instance Details, klik tab Data Tables. Lalu klik nama tabel dan pilih tab Stream, atau klik fig_001 dan pilih Stream.

  5. Di tab Stream, klik Enable di samping Informasi Stream.

  6. Di kotak dialog Enable Stream, atur parameter Log Expiration Time dan klik Enable. Nilainya harus berupa bilangan bulat bukan nol dalam satuan jam. Maksimum: 168 jam.

Penting

Waktu kedaluwarsa log tidak dapat diubah setelah diatur. Pilih dengan cermat.

Langkah 2: Buat pemicu Tablestore

  1. Masuk ke Konsol Function Compute. Di panel navigasi sebelah kiri, klik Functions.

  2. Di bilah navigasi atas, pilih wilayah. Di halaman Functions, klik fungsi yang ingin Anda konfigurasi.

  3. Di halaman detail fungsi, klik tab Configurations. Di panel navigasi kiri, klik Triggers, lalu klik Create Trigger.

  4. Di panel Create Trigger, konfigurasikan parameter berikut dan klik OK.

ParameterDeskripsiContoh
Trigger typeJenis pemicu. Pilih Tablestore.Tablestore
NameNama pemicu.Tablestore-trigger
Version or aliasVersi atau alias fungsi yang akan di-bind. Default: LATEST. Untuk mengikat versi atau alias berbeda, pilih dari daftar drop-down Version or Alias di halaman detail fungsi. Lihat Kelola versi dan Kelola alias.LATEST
InstanceNama instans Tablestore yang sudah ada.d00dd8xm\*\*\*\*
TableNama tabel yang sudah ada.mytable
Role namePeran RAM yang memberikan izin kepada Function Compute untuk membaca dari Stream Tablestore. Pilih AliyunTableStoreStreamNotificationRole.AliyunTableStoreStreamNotificationRole
Catatan

Jika ini pertama kalinya Anda membuat pemicu jenis ini, klik Authorize Now di kotak dialog yang muncul.

Setelah pemicu dibuat, pemicu tersebut akan muncul di tab Triggers. Untuk memodifikasi atau menghapus pemicu, lihat Manajemen pemicu.

Langkah 3: Konfigurasikan parameter uji

Untuk menguji fungsi sebelum data tiba dari Tablestore, konfigurasikan event uji yang sesuai dengan format muatan pemicu Tablestore.

  1. Di tab Code halaman detail fungsi, klik ikon image.png di samping Test Function dan pilih Configure Test Parameters.

  2. Di panel Configure Test Parameters, klik Create New Test Event atau Modify Existing Test Event, masukkan nama event dan konten event, lalu klik OK.

Pemicu Tablestore menyandikan data inkremental dalam format Concise Binary Object Representation (CBOR) dan meneruskannya ke fungsi Anda sebagai event. Contoh berikut menunjukkan muatan dengan tiga tipe catatan — PutRow, UpdateRow, dan DeleteRow — sehingga Anda dapat melihat bagaimana struktur bervariasi berdasarkan operasi:

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

Tabel berikut menjelaskan field event tersebut.

FieldDeskripsi
VersionVersi muatan. Nilai: Sync-v1 (string).
RecordsArray baris data inkremental. Setiap elemen berisi Type, Info, PrimaryKey, dan Columns.
Type (row)Jenis operasi untuk baris tersebut. Nilai yang valid: PutRow, UpdateRow, DeleteRow (string).
InfoMetadata baris. Berisi Timestamp: waktu UTC saat baris terakhir dimodifikasi (INT64).
PrimaryKeyArray kolom kunci primer. Setiap elemen berisi ColumnName (string) dan Value (INTEGER, STRING, atau BLOB).
ColumnsArray kolom atribut. Setiap elemen berisi: Type (operasi pada kolom: Put, DeleteOneVersion, atau DeleteAllVersions), ColumnName (string), Value (INTEGER, BOOLEAN, DOUBLE, STRING, atau BLOB), dan Timestamp (waktu UTC modifikasi terakhir, INT64).

Langkah 4: Tulis dan uji kode fungsi

Setelah pemicu dibuat, tulis kode fungsi Anda untuk memproses muatan event Tablestore. Fungsi tersebut akan dipanggil secara otomatis ketika data dalam tabel berubah.

  1. Di halaman detail fungsi, klik tab Code, masukkan kode fungsi Anda, dan klik Deploy. Contoh Python berikut membaca catatan event Tablestore dan mengekstraksi nilai kolom kunci primer dan kolom atribut:

    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'

    Untuk contoh dalam runtime Node.js, PHP, Java, dan C#, lihat Gunakan Tablestore untuk memicu Function Compute dalam runtime Node.js, PHP, Java, dan C#.

  2. Klik Test Function.

Setelah eksekusi, lihat hasilnya di tab Code.

FAQ

Mengapa pembuatan pemicu gagal di wilayah tertentu?

Pemicu Tablestore hanya tersedia di wilayah tertentu. Periksa bagian Batasan untuk memastikan wilayah Anda didukung.

Mengapa saya tidak dapat menemukan tabel Tablestore saya saat membuat pemicu?

Tabel Tablestore harus berada di wilayah yang sama dengan fungsi. Jika tabel berada di wilayah berbeda, tabel tersebut tidak akan muncul dalam konfigurasi pemicu.

Mengapa saya terus melihat error "Invocation canceled by client"?

Error ini biasanya berarti timeout sisi klien lebih pendek daripada durasi eksekusi fungsi yang sebenarnya. Tingkatkan periode timeout klien. Untuk detailnya, lihat Apa yang harus saya lakukan jika klien terputus dan muncul pesan "Invocation canceled by client"?

Mengapa pemicu Tablestore saya tidak aktif setelah data ditulis ke tabel?

Periksa hal berikut:

  1. Pastikan fitur Stream diaktifkan untuk tabel tersebut. Lihat Langkah 1: Aktifkan fitur Stream untuk tabel data.

  2. Pastikan peran yang benar (AliyunTableStoreStreamNotificationRole) dikonfigurasi saat membuat pemicu. Lihat Langkah 2: Buat pemicu Tablestore.

  3. Periksa log eksekusi fungsi untuk melihat apakah eksekusi gagal. Jika fungsi gagal berulang kali, sistem akan mencoba ulang hingga data log kedaluwarsa. Lihat Apa yang harus saya lakukan jika pemicu tidak dapat memicu eksekusi fungsi?