Menengah6 menit baca

Cara Menghubungkan ke DynamoDB Local dan LocalStack

Anda punya DynamoDB lokal yang berjalan dan kode Anda berkomunikasi dengannya baik-baik saja — 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 — namespacing region, aturan key alfanumerik, dan pembagian port 8000 vs 4566.

DynamoDB Local vs LocalStack: apa yang Anda hubungi

Keduanya memberi Anda API DynamoDB di localhost tanpa akun AWS, tetapi keduanya adalah hal yang berbeda:

Jadi satu-satunya perbedaan praktis untuk menghubungkan adalah URL endpoint: :8000 untuk DynamoDB Local berdiri-sendiri, :4566 untuk DynamoDB-via-LocalStack. Segala hal lain — API, trik kredensial, konfigurasi GUI — identik.

Pengaturan endpoint + kredensial-palsu yang membuat semua orang tersandung

SDK dan CLI AWS memerlukan access key dan region bahkan saat berbicara ke endpoint lokal — tetapi nilai-nilai itu tidak harus nyata. Dokumen AWS sendiri menyatakan nilai-nilai ini "tidak harus berupa nilai AWS yang valid untuk berjalan secara lokal" (dokumen AWS).

Dua jebakan yang tidak jelas:

  • Region/access-key diam-diam mem-namespace data Anda. Tanpa flag -sharedDb, DynamoDB Local menulis file myaccesskeyid_region.db terpisah per kombinasi access-key-ID + region — penamaan persis AWS. Terhubung dengan key atau region berbeda dari yang dipakai aplikasi Anda dan tabel Anda tampak hilang; tabel itu hanya ada di file lain. Jalankan dengan -sharedDb (satu shared-local-instance.db untuk setiap klien) atau cocokkan persis key + region yang dipakai aplikasi Anda.
  • Access key ID harus alfanumerik pada DynamoDB Local — tanpa simbol. Dokumen AWS menyatakan AWS_ACCESS_KEY_ID hanya boleh berisi A–Z, a–z, dan 0–9; AWS memperkenalkan ini di DynamoDB Local 2.0.0 (dan 1.23.0+), jadi key dengan karakter khusus yang dulu bekerja di image lebih lama kini 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 tampak-nyata AKIA…/ASIA… ditolak sebagai pengaman dan jatuh ke akun palsu 000000000000 — akun yang sama yang diresolusi oleh key arbitrer seperti test. Tetaplah dengan test.

Menghubungkan dengan AWS CLI (sanity check)

Sebelum mengarahkan GUI ke sana, konfirmasi endpoint hidup dari CLI. CLI tidak bisa default ke endpoint lokal, jadi Anda melewatkan --endpoint-url pada setiap perintah.

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 yang dikonfigurasi sama sekali (bahkan yang 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 yang berbeda — lihat jebakan di atas.

GUI DynamoDB Local: menjelajah dan query tabel lokal di DynoTable

Setelah CLI bekerja, sebuah GUI memerlukan tiga nilai yang sama: endpoint, region, dan kredensial palsu apa pun. CLI mengembalikan DynamoDB-JSON yang Anda baca dengan mata; sebuah GUI merender data yang sama sebagai tabel yang dapat Anda urutkan, filter, dan edit.

Di DynoTable, tambahkan sebuah koneksi dan tetapkan endpoint kustom:

  • Endpoint: http://localhost:8000 (DynamoDB Local) atau http://localhost:4566 (LocalStack)
  • Region: apa pun yang dipakai aplikasi Anda — mis. us-east-1. Ini label di sini, bukan region AWS sungguhan, tetapi harus cocok agar Anda mendarat di namespace data yang sama.
  • Access key / secret: apa saja (test / test adalah konvensional). Hanya alfanumerik untuk access key pada DynamoDB Local.

Dari sana Anda menjelajahi Item, menjalankan Query atau Scan, dan mengedit baris secara visual alih-alih marshalling JSON dengan tangan di CLI. Saat Anda memuat fixture, konverter DynamoDB-JSON mengubah JSON biasa menjadi format wire, dan Query vs Scan membahas baca mana yang harus diandalkan. Latihan yang sama untuk viewer DynamoDB LocalStack — hanya port yang berubah ke 4566.

DynoTable adalah perangkat lunak desktop khusus-lokal, jadi mengarahkannya ke localhost menjaga fixture Anda di mesin Anda. Untuk pandangan lebih luas tentang lanskap GUI, lihat perbandingan GUI DynamoDB.

Error umum (ketidakcocokan region, port, kredensial)

  • Connection refused. Port salah — 8000 adalah DynamoDB Local, 4566 adalah LocalStack. Konfirmasi juga kontainer benar-benar memublikasikan port (docker run -p 8000:8000 amazon/dynamodb-local). Untuk LocalStack, periksa layanan hidup di http://localhost:4566/_localstack/health.
  • The Access Key ID or Security Token is Invalid pada DynamoDB Local. Sejak image 2.0.0 (dan 1.23.0+), access key ID harus hanya alfanumerik. Key dengan simbol yang dulu bekerja di image lebih lama kini gagal — ganti dengan huruf/angka (mis. test) dan perbarui setiap alat 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 sungguhan, yang menolak key palsu Anda. Konfirmasi klien benar-benar diarahkan ke http://localhost:4566.
  • Error kredensial dari SDK/CLI. Bahkan endpoint lokal butuh sebagian kredensial hadir. Tetapkan AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY (atau profil palsu) agar rantai kredensial SDK ter-resolusi.
  • http vs https. Endpoint lokal adalah http biasa. URL https:// akan gagal pada handshake TLS.

Apakah DynamoDB Local data yang sama dengan tabel AWS sungguhan saya?

Tidak — lokal dan cloud adalah penyimpanan yang sepenuhnya terpisah. DynamoDB Local (dan DynamoDB LocalStack) menyimpan data dalam file lokal atau di memori; ia tidak pernah menyentuh akun AWS Anda, dan Region/akun AWS tidak didukung di level klien secara lokal. Itulah intinya: ini untuk pengembangan dan pengujian. Jika Anda ingin fixture yang sama di cloud nanti, AWS menyarankan nilai key/region yang tampak-valid secara lokal sehingga Anda hanya menukar endpoint saat berpindah. Untuk memodelkan schema itu sebelum Anda merilisnya, single-table design dan GSI vs LSI membahas keputusan yang tidak berubah antara lokal dan prod.

FAQ

Apakah saya butuh kredensial AWS sungguhan? Tidak. Baik DynamoDB Local maupun LocalStack menerima nilai palsu. Nilai itu hanya harus hadir, alfanumerik (untuk DynamoDB Local), dan konsisten di seluruh alat Anda.

Mengapa tabel saya menghilang saat saya berganti alat? Tanpa -sharedDb, DynamoDB Local mempartisi data berdasarkan access-key + region ke file myaccesskeyid_region.db terpisah. Gunakan -sharedDb atau jaga nilai-nilai itu identik di mana-mana.

Apa perbedaan antara port 8000 dan 4566? 8000 adalah default DynamoDB Local berdiri-sendiri; 4566 adalah edge port tunggal LocalStack yang menjadi muka semua layanan emulasinya, DynamoDB termasuk.

Bisakah satu GUI terhubung ke keduanya? Ya — keduanya 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 "biaya throughput tersedia, penyimpanan data, atau transfer data"; ini ditujukan hanya untuk pengembangan dan pengujian, bukan produksi.

Bisakah saya menjalankan SQL terhadap tabel lokal saya? DynamoDB lokal berbicara API yang sama dengan cloud, jadi aturan pola-akses yang sama berlaku — dan keterbatasan yang sama: grammar PartiQL SELECT DynamoDB hanya SELECT … FROM … WHERE … ORDER BY — tidak ada JOIN, tidak ada GROUP BY, dan tidak ada fungsi agregat pengelompokan seperti COUNT/SUM/AVG (lihat PartiQL vs SQL). SQL Workbench DynoTable menjalankan query analitis tersebut atas koneksi apa pun, lokal termasuk.

Coba DynoTable untuk terhubung langsung ke localhost:8000 atau localhost:4566 dan menjelajahi, query, serta mengedit tabel lokal Anda dengan GUI.

Diperbarui