Cara terhubung ke DynamoDB Local dan LocalStack
Anda menjalankan DynamoDB lokal dan kode Anda berkomunikasi dengan baik — tetapi
Anda ingin melihat tabelnya, bukan menulis skrip scan setiap kali.
Menghubungkan klien ke endpoint lokal adalah dua perubahan: arahkan ke URL yang
benar, dan berikan kredensial sekali pakai. Detail di bawah adalah tempat orang
tersangkut — namespace region, aturan key alfanumerik, dan pemisahan port
8000 vs 4566.
DynamoDB Local vs LocalStack: ke apa Anda terhubung
Keduanya memberi Anda API DynamoDB di localhost tanpa akun AWS, tetapi mereka
adalah hal berbeda:
- DynamoDB Local adalah engine DynamoDB yang bisa diunduh dalam satu proses —
AWS mengirimkannya sebagai JAR dan image Docker
(
amazon/dynamodb-local). Itu DynamoDB dan tidak ada yang lain. Port default 8000 (dokumen AWS). Lihat menjalankan DynamoDB Local dengan Docker. - LocalStack mengemulasi stack layanan AWS di balik satu endpoint. DynamoDB-nya sendiri ditenagai DynamoDB Local, tetapi semuanya lewat edge port tunggal 4566 LocalStack.
Jadi satu-satunya perbedaan praktis untuk terhubung adalah URL endpoint: :8000
untuk DynamoDB Local standalone, :4566 untuk DynamoDB-via-LocalStack. Sisanya —
API, tipuan kredensial, config GUI — identik.
Setup endpoint + kredensial dummy yang menjebak semua orang
SDK dan CLI AWS memerlukan access key dan region bahkan saat berbicara ke endpoint lokal — tetapi nilai itu tidak harus nyata. Dokumen AWS sendiri mengatakan nilai ini "don't have to be valid AWS values to run locally" (dokumen AWS).
Dua gotcha yang tidak jelas:
- Region/access-key diam-diam menamespace data Anda. Tanpa flag
-sharedDb, DynamoDB Local menulis filemyaccesskeyid_region.dbterpisah per kombinasi access-key-ID + region — penamaan tepat AWS. Terhubung dengan key atau region berbeda dari yang dipakai app Anda dan tabel terlihat hilang; mereka hanya di file lain. Jalankan dengan-sharedDb(satushared-local-instance.dbuntuk setiap klien) atau cocokkan exact key + region yang dipakai app Anda. - Access key ID harus alfanumerik di DynamoDB Local — tanpa simbol.
Dokumen AWS
menyatakan
AWS_ACCESS_KEY_IDhanya boleh berisiA–Z,a–z, dan0–9; AWS memperkenalkannya di DynamoDB Local 2.0.0 (dan 1.23.0+), jadi key dengan karakter spesial yang bekerja di image sebelumnya sekarang gagal (AWS re:Post). Lihat error di bawah.
Untuk LocalStack default aman adalah test / test: ia
mengabaikan secret key sepenuhnya
dan tidak pernah memvalidasi nilai secret. Key berpenampilan nyata
AKIA…/ASIA…
ditolak sebagai safeguard dan jatuh ke akun dummy 000000000000 —
akun yang sama ke mana key arbitrer seperti test resolve. Tetap pakai test.
Terhubung dengan AWS CLI (sanity check)
Sebelum mengarahkan GUI, pastikan endpoint hidup dari CLI. CLI
tidak punya default endpoint lokal bawaan,
jadi lewati --endpoint-url per perintah atau set
AWS_ENDPOINT_URL_DYNAMODB=http://localhost:8000 (CLI v2.13+).
DynamoDB Local:
aws dynamodb list-tables --endpoint-url http://localhost:8000LocalStack (perintah sama, port berbeda):
aws dynamodb list-tables --endpoint-url http://localhost:4566Jika Anda punya kredensial terkonfigurasi sama sekali (bahkan palsu di
~/.aws/credentials atau via AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY), ini
mengembalikan daftar tabel Anda. Daftar kosong tanpa error berarti endpoint
bekerja tetapi Anda melihat namespace key/region berbeda — lihat gotcha di atas.
GUI DynamoDB Local: menjelajah dan Query tabel lokal di DynoTable
Setelah CLI bekerja, GUI butuh tiga nilai yang sama: endpoint, region, dan kredensial dummy apa pun. CLI mengembalikan DynamoDB-JSON yang Anda baca dengan mata; GUI merender data yang sama sebagai tabel yang bisa diurut, difilter, dan diedit.
Di DynoTable, tambah koneksi dan set endpoint kustom:
- Endpoint:
http://localhost:8000(DynamoDB Local) atauhttp://localhost:4566(LocalStack) - Region: apa pun yang dipakai app Anda — mis.
us-east-1. Di sini label, bukan region AWS nyata, tetapi harus cocok agar Anda mendarat di namespace data yang sama. - Access key / secret: apa saja (
test/testkonvensional). Hanya alfanumerik untuk access key di DynamoDB Local.
Dari situ Anda menjelajah item, menjalankan Query atau Scan, dan mengedit
baris secara visual alih-alih JSON dengan tangan di
CLI. Saat memuat fixture,
konverter DynamoDB-JSON mengubah JSON polos
menjadi format wire, dan Query vs Scan membahas
baca mana yang dijangkau. Drill yang sama untuk
viewer DynamoDB LocalStack — hanya port berubah ke
4566.
DynoTable adalah perangkat lunak desktop lokal-saja, jadi mengarahkannya ke
localhost menjaga fixture di mesin Anda. Untuk pandangan lebih luas opsi GUI,
lihat perbandingan GUI DynamoDB.
Error umum (mismatch region, port, kredensial)
- Connection refused. Port salah —
8000adalah DynamoDB Local,4566adalah LocalStack. Pastikan juga container benar-benar mem-publish port (docker run -p 8000:8000 amazon/dynamodb-local). Untuk LocalStack, cek layanan up dihttp://localhost:4566/_localstack/health. The Access Key ID or Security Token is Invaliddi DynamoDB Local. Sejak image 2.0.0 (dan 1.23.0+), access key ID harus hanya alfanumerik. Key dengan simbol yang bekerja di image sebelumnya sekarang gagal — ganti dengan huruf/angka (mis.test) dan update setiap tool agar cocok.The security token included in the request is invalidterhadap LocalStack. Ini hampir selalu masalah endpoint, bukan kredensial — klien SDK Anda menjatuhkan--endpoint-url/endpoint_urldan menghantam endpoint AWS nyata, yang menolak key dummy Anda. Pastikan klien benar-benar diarahkan kehttp://localhost:4566.- Error kredensial dari SDK/CLI. Bahkan endpoint lokal butuh beberapa
kredensial hadir. Set
AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY(atau profil palsu) agar credential chain SDK resolve. httpvshttps. Endpoint lokal adalahhttppolos. URLhttps://akan gagal handshake TLS.
Apakah DynamoDB Local data yang sama dengan tabel AWS nyata saya?
Tidak — lokal dan cloud adalah store yang sepenuhnya terpisah. DynamoDB Local (dan DynamoDB LocalStack) menyimpan data di file lokal atau di memori; ia tidak pernah menyentuh akun AWS Anda, dan Region/akun AWS tidak didukung di tingkat klien secara lokal. Itulah intinya: ia untuk development dan testing. Jika Anda ingin fixture yang sama di cloud nanti, AWS menyarankan nilai key/region yang terlihat valid secara lokal agar Anda hanya menukar endpoint saat pindah. Untuk memodelkan skema itu sebelum ship, single-table design dan GSI vs LSI membahas keputusan yang tidak berubah antara lokal dan prod.
Apa yang dihemat lokal (dan apa yang tetap ditagih prod)
DynamoDB Local tidak mengukur apa pun — tanpa RCU, tanpa WCU, tanpa transfer.
GetItem yang sama terhadap DynamoDB managed di us-east-1 on-demand menagih
0,5 RCU eventually-consistent atau 1 RCU strongly-consistent untuk item
≤ 4 KB. Saat Anda menukar --endpoint-url ke endpoint nyata, setiap
penjelajahan dan query mulai menagih lagi. Model lompatannya dengan
kalkulator harga dan ukur item
representatif dengan
kalkulator ukuran item.
FAQ
Apakah saya butuh kredensial AWS nyata? Tidak. DynamoDB Local dan LocalStack menerima nilai dummy. Mereka hanya harus hadir, alfanumerik (untuk DynamoDB Local), dan konsisten lintas tool Anda.
Mengapa tabel saya hilang saat saya ganti tool? Tanpa -sharedDb, DynamoDB
Local mempartisi data by access-key + region ke file
myaccesskeyid_region.db terpisah. Pakai -sharedDb atau jaga nilai itu
identik di mana-mana.
Apa bedanya port 8000 dan 4566? 8000 adalah default DynamoDB Local
standalone; 4566 adalah edge port tunggal LocalStack yang mem-front semua
layanan emulasinya, termasuk DynamoDB.
Bisakah satu GUI terhubung ke keduanya? Ya — mereka berbicara API DynamoDB
yang sama. Hanya URL endpoint yang berubah (:8000 vs :4566).
Apakah DynamoDB Local gratis? Ya. AWS mendistribusikan DynamoDB Local tanpa biaya sebagai JAR dan image Docker — tidak ada "provisioned throughput, data storage, or data transfer costs"; ia dimaksudkan hanya untuk development dan testing, bukan production.
Bisakah saya menjalankan SQL terhadap tabel lokal? DynamoDB lokal berbicara
API yang sama dengan cloud, jadi aturan access-pattern yang sama berlaku — dan
limit yang sama: grammar
SELECT PartiQL
DynamoDB hanya SELECT … FROM … WHERE … ORDER BY — tanpa JOIN, tanpa
GROUP BY, dan
tanpa fungsi agregat grouping
seperti COUNT/SUM/AVG (lihat
PartiQL vs SQL).
DynoTable menjalankan query analitik itu atas
koneksi mana pun, termasuk lokal.
Coba DynoTable untuk terhubung langsung ke localhost:8000 atau
localhost:4566 dan menjelajah, Query, serta mengedit tabel lokal Anda dengan
GUI.