ExtendDB: Jalankan API DynamoDB di Database Anda Sendiri
Katakanlah sistem rekam medis rumah sakit harus tetap berada di dalam gedung — data pasien tidak boleh meninggalkan jaringan on-prem, seorang auditor menyetujui setiap dependensi, dan laptop dev sama sekali tidak punya internet. Tim sudah menulis aplikasi terhadap API DynamoDB dan menyukainya: pencarian key bermilidetik satu digit, model Item yang bersih, tanpa migrasi schema untuk diasuh. Tetapi DynamoDB terkelola adalah layanan cloud, dan "kirim data ke AWS" tidak bisa diterima di sini.
ExtendDB dibangun persis untuk celah itu. Ia berbicara protokol wire DynamoDB tetapi menyimpan data di database yang Anda jalankan.
Apa itu ExtendDB
ExtendDB adalah adapter open-source dari AWS — ditulis oleh engineer DynamoDB AWS dan diumumkan di AWS Database Blog — yang mengimplementasikan protokol wire DynamoDB JSON dalam Rust. Karena ia menjawab HTTP API yang sama dengan yang dilakukan layanan terkelola, AWS SDK Anda yang sudah ada dan AWS CLI bekerja tanpa perubahan. Satu-satunya yang berpindah adalah URL endpoint — tanpa penulisan ulang kode, tanpa library klien baru.
Bagian yang menarik adalah apa yang ada di balik API itu. ExtendDB punya backend penyimpanan yang dapat dipasang: PostgreSQL adalah implementasi referensi, dan Cassandra disebut sebagai backend lain yang mungkin. Backend baru diimplementasikan tanpa memodifikasi inti, jadi lapisan kompatibilitas-DynamoDB dan lapisan penyimpanan berevolusi secara independen.
Jadi sebuah request mengalir seperti ini:
Apa yang didukungnya — dan apa yang tidak
Menurut dokumentasi getting-started dan pengumumannya, ExtendDB (v0.1) mencakup operasi yang sebenarnya dipanggil sebagian besar aplikasi:
- Tabel — Create, Delete, Describe, List, Update.
- Item — Put, Get, Delete, Update (termasuk aksi update
SET/REMOVE/ADD/DELETE). - Query dan Scan — key condition, filter expression, proyeksi, paginasi, dan secondary index.
- Batch —
BatchGetItemdanBatchWriteItem. - Transaksi —
TransactGetItemsdanTransactWriteItems. - Streams, TTL, Import/Export, dan Tags.
Yang sengaja tidak diimplementasikannya adalah himpunan fitur terkelola spesifik DynamoDB — yang paling menonjol Global Tables dan replikasi lintas Region. Itu adalah properti dari infrastruktur global layanan terkelola, bukan dari permukaan API, jadi mereka tidak terbawa ke adapter yang Anda host sendiri.
vs DynamoDB Local
Anda mungkin sudah menggunakan
DynamoDB Local untuk pengembangan offline. Itu adalah satu JAR
(atau image Docker amazon/dynamodb-local) yang dimaksudkan untuk unit test pada satu
mesin. ExtendDB membidik lebih luas daripada alat satu-proses itu: pengembangan lokal,
deployment on-prem, lingkungan edge dan air-gapped, dan setup hybrid / multi-cloud di mana
Anda menginginkan API DynamoDB tetapi datanya hidup di infrastruktur yang Anda kendalikan.
vs DynamoDB terkelola
Inilah garis yang AWS tarik secara eksplisit, dan itu penting:
ExtendDB bukan DynamoDB. Ia adalah implementasi yang kompatibel, bukan pengganti untuk layanan terkelola. Karakteristik performa, perilaku penskalaan, dan properti operasional berbeda.
Secara konkret, saat Anda menjalankan ExtendDB:
- Anda memiliki ketersediaan dan backup database. Tidak ada durabilitas multi-AZ terkelola atau point-in-time recovery yang melakukannya untuk Anda — itu ada pada Anda dan operasi PostgreSQL Anda.
- TLS wajib pada endpoint.
- Kredensial bersifat mirip-IAM tetapi terpisah dari AWS IAM — ExtendDB punya model kredensialnya sendiri; ia tidak mengautentikasi terhadap akun AWS Anda.
Ini v0.1 dan dilisensikan Apache 2.0. Perlakukan sebagai perangkat lunak awal: bagus untuk lingkungan di atas, bukan pertukaran drop-in untuk DynamoDB terkelola skala-produksi.
Penyiapan
ExtendDB berjalan di Linux dan macOS dan membutuhkan Rust 1.85+ dan PostgreSQL 14+. Alurnya dua perintah:
extenddb init
extenddb serveinit menyediakan schema di database PostgreSQL Anda; serve memulai server wire-protocol,
yang mendengarkan pada endpoint seperti https://127.0.0.1:8000 (TLS diwajibkan, karenanya
https).
Arahkan AWS SDK ke sana dengan cara yang sama seperti endpoint kustom mana pun — hanya URL dan kredensial yang berubah:
import {DynamoDBClient} from '@aws-sdk/client-dynamodb';
const client = new DynamoDBClient({
endpoint: 'https://127.0.0.1:8000',
region: 'local',
credentials: {accessKeyId: '<extenddb-key>', secretAccessKey: '<extenddb-secret>'}
});Semuanya setelah konfigurasi klien — PutItem, Query, TransactWriteItems — identik
dengan kode yang akan Anda tulis terhadap DynamoDB terkelola. Tata letak Item single-table
bekerja persis seperti di cloud:
| PK | SK | type | backend | createdAt |
|---|---|---|---|---|
| TENANT#acme | AUDIT#2026-06-24 | event | postgres | 2026-06-24T09:00:00Z |
| TENANT#acme | AUDIT#2026-06-24b | event | postgres | 2026-06-24T09:01:12Z |
| TENANT#beta | AUDIT#2026-06-24 | event | postgres | 2026-06-24T09:02:40Z |
Lakukan di DynoTable
Karena ExtendDB berbicara protokol wire DynamoDB, Anda tidak butuh alat admin terpisah untuknya — arahkan DynoTable ke endpoint ExtendDB dengan cara yang sama seperti Anda menghubungkannya ke DynamoDB Local: buat sebuah profil offline (lokal) dengan port ExtendDB dan kredensial sekali-pakai, dan DynoTable akan menjelajah, men-query, dan mengedit Item — kecuali sekarang mereka didukung oleh PostgreSQL di disk Anda sendiri alih-alih penyimpanan in-memory sebuah JAR.
Inilah imbalan dari kompatibilitas wire-protocol: SQL Workbench,
visual query builder, dan pengeditan Item semuanya bekerja terhadap ExtendDB tanpa
perubahan, jadi Anda mendapatkan GUI sungguhan atas data yang di-host sendiri tanpa menulis
skrip scan.
Satu peringatan untuk direncanakan: endpoint ExtendDB bersifat HTTPS-only, sementara
profil offline DynoTable (seperti kebanyakan setup DynamoDB-Local) menargetkan sebuah
host:port loopback. Jika klien atau perkakas Anda butuh sebuah listener loopback teks
biasa, terminasikan TLS di depan ExtendDB (atau jalankan reverse proxy lokal) dan arahkan
GUI ke sana — protokol di kabel tetap DynamoDB JSON dengan cara apa pun.
Jebakan
- Jangan memperlakukan v0.1 sebagai DynamoDB produksi. Penskalaan, latensi, dan durabilitas adalah milik PostgreSQL Anda, bukan AWS. Benchmark untuk workload Anda sebelum Anda bergantung padanya.
- Tidak ada Global Tables / replikasi lintas Region. Jika desain Anda mengandalkan multi-Region active-active, ExtendDB bukan jalannya — itu adalah fitur layanan terkelola.
- Backup database yang mendasarinya sendiri. Tidak ada PITR terkelola; sebuah volume
PostgreSQL yang terhapus akan hilang. Rangkai
pg_dump/ WAL archiving seperti PostgreSQL lainnya. - Kredensial adalah milik ExtendDB sendiri, bukan AWS IAM. Jangan harapkan kebijakan IAM, role, atau condition key mengatur akses — model otorisasi itu tidak terbawa.
Langkah berikutnya
- Modelkan pola akses Anda terlebih dahulu — disiplin single-table design yang sama berlaku entah backend-nya DynamoDB atau PostgreSQL-via-ExtendDB.
- Bangun dan periksa pembacaan serta penulisan Anda dengan DynamoDB Expression Builder, lalu konversi fixture antara JSON biasa dan format wire dengan konverter DynamoDB-JSON.
- Saat Anda siap mengutak-atik instance ExtendDB langsung, hubungkan DynoTable dan jelajahi seperti tabel lainnya.