Tablestore adalah layanan penyimpanan data NoSQL terdistribusi yang dibangun di atas sistem Apsara. Anda dapat membuat pemicu Tablestore untuk menghubungkan Tablestore sebagai sumber acara Function Compute. Fungsi dalam Function Compute secara otomatis dipicu untuk memproses data Tablestore ketika acara tertentu terjadi.
Skenario
Gambar berikut menunjukkan skenario tipikal dari pemicu Tablestore.
Sumber data menyimpan data ke Tabel A. Pembaruan data memicu fungsi untuk membersihkan data dan menyimpan data yang telah dibersihkan ke Tabel B untuk pembacaan langsung. Seluruh proses ini merupakan aplikasi web serverless yang elastis dan scalable.
Sebelum Anda mulai
Function Compute
Tablestore
Batasan
Pemicu Tablestore didukung di wilayah berikut: Cina (Beijing), Cina (Hangzhou), Cina (Shanghai), Cina (Shenzhen), Jepang (Tokyo), Singapura, Jerman (Frankfurt), dan Cina (Hong Kong).
Tabel Tablestore harus berada di wilayah yang sama dengan layanan Function Compute yang terkait.
Jika Anda ingin mengakses fungsi yang terkait dengan pemicu Tablestore melalui jaringan internal, gunakan titik akhir VPC Tablestore dengan format berikut: {instance}.{region}.vpc.tablestore.aliyuncs.com. Jangan gunakan titik akhir internal Tablestore dalam kasus ini.
Durasi eksekusi fungsi yang dipicu tidak boleh melebihi satu menit.
Catatan Penggunaan
Hindari loop pemanggilan saat menulis kode fungsi. Dalam loop pemanggilan, Tabel A memicu Fungsi B untuk memperbarui data di Tabel A, yang pada gilirannya memicu Fungsi B lagi.
Jika terjadi kesalahan selama eksekusi fungsi, fungsi akan terus mencoba hingga data log di Tablestore kedaluwarsa.
Langkah 1: Aktifkan fitur stream untuk tabel data
Sebelum membuat pemicu, aktifkan fitur Stream untuk tabel data di konsol Tablestore agar fungsi dapat memproses data tambahan yang ditulis ke tabel.
Masuk ke konsol Tablestore.
Di bilah navigasi atas, pilih wilayah.
Di halaman Overview, klik alias instans atau klik Manage Instance di kolom Actions.
Di tab Instance Details, klik tab Data Tables. Lalu, klik nama tabel data dan pilih tab Stream, atau klik
dan pilih Stream.Di tab Stream, klik Enable di sebelah Informasi Stream.
Di kotak dialog Enable Stream, atur parameter Waktu Kedaluwarsa Log dan klik Enable.
Nilai parameter Waktu Kedaluwarsa Log harus berupa bilangan bulat non-nol. Unit: jam. Nilai maksimum: 168.
PentingParameter Waktu Kedaluwarsa Log tidak dapat diubah setelah ditentukan. Lanjutkan dengan hati-hati.
Langkah 2: Buat pemicu Tablestore
Masuk ke konsol Function Compute.
Di panel navigasi sisi kiri, klik Services & Functions.
Di bilah navigasi atas, pilih wilayah.
Di halaman Services, temukan layanan yang diinginkan dan klik Functions di kolom Actions.
Di halaman Functions, klik fungsi yang ingin Anda kelola.
Di halaman detail fungsi, klik tab Triggers, pilih versi atau alias dari daftar drop-down Version or Alias, lalu klik Create Trigger.
Di panel Buat Pemicu, konfigurasikan parameter dan klik OK.
Parameter
Deskripsi
Contoh
Tipe Pemicu
Pilih Tablestore.
Tablestore
Parameter
Masukkan nama pemicu kustom.
Tablestore-trigger
Versi atau Alias
Nilai default adalah LATEST. Jika Anda ingin membuat pemicu untuk versi atau alias lain, pilih versi atau alias dari daftar drop-down Version or Alias di halaman detail fungsi. Untuk informasi lebih lanjut tentang versi dan alias, lihat Kelola versi dan Kelola alias.
LATEST
Instans
Pilih instans Tablestore dari daftar drop-down.
d00dd8xm****
Tabel
Pilih tabel dari daftar drop-down.
mytable
Nama Peran
Pilih AliyunTableStoreStreamNotificationRole.
CatatanJika ini pertama kalinya Anda membuat pemicu jenis ini, klik Authorize Now di pesan yang muncul.
AliyunTableStoreStreamNotificationRole
Setelah pemicu dibuat, pemicu tersebut akan ditampilkan di tab Triggers. Untuk memodifikasi atau menghapus pemicu yang ada, lihat Kelola pemicu.
Langkah 3: Konfigurasikan parameter input fungsi
Di halaman detail fungsi, klik tab Code, klik ikon
di sebelah Test Function, dan pilih Configure Test Parameters dari daftar drop-down.Di panel Configure Test Parameters, pilih tab Create New Test Event atau Modify Existing Test Event, konfigurasikan Event Name dan isi acara di editor kode, lalu klik OK.
Pemicu Tablestore mengkodekan data tambahan dalam format Concise Binary Object Representation (CBOR) untuk membangun parameter acara Function Compute. Contoh kode berikut memberikan contoh:
{ "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 } ] } ] }Tabel berikut menjelaskan bidang dalam acara.
Bidang
Deskripsi
Version
Versi payload. Contoh: Sync-v1. Nilainya adalah string.
Records
Array yang menyimpan baris data tambahan dalam tabel. Parameter ini mencakup bidang berikut:
Type: tipe operasi yang dilakukan pada baris. Nilai valid: PutRow, UpdateRow, dan DeleteRow. Nilainya adalah string.
Info: informasi tentang baris, termasuk parameter Timestamp, yang menentukan waktu terakhir kali baris dimodifikasi. Waktu harus dalam UTC. Nilainya bertipe "Int64."
PrimaryKey
Array yang menyimpan kolom kunci utama. Parameter ini mencakup bidang berikut:
ColumnName: nama kolom kunci utama. Nilainya adalah string.
Value: konten kolom kunci utama. Nilainya bertipe formated_value, yang bisa berupa Integer, String, atau Blob.
Columns
Array yang menyimpan kolom atribut. Parameter ini mencakup bidang berikut:
Type: tipe operasi yang dilakukan pada kolom atribut. Nilai valid: Put, DeleteOneVersion, dan DeleteAllVersions. Nilainya adalah string.
ColumnName: nama kolom atribut. Nilainya adalah string.
Value: konten kolom atribut. Nilainya bertipe formatted_value, yang bisa berupa Integer, Boolean, Double, String, atau Blob.
Timestamp: waktu terakhir kali kolom atribut dimodifikasi. Waktu harus dalam UTC. Nilainya bertipe "Int64."
Langkah 4: Tulis dan uji fungsi
Setelah membuat pemicu Tablestore, tulis kode fungsi dan uji fungsi untuk memverifikasi apakah kode tersebut benar. Fungsi secara otomatis dipicu ketika data di Tablestore diperbarui.
Di halaman detail fungsi, klik tab Code, masukkan kode fungsi di editor kode, lalu klik Deploy.
Dalam contoh ini, kode fungsi ditulis dalam Python. Untuk informasi lebih lanjut tentang cara menulis fungsi dalam lingkungan runtime lainnya, lihat Contoh pemanggilan Function Compute menggunakan pemicu Tablestore.
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("Mulai menangani acara") #records = cbor.loads(event) records = json.loads(event) for record in records['Records']: logger.info("Tangani rekaman: %s", record) pk_0 = get_pk_value(record, "pk_0") attr_0 = get_attribute_value(record, "attr_0") return 'OK'Di tab Code, klik Test Function.
Setelah fungsi dieksekusi, Anda dapat melihat hasilnya di tab Code.
Referensi
Jika Anda gagal membuat pemicu Tablestore di wilayah tertentu, periksa apakah wilayah tersebut mendukung pemicu Tablestore. Untuk informasi lebih lanjut, lihat Batasan.
Jika Anda tidak dapat menemukan tabel Tablestore yang telah dibuat saat membuat pemicu Tablestore, periksa apakah tabel tersebut berada di wilayah yang sama dengan layanan Function Compute yang terkait.
Dalam banyak kasus, jika kesalahan yang menunjukkan bahwa klien membatalkan pemanggilan terus dilaporkan saat Anda menggunakan pemicu Tablestore, periode timeout yang dikonfigurasi untuk eksekusi fungsi di klien lebih pendek daripada durasi eksekusi fungsi. Dalam kasus ini, kami sarankan Anda meningkatkan periode timeout klien. Untuk informasi lebih lanjut, lihat Apa yang harus saya lakukan jika klien terputus dan pesan "Invocation canceled by client" dilaporkan?
Jika data ditambahkan ke tabel Tablestore tetapi pemicu Tablestore yang terkait tidak dipicu, Anda dapat mendiagnosis masalah dengan melakukan langkah-langkah berikut. Untuk informasi lebih lanjut tentang cara mendiagnosis kegagalan pemicu, lihat Apa yang harus saya lakukan jika pemicu tidak dapat memicu eksekusi fungsi?
Periksa apakah fitur Stream diaktifkan untuk tabel. Untuk informasi lebih lanjut, lihat Langkah 1: Aktifkan fitur stream untuk tabel data.
Periksa apakah peran yang benar dikonfigurasi saat Anda membuat pemicu. Anda dapat menggunakan peran pemicu default
AliyunTableStoreStreamNotificationRole. Untuk informasi lebih lanjut, lihat Langkah 2: Buat pemicu Tablestore.Periksa log eksekusi fungsi untuk melihat apakah fungsi gagal dieksekusi. Jika fungsi gagal dieksekusi, fungsi tersebut akan dicoba ulang hingga data log di Tablestore kedaluwarsa.