Come connettersi a DynamoDB Local e LocalStack
Hai un DynamoDB locale in esecuzione e il tuo codice ci dialoga senza problemi — ma
vuoi vedere le tabelle, non scrivere uno script scan ogni volta. Connettere un
client a un endpoint locale richiede due cambiamenti: puntare all'URL giusto e
passargli credenziali usa e getta. I dettagli qui sotto sono i punti in cui la gente
si blocca — il namespacing della region, la regola sulle chiavi alfanumeriche e la
divisione tra le porte 8000 e 4566.
DynamoDB Local vs LocalStack: a cosa ti stai connettendo
Entrambi ti offrono un'API DynamoDB su localhost senza account AWS, ma sono cose
diverse:
- DynamoDB Local è il motore DynamoDB scaricabile in un singolo processo — AWS lo
distribuisce come JAR e come immagine Docker
(
amazon/dynamodb-local). È DynamoDB e nient'altro. Porta predefinita 8000 (documentazione AWS). Vedi eseguire DynamoDB Local con Docker. - LocalStack emula uno stack di servizi AWS dietro un unico endpoint. Il suo DynamoDB è a sua volta alimentato da DynamoDB Local, ma tutto passa attraverso l'unica edge port 4566 di LocalStack.
Quindi l'unica differenza pratica per connettersi è l'URL dell'endpoint: :8000 per
DynamoDB Local standalone, :4566 per DynamoDB-via-LocalStack. Tutto il resto —
l'API, il trucco delle credenziali, la configurazione della GUI — è identico.
Il setup endpoint + credenziali fittizie che frega tutti
Gli SDK AWS e la CLI richiedono una chiave di accesso e una region anche quando dialogano con un endpoint locale — ma quei valori non devono essere reali. La documentazione di AWS stessa dice che questi valori "non devono essere valori AWS validi per girare in locale" (documentazione AWS).
Due insidie non ovvie:
- La region/chiave di accesso fa silenziosamente il namespacing dei tuoi dati.
Senza il flag
-sharedDb, DynamoDB Local scrive un filemyaccesskeyid_region.dbseparato per ogni combinazione di access-key-ID + region — la denominazione esatta di AWS. Connettiti con una chiave o una region diversa da quella usata dalla tua app e le tue tabelle sembreranno svanite; sono semplicemente in un altro file. Esegui con-sharedDb(un soloshared-local-instance.dbper ogni client) oppure usa esattamente la chiave + region usate dalla tua app. - L'access key ID deve essere alfanumerico su DynamoDB Local — niente simboli. La
documentazione AWS
indica che
AWS_ACCESS_KEY_IDpuò contenere soloA–Z,a–ze0–9; AWS ha introdotto questo in DynamoDB Local 2.0.0 (e 1.23.0+), quindi una chiave con caratteri speciali che funzionava su un'immagine precedente ora fallisce (AWS re:Post). Vedi l'errore più sotto.
Per LocalStack l'impostazione predefinita sicura è test / test: LocalStack
ignora del tutto la secret key
e non ne convalida mai il valore. Le chiavi dall'aspetto reale AKIA…/ASIA… vengono
rifiutate come misura di sicurezza e ricadono sull'account fittizio 000000000000 —
lo stesso account a cui una chiave arbitraria come test viene risolta. Resta su
test.
Connettersi con la AWS CLI (controllo di integrità)
Prima di puntarci una GUI, conferma che l'endpoint sia attivo dalla CLI. La CLI
non può usare per default un endpoint locale,
quindi passi --endpoint-url su ogni comando.
DynamoDB Local:
aws dynamodb list-tables --endpoint-url http://localhost:8000LocalStack (stesso comando, porta diversa):
aws dynamodb list-tables --endpoint-url http://localhost:4566Se hai credenziali configurate in qualche modo (anche fittizie in
~/.aws/credentials o via AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY), questo
restituisce l'elenco delle tue tabelle. Un elenco vuoto senza errori significa che
l'endpoint funziona ma stai guardando un namespace chiave/region diverso — vedi
l'insidia sopra.
GUI per DynamoDB Local: sfogliare e interrogare le tabelle locali in DynoTable
Una volta che la CLI funziona, una GUI ha bisogno degli stessi tre valori: endpoint, region e qualsiasi credenziale fittizia. La CLI restituisce DynamoDB-JSON che leggi a occhio; una GUI rende gli stessi dati come una tabella che puoi ordinare, filtrare e modificare.
In DynoTable, aggiungi una connessione e imposta un endpoint personalizzato:
- Endpoint:
http://localhost:8000(DynamoDB Local) oppurehttp://localhost:4566(LocalStack) - Region: qualunque cosa usi la tua app — es.
us-east-1. Qui è un'etichetta, non una vera region AWS, ma deve corrispondere così da finire nello stesso namespace di dati. - Chiave di accesso / secret: qualsiasi cosa (
test/testè la convenzione). Solo alfanumerica per la chiave di accesso su DynamoDB Local.
Da lì sfogli gli item, esegui una Query o uno Scan e modifichi le righe
visivamente invece di marshalling il JSON a mano sulla CLI. Quando carichi delle
fixture, il convertitore DynamoDB-JSON trasforma il
JSON semplice nel formato wire, e Query vs Scan copre quale
lettura scegliere. Stessa procedura per un
viewer DynamoDB di LocalStack — cambia solo la porta a
4566.
DynoTable è software desktop solo-locale, quindi puntarlo a localhost mantiene le
tue fixture sulla tua macchina. Per uno sguardo più ampio sul panorama delle GUI,
vedi il confronto delle GUI per DynamoDB.
Errori comuni (region non corrispondente, porta, credenziali)
- Connection refused. Porta sbagliata —
8000è DynamoDB Local,4566è LocalStack. Conferma anche che il container abbia effettivamente pubblicato la porta (docker run -p 8000:8000 amazon/dynamodb-local). Per LocalStack, controlla che il servizio sia attivo suhttp://localhost:4566/_localstack/health. The Access Key ID or Security Token is Invalidsu DynamoDB Local. Dall'immagine 2.0.0 (e 1.23.0+), l'access key ID deve essere solo alfanumerico. Una chiave con simboli che funzionava su un'immagine precedente ora fallisce — sostituiscila con lettere/numeri (es.test) e aggiorna ogni strumento perché corrisponda.The security token included in the request is invalidcontro LocalStack. È quasi sempre un problema di endpoint, non di credenziali — il tuo client SDK ha perso il--endpoint-url/endpoint_urle ha colpito il vero endpoint AWS, che rifiuta la tua chiave fittizia. Conferma che il client punti effettivamente ahttp://localhost:4566.- Errori di credenziali dall'SDK/CLI. Anche gli endpoint locali hanno bisogno di
qualche credenziale presente. Imposta
AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY(o un profilo fittizio) così che la catena di credenziali dell'SDK si risolva. httpvshttps. Gli endpoint locali sonohttpsemplice. Un URLhttps://fallirà l'handshake TLS.
DynamoDB Local sono gli stessi dati delle mie vere tabelle AWS?
No — locale e cloud sono store completamente separati. DynamoDB Local (e il DynamoDB di LocalStack) tiene i dati in un file locale o in memoria; non tocca mai il tuo account AWS, e a livello di client le Region/gli account AWS non sono supportati in locale. È proprio questo il punto: è per sviluppo e test. Se in seguito vuoi le stesse fixture nel cloud, AWS suggerisce valori chiave/region dall'aspetto valido in locale, così da dover cambiare solo l'endpoint quando ti sposti. Per modellare quello schema prima di rilasciarlo, single-table design e GSI vs LSI coprono le decisioni che non cambiano tra locale e prod.
FAQ
Mi servono vere credenziali AWS? No. Sia DynamoDB Local sia LocalStack accettano valori fittizi. Devono soltanto essere presenti, alfanumerici (per DynamoDB Local) e coerenti tra i tuoi strumenti.
Perché le mie tabelle spariscono quando cambio strumento? Senza -sharedDb,
DynamoDB Local partiziona i dati per chiave di accesso + region in file
myaccesskeyid_region.db separati. Usa -sharedDb o mantieni quei valori identici
ovunque.
Qual è la differenza tra la porta 8000 e la 4566? 8000 è la predefinita di
DynamoDB Local standalone; 4566 è l'unica edge port di LocalStack che fa da fronte a
tutti i suoi servizi emulati, DynamoDB incluso.
Una sola GUI può connettersi a entrambi? Sì — parlano la stessa API DynamoDB.
Cambia solo l'URL dell'endpoint (:8000 vs :4566).
DynamoDB Local è gratuito? Sì. AWS distribuisce DynamoDB Local senza costi come JAR e come immagine Docker — non ci sono "costi di throughput provisioned, storage dati o trasferimento dati"; è pensato solo per sviluppo e test, non per la produzione.
Posso eseguire SQL sulle mie tabelle locali? Il DynamoDB locale parla la stessa
API del cloud, quindi valgono gli stessi pattern di accesso — e gli stessi limiti: la
grammatica SELECT di PartiQL
di DynamoDB è solo SELECT … FROM … WHERE … ORDER BY — niente JOIN, niente
GROUP BY e
nessuna funzione di aggregazione
come COUNT/SUM/AVG (vedi PartiQL vs SQL). Il SQL
Workbench di DynoTable esegue quelle query analitiche su qualsiasi connessione, locale
inclusa.
Prova DynoTable per connetterti direttamente a localhost:8000 o
localhost:4566 e sfogliare, interrogare e modificare le tue tabelle locali con una
GUI.