Copia una tabella DynamoDB su un altro account/regione
DynamoDB non ha nessun comando "copia tabella" con un solo clic — non nella AWS CLI, non nella consolle. Ogni copia è in realtà composta da due metà: estrarre i dati dalla sorgente e caricalo in una tabella di destinazione. La prima metà è quella in cui una GUI si guadagna da vivere: un'esportazione senza perdite, filtrata e verificata, mentre la seconda metà funziona sempre su AWS utensileria. Questa guida copre entrambi e i trucchi operativi che incidono sulla produzione.
Come faccio a copiare una tabella DynamoDB su un altro account o regione?
Non esiste un comando copy-table nativo. Per la metà out, ottieni un risultato senza perdite DynamoDB-JSON esportazione della tabella (un clic in DynoTable, nessuno script) oppure creane uno snapshot con l'esportazione S3 gestita. Per il in tempo, scegli il lato AWS approccio adatto: uno script Scan + BatchWriteItem per piccole copie una tantum, uno script S3 esporta-poi-importa per tabelle di grandi dimensioni, AWS Copia di backup + ripristino per più account si muove con piena fedeltà o tabelle globali per la replica live continua. Ciascuno il ripristino o l'importazione crea una nuova tabella.
| Situazione | Miglior approccio |
|---|---|
| Tavolino, pezzo unico, controllo completo | Scan + BatchWriteItem script |
| Tabella grande, può tollerare un'istantanea | Esporta S3 → importa (crea una nuova tabella) |
| Più account/più regioni con ripristino | AWS Backup copia + ripristina |
| Replica live continua (non una copia una tantum) | Tabelle globali |
Nessun approccio è universalmente "giusto": dipende dalle dimensioni della tabella e dalla necessità o meno di un file snapshot point-in-time o dati in tempo reale e se la destinazione è nuova o esistente tabella.
La metà dell'esportazione: estrai i dati con DynoTable
Prima che possa avvenire qualsiasi ripristino, i dati devono lasciare l'origine e essere arrotolati manualmente il ciclo di scansione è la parte più soggetta a errori di una piccola migrazione (pagine eliminate, file danneggiati precisione dei numeri, tag di tipo eliminati troppo presto). DynoTable lo fa metà in un clic:
- Lossless by design: esporta la corrispondenza completa del filtro come marshalling DynamoDB-JSON - la forma del filo avvolto con caratteri, che preserva grandi numeri (> 2⁵³) che semplicemente JSON corrompe — o come NDJSON/CSV quando l'obiettivo non lo è DynamoDB affatto. Vedi export to CSV per il dettagli sul formato.
- Con ambito, non tutto o niente: l'esportazione S3 gestita esegue lo snapshot dell'intero
tabella; DynoTable esporta ogni elemento corrispondente alla tua query, trasmesso direttamente in streaming
da DynamoDB — quindi "copia solo gli elementi
TENANT#42nello staging" è un filtro, non una sceneggiatura. - Grandi tabelle sono benvenuti: le esportazioni si staccano e vengono eseguite in background, in streaming su disco riga per riga: un pull multi-gigabyte sopravvive ai cambi di scheda e ai ricaricamenti delle app.
- Verifica dopo il caricamento: una volta che la tabella di destinazione è attiva, sfoglia l'origine e target fianco a fianco, confronta i conteggi degli articoli (dimensione tabella e conteggio elementi) e controllo a campione record di esempio, senza scrivere uno script di verifica.
Il confine onesto: DynoTable estrae i dati fuori e verifica il risultato: il carica nella tabella di destinazione viene eseguito con lo strumento AWS (uno script di scrittura, importazione S3, o Ripristino del backup), trattato di seguito.
Approccio 1: Scan + BatchWriteItem (lo script)
Percorso con la tecnologia più bassa: leggi ogni elemento dalla fonte con Scan, scrivilo nel
destinazione con BatchWriteItem. Funziona su più account e su più regioni finché il tuo
Lo script contiene credenziali per entrambe le parti (o assume un ruolo nell'account di destinazione).
# Sketch — read source, write target (pseudo; use the SDK in real life)
aws dynamodb scan --table-name SourceTable --region us-east-1 \
> items.json
# transform Items[] into BatchWriteItem RequestItems, then:
aws dynamodb batch-write-item --request-items file://batch.json \
--region eu-west-1I trucchi sono reali ed è facile non notarli:
BatchWriteItemha un limite massimo di 25 elementi o 16 MB per chiamata: è necessario eseguire la suddivisione in blocchi e un singolo la chiamata può restituire elementi non elaborati devi riprovare con backoff esponenziale (API riferimento).- Le scritture consumano capacità di scrittura. Su abersaglio che colpirai
ProvisionedThroughputExceededExceptionveloce;assorbe di più ma continua a tappare ciascuna partizione con un limite rigido di 1.000 WCU / 3.000 RCU. Dimensionare il carico di scrittura in base alla capacità della destinazione prima di iniziare. Scanlegge l'intera tabella e misura ogni elemento: il classico Query-vs-Scan costo. Una grande tavola significa anche sfogliare "UltimaChiaveValutata"; vedere impaginazione.- Non atomico: Gli elementi scritti mentre la scansione è in volo potrebbero non essere rilevati: solo tu ottenere un'istantanea coerente se la sorgente è quiescente.
Ideale per tabelle di piccole dimensioni o quando è necessario trasformare/filtrare durante la copia e se la metà letta esiste già come esportazione con marshalling DynoTable, lo script si riduce a solo il ciclo di blocco e scrittura.
Approccio 2: esporta in S3, quindi importa in una nuova tabella
Per tabelle di grandi dimensioni, la esportazione verso S3 gestita da DynamoDB più l'importazione da S3** evita martellare le tue capacità.
Esporta esegue lo snapshot della tabella in un bucket S3 (come funziona):
- Richiede il recupero point-in-time (PITR) abilitato sulla tabella di origine.
- Non consuma capacità di lettura e non ha alcun impatto sulle prestazioni della tabella — legge da backup continui, non dalla tabella live.
- Uscite in formato DynamoDB JSON o Amazon Ion. (Il DynamoDB-JSON il formato wire è ciò che arriva in S3, digita tag e tutto.)
- Può scrivere su un bucket S3 di proprietà di un altro account e in una regione diversa.
- Supporta esportazioni complete e incrementali (esportazione incrementale GA, settembre 2023).
Importa quindi crea una nuova tabella dai dati S3 (come funziona):
- Importa solo in una tabella nuova: non è possibile importare in una tabella esistente.
- Non consuma capacità di scrittura sulla nuova tabella.
- Accetta CSV, DynamoDB JSON o Amazon Ion (opzionalmente compresso GZIP/ZSTD).
- Il bucket S3 di origine potrebbe trovarsi in un altro account o un'altra regione.
- È possibile definire indici secondari al momento dell'importazione, interrogabili non appena l'importazione completa.
Questo è il percorso più semplice per una migrazione di grandi dimensioni tra account/tra regioni in cui a è accettabile un'istantanea point-in-time (non dati in tempo reale).
Approccio 3: AWS Copia di backup + ripristino
Se utilizzi già AWS Backup, copia i punti di ripristino tra account e regioni (guida alla migrazione tra più account):
- Eseguire il backup della tabella di origine in un deposito di backup.
- Copia il backup in un deposito nell'account/regione di destinazione.
- Ripristina in una nuova tabella nella destinazione.
Vincoli principali:
- La copia su più account richiede che entrambi gli account appartengano alla stessa AWS Organizzazione.
- Il ripristino crea sempre una nuova tabella: non è possibile ripristinarne una esistente. -vengono conservati per impostazione predefinita (escludi alcuni o tutti su cui salvare tempi/costi di ripristino); non puoi aggiungere nuovi indici al ripristino.
- Nota della crittografia: per mantenere la stessa chiave KMS in un ripristino tra regioni è necessario un file Chiave multiregione; per più account è necessario condividere la chiave con la destinazione conto. Le chiavi di proprietà di AWS e gestite da AWS non possono essere condivise o rese multi-regione (ripristinare le note sulla crittografia).
Approccio 4: tabelle globali (replica in tempo reale, non una copia una tantum)
Tabelle globali replicano una tabella tra regioni e ora facoltativamente tra account (GA multi-account, febbraio 2026) — continuamente. Qualsiasi replica effettua operazioni di lettura e scrittura (multiattiva), con modalità asincrona, L'ultimo scrittore vince la replica (documenti sulle tabelle globali).
Questo non è uno strumento "copia e allontana": è una replica continua. Usalo quando tu desidera che la regione di destinazione rimanga sincronizzata per un tempo indefinito (DR, letture locali a bassa latenza), non per una migrazione pulita una tantum. Aggiungi una regione a una tabella esistente e DynamoDB inserisce i dati esistenti nella nuova replica.
Trucchi operativi (tutti gli approcci)
- GSI non sono liberi di ricrearsi. Una copia scansionata+scrittura non contiene indici: definisci tu li sul bersaglio e li riempiono (e costano) separatamente. Pianifica il tuo GSI vs LSI layout sulla destinazione in primo piano; LSIs può solo essere creato al momento della creazione della tabella (LSI documenti).
- La modalità capacità non viene trasferita. La nuova tabella si avvia con la modalità impostata, non quello della fonte. Stimare il carico di scrittura prima di una copia di scansione+scrittura - dimensione a elemento rappresentativo con il calcolatore della dimensione dell'articolo e moltiplicare per il conteggio degli articoli al campo da baseball WCUs. - , , la scalabilità automatica e i tag sono impostazioni della tabella, non dati: nessuna di queste i metodi di copia li portano tutti. Riapplicarli sul bersaglio.
- DynamoDB JSON ≠ plain JSON. Le esportazioni e le scansioni emettono tag di tipo DynamoDB-JSON; se ti stai trasformando lungo il percorso, il DynamoDB JSON convertitore gestisce il marshalling.
- Verifica prima del passaggio. Confronta i conteggi degli articoli e controlla i record su entrambi i lati — ricordando che il conteggio di "DescribeTable" è fino a sei ore di stallo, quindi un nuovo target può segnalare legittimamente zero.
FAQ
Esiste un comando AWS CLI per copiare una tabella DynamoDB?
No. Non esiste un comando nativo copy-table. Combina scan + batch-write-item,
oppure utilizzare le funzionalità di esportazione/importazione gestite o AWS Backup.
Come faccio a copiare una tabella DynamoDB su un altro account? Tre opzioni: uno script di scansione+scrittura con credenziali per entrambi gli account, uno script S3 esportazione/importazione (il bucket può essere su più account) o AWS Copia di backup+ripristino (entrambi gli account deve appartenere alla stessa AWS Organizzazione).
Come faccio a copiare una tabella DynamoDB in un'altra regione? L'esportazione/importazione S3 e il backup AWS supportano entrambi più regioni. Per in corso tra regioni sincronizzare anziché una copia singola, aggiungere una replica della tabella globale nell'area di destinazione.
La copia di una tabella ne copia gli indici? L'importazione S3 e il ripristino del backup AWS consentono di mantenere/definire gli indici secondari; una scansione+scrittura Lo script no: crei tu stesso gli indici sulla destinazione e questi si riempiono separatamente.
Posso importare in una tabella DynamoDB esistente? No. L'importazione S3 di DynamoDB e il ripristino del backup di AWS creano entrambi una nuova tabella. Per unire in una tabella esistente, utilizzare uno script di scansione+scrittura.
Posso copiare solo parte di una tabella? I percorsi di esportazione/importazione gestiti e di backup sono solo a tabella completa. Per un sottoinsieme, esporta la corrispondenza del filtro da DynoTable (marshalling senza perdite DynamoDB-JSON) o eseguire lo script di una scansione filtrata, quindi scrivere il sottoinsieme sulla destinazione.
Una GUI rende il cutover sensato: esegui un'esportazione senza perdite esattamente degli elementi che ti servono in movimento, quindi sfoglia sia l'origine che la destinazione fianco a fianco, verifica il conteggio degli elementi e alcuni campionare i record dopo la copia ed eseguire controlli ad hoc senza scrivere a scansiona lo script. Scarica DynoTable per eseguire l'esportazione e la verifica della metà di un migrazione tra account e regioni.