Menengah6 menit baca

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:

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 file myaccesskeyid_region.db terpisah 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 (satu shared-local-instance.db untuk 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_ID hanya boleh berisi A–Z, a–z, dan 0–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:8000

LocalStack (perintah sama, port berbeda):

aws dynamodb list-tables --endpoint-url http://localhost:4566

Jika 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) atau http://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 / test konvensional). 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 — 8000 adalah DynamoDB Local, 4566 adalah LocalStack. Pastikan juga container benar-benar mem-publish port (docker run -p 8000:8000 amazon/dynamodb-local). Untuk LocalStack, cek layanan up di http://localhost:4566/_localstack/health.
  • The Access Key ID or Security Token is Invalid di 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 invalid terhadap LocalStack. Ini hampir selalu masalah endpoint, bukan kredensial — klien SDK Anda menjatuhkan --endpoint-url / endpoint_url dan menghantam endpoint AWS nyata, yang menolak key dummy Anda. Pastikan klien benar-benar diarahkan ke http://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.
  • http vs https. Endpoint lokal adalah http polos. URL https:// 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.

Diperbarui