

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Runbook sulla migrazione di Amazon DocumentDB
<a name="docdb-migration-runbook"></a>

Questo runbook fornisce una guida completa per la migrazione di un database MongoDB su Amazon DocumentDB utilizzando (DMS). AWS Database Migration Service È progettato per supportare amministratori di database, ingegneri del cloud e sviluppatori durante tutto il percorso di migrazione end-to-end, dalla scoperta iniziale alla convalida successiva alla convalida successiva alla migrazione.

Date le differenze di implementazione e funzionalità supportate tra MongoDB e Amazon DocumentDB, questo runbook enfatizza un approccio strutturato e sistematico. Descrive le valutazioni essenziali prima della migrazione, evidenzia le considerazioni sulla compatibilità e descrive in dettaglio le attività chiave necessarie per garantire una migrazione di successo con interruzioni minime.

Il runbook è organizzato nei seguenti argomenti:
+ **[Compatibilità](#mig-runbook-compatibility)**— Comprendi le funzionalità e i tipi di dati di MongoDB supportati in Amazon DocumentDB e identifica le potenziali incompatibilità.
+ **[Rilevamento dei carichi di lavoro](#mig-runbook-workload)**— Analizza i carichi di lavoro MongoDB esistenti, inclusi read/write modelli, volumi di dati e linee di base delle prestazioni.
+ **[Migrazione dell'indice](#mig-runbook-index)**— Analizza le strategie per estrarre e trasformare gli indici MongoDB per ottenere prestazioni ottimali in Amazon DocumentDB.
+ **[Migrazione degli utenti](#mig-runbook-user)**— Descrivi in dettaglio l'approccio per la migrazione di utenti, ruoli e controlli di accesso del database ad Amazon DocumentDB.
+ **[Migrazione dei dati](#mig-runbook-data)**— Scopri vari metodi per la migrazione dei dati utilizzando AWS DMS, tra cui l'acquisizione dei dati a pieno carico e modifica (CDC).
+ **[Monitoraggio](#mig-runbook-monitoring)**— Descrivi in dettaglio i vari approcci di monitoraggio durante la migrazione tramite DMS o strumenti nativi.
+ **[Convalida](#mig-runbook-validation)**— Fornire procedure per i controlli dell'integrità dei dati, la convalida funzionale e il confronto delle prestazioni dopo la migrazione.

Seguendo le indicazioni contenute in questo runbook, i team possono garantire una transizione fluida, sicura ed efficiente ad Amazon DocumentDB, preservando al contempo la funzionalità delle applicazioni e riducendo al minimo i rischi.

## Compatibilità
<a name="mig-runbook-compatibility"></a>

**Topics**
+ [Compatibilità delle funzionalità principali](#w2aac15b9c13c13)
+ [Strumento di valutazione della compatibilità di Amazon DocumentDB](#w2aac15b9c13c15)

Quando si esegue la migrazione da MongoDB ad Amazon DocumentDB, una valutazione iniziale approfondita e un controllo della compatibilità delle funzionalità sono essenziali per una migrazione di successo. Questo processo inizia con un inventario completo delle funzionalità di MongoDB, inclusi operatori di pipeline di aggregazione, modelli di query, indici e modelli di dati.

Poiché Amazon DocumentDB è compatibile con le API MongoDB 3.6, 4.0, 5.0 e 8.0, le applicazioni che utilizzano funzionalità più recenti potrebbero richiedere il refactoring. MongoDB-specific Le aree critiche da valutare includono i meccanismi di sharding (Amazon DocumentDB utilizza un approccio diverso), le implementazioni delle transazioni, le funzionalità dei flussi di modifiche e i tipi di indici (in particolare gli indici sparsi e parziali).

Anche le caratteristiche prestazionali sono diverse, con Amazon DocumentDB ottimizzato per carichi di lavoro aziendali con prestazioni prevedibili. I test dovrebbero comportare l'esecuzione di carichi di lavoro rappresentativi su entrambi i sistemi per identificare i modelli di query che potrebbero richiedere l'ottimizzazione.

Il monitoraggio dei piani di esecuzione per rilevare potenziali lacune prestazionali è importante durante la fase di valutazione. Questo aiuta a creare una chiara tabella di marcia per la migrazione, a identificare le modifiche necessarie alle applicazioni e a stabilire tempistiche realistiche per una transizione senza intoppi.

### Compatibilità delle funzionalità principali
<a name="w2aac15b9c13c13"></a>



#### Supporto completo delle funzionalità
<a name="w2aac15b9c13c13b5"></a>
+ **Operazioni CRUD**: usufruisci del supporto completo per tutte le operazioni di base di creazione, lettura, aggiornamento ed eliminazione, inclusi gli operatori di blocco e di interrogazione, garantendo una perfetta compatibilità delle applicazioni.
+ **Funzionalità di indicizzazione avanzate**: sfrutta il supporto completo per gli indici a campo singolo, composto, TTL, parziale, sparse e 2dsphere, per ottimizzare le prestazioni delle query e gli indici di testo (versione 5) per le ricerche basate su testo.
+ **Enterprise-grade replica**: approfitta di un robusto meccanismo di failover automatico con repliche di lettura per una disponibilità elevata e senza costi operativi.
+ **Soluzioni di backup avanzate**: stai tranquillo con un sistema di backup automatico dotato di Point-in-Time ripristino (PITR) e istantanee manuali su richiesta per la protezione dei dati.

#### Migliorate AWS-funzionalità integrate
<a name="w2aac15b9c13c13b7"></a>
+ **Aggregazione semplificata**: sfrutta le fasi di aggregazione più comunemente utilizzate (`$match`,,, `$group` `$sort``$project`, ecc.) con prestazioni ottimizzate per i carichi di lavoro aziendali.
+ **Supporto alle transazioni**: implementa transazioni con più documenti e più raccolte, perfette per la maggior parte delle esigenze delle applicazioni aziendali.
+ **Real-time tracciamento dei dati**: abilita i flussi di modifiche con un semplice comando e aumenta il periodo di conservazione del flusso di modifiche tramite una semplice impostazione di gruppo di parametri per il monitoraggio delle modifiche ai dati in tempo reale.
+ **Location-based servizi ** — Implementazione di applicazioni geospaziali con supporto per `$geoNear` operatori e indici 2dsphere.
+ **Funzionalità di ricerca testuale**: utilizza la funzionalità di ricerca testuale integrata per le esigenze di scoperta dei contenuti.

#### Vantaggi dell'architettura moderna
<a name="w2aac15b9c13c13b9"></a>
+ **Cloud-native design**: usufruisci di un'architettura AWS ottimizzata che sostituisce le funzionalità precedenti, ad esempio MapReduce con operazioni di pipeline di aggregazione più efficienti.
+ **Sicurezza avanzata**: approfitta dell'autenticazione AWS Identity and Access Management (IAM), SCRAM-SHA-1 SCRAM-SHA-256, con X.509 certificato e dell'autenticazione basata su password.
+ **Prestazioni prevedibili**: ottieni prestazioni costanti ottimizzate specificamente per i carichi di lavoro aziendali.

Per una panoramica completa delle funzionalità di Amazon DocumentDB, consulta [API, operazioni e tipi di dati MongoDB supportati in Amazon DocumentDB](mongo-apis.md) e per [Differenze funzionali: Amazon DocumentDB e MongoDB](functional-differences.md) massimizzare il potenziale del database.

Amazon DocumentDB non supporta tutti gli indici offerti da MongoDB. Forniamo uno strumento di [ indicizzazione gratuito per verificare la compatibilità](https://github.com/awslabs/amazon-documentdb-tools/blob/master/index-tool/README.md). GitHub Esegui lo strumento di indicizzazione per valutare l'incompatibilità e pianificare le soluzioni alternative di conseguenza.

### Strumento di valutazione della compatibilità di Amazon DocumentDB
<a name="w2aac15b9c13c15"></a>

Lo strumento di compatibilità di [ Amazon DocumentDB ](https://github.com/awslabs/amazon-documentdb-tools/blob/master/compat-tool/README.md) GitHub analizza il MongoDB carico di lavoro e riporta operatori, comandi e funzionalità che non sono supportati o richiedono modifiche in Amazon DocumentDB. Supporta le versioni target dalla 3.6 alla 8.0.1 (impostazione predefinita: 8.0.1).

**Consigliata: modalità URI (5.0\+) MongoDB **

La modalità URI si connette direttamente all'istanza MongoDB, campiona le operazioni in tempo reale e non richiede profilazione o accesso ai log.

**Metodi alternativi **
+ **Log-based analisi**: analizza i log del MongoDB profiler. Acquisisce il comportamento effettivo in fase di esecuzione ma richiede l'abilitazione della profilazione e copre solo il periodo di registrazione.
+ **Analisi del codice sorgente**: analizza il codice sorgente dell'applicazione per l'utilizzo dell'API. MongoDB Fornisce una copertura completa ma può contrassegnare i percorsi di codice inutilizzati e non è in grado di rilevare le query costruite dinamicamente.

**Prerequisiti**
+ Python3.7\+
+ Clona lo strumento: `git clone https://github.com/awslabs/amazon-documentdb-tools.git`
+ Installa le dipendenze: `pip install -r compat-tool/requirements.txt`

Per i dettagli completi sull'utilizzo e tutte le opzioni disponibili, consulta il file [ README ](https://github.com/awslabs/amazon-documentdb-tools/blob/master/compat-tool/README.md) su. GitHub

## Rilevamento dei carichi di lavoro
<a name="mig-runbook-workload"></a>

La migrazione da MongoDB ad Amazon DocumentDB richiede una conoscenza approfondita del carico di lavoro del database esistente. Il rilevamento del carico di lavoro è il processo di analisi dei modelli di utilizzo del database, delle strutture dei dati, delle prestazioni delle query e delle dipendenze operative per garantire una transizione senza interruzioni con interruzioni minime. Questa sezione illustra i passaggi chiave coinvolti nell'individuazione dei carichi di lavoro per facilitare una migrazione efficace da MongoDB ad Amazon DocumentDB.

**Topics**
+ [Valutazione della distribuzione MongoDB esistente](#w2aac15b9c15b7)
+ [Identificazione delle differenze tra i modelli di dati](#w2aac15b9c15b9)
+ [Analisi delle query e delle prestazioni](#w2aac15b9c15c11)
+ [Revisione della sicurezza e del controllo degli accessi](#w2aac15b9c15c13)
+ [Considerazioni operative e di monitoraggio](#w2aac15b9c15c15)

### Valutazione della distribuzione MongoDB esistente
<a name="w2aac15b9c15b7"></a>

Prima della migrazione, è fondamentale valutare l'attuale ambiente MongoDB, tra cui:
+ **Architettura del cluster**: identifica il numero di nodi, i set di repliche e le configurazioni di sharding. Quando si esegue la migrazione da MongoDB ad Amazon DocumentDB, è importante comprendere la configurazione dello sharding MongoDB perché Amazon DocumentDB non supporta lo sharding controllato dall'utente. Le applicazioni progettate per un ambiente MongoDB frammentato richiederanno modifiche all'architettura, poiché Amazon DocumentDB utilizza un approccio di scalabilità diverso con la sua architettura basata sullo storage. Dovrai adattare la tua strategia di distribuzione dei dati e possibilmente consolidare le raccolte frammentate quando passi ad Amazon DocumentDB.
+ **Storage e volume di dati**: misura la dimensione totale dei dati e la dimensione dell'indice del cluster. Completalo con lo strumento di revisione [ Oplog ](https://github.com/awslabs/amazon-documentdb-tools/tree/master/migration/mongodb-oplog-review) per comprendere i modelli di scrittura e la velocità di crescita dei dati. Per ulteriori informazioni sul dimensionamento del cluster, consulta. [Dimensionamento delle istanze](best_practices.md#best_practices-instance_sizing) 
+ **Schemi di carico di lavoro**: analizza il throughput di lettura e scrittura, la frequenza di esecuzione delle query e l'efficienza di indicizzazione.
+ **Dipendenze operative**: documenta tutte le applicazioni, i servizi e le integrazioni che si basano su MongoDB.

### Identificazione delle differenze tra i modelli di dati
<a name="w2aac15b9c15b9"></a>

Sebbene Amazon DocumentDB lo sia MongoDB-compatible, ci sono differenze nelle funzionalità supportate, come:
+ **Transazioni**: Amazon DocumentDB supporta le transazioni ACID, ma con alcune. [Limitazioni](transactions.md#transactions-limitations)
+ **Progettazione dello schema**: assicurati che le strutture dei documenti, i documenti incorporati e i riferimenti siano in linea con le best practice di [ Amazon DocumentDB. ](https://d1.awsstatic.com/product-marketing/Data%20modeling%20with%20Amazon%20DocumentDB.pdf)

### Analisi delle query e delle prestazioni
<a name="w2aac15b9c15c11"></a>

La comprensione del comportamento delle query aiuta a ottimizzare le prestazioni di migrazione e post-migrazione. Le aree chiave da analizzare includono:
+ **Query lente**: identifica le query con tempi di esecuzione elevati utilizzando gli strumenti di profilazione di MongoDB.
+ **Schemi di interrogazione**: categorizza i tipi di query più comuni, comprese le operazioni e le aggregazioni CRUD.
+ **Utilizzo dell'indice**: valuta se gli indici sono utilizzati in modo efficace o necessitano di ottimizzazione in Amazon DocumentDB. Per valutare l'utilizzo degli indici e ottimizzare le prestazioni in Amazon DocumentDB, utilizza la fase della pipeline di `$indexStats` aggregazione combinata con il metodo nelle tue query critiche. `explain()` Inizia eseguendo l'esecuzione `db.collection.aggregate([{$indexStats{}}])` per identificare quali indici vengono utilizzati. Puoi eseguire un'analisi più dettagliata eseguendo le query più frequenti con. `explainPlan`
+ **Concorrenza e distribuzione del carico di lavoro**: valuta i rapporti di lettura e scrittura, il pool di connessioni e i colli di bottiglia delle prestazioni.

### Revisione della sicurezza e del controllo degli accessi
<a name="w2aac15b9c15c13"></a>

**Autenticazione e autorizzazione **
+ **MongoDB RBAC su Amazon DocumentDB IAM e RBAC**: mappa gli utenti e i ruoli di controllo degli accessi basati sui ruoli di MongoDB alle policy (IAM) e agli utenti di autenticazione SCRAM di Amazon DocumentDB. AWS Identity and Access Management 
+ **Strategia di migrazione degli utenti**: piano per la migrazione degli utenti del database, dei ruoli personalizzati e dei privilegi verso i meccanismi di autenticazione supportati da Amazon DocumentDB.
+ **Differenze di privilegio**: identifica i privilegi MongoDB senza equivalenti diretti di Amazon DocumentDB (ad esempio, ruoli di amministrazione dei cluster).
+ **Autenticazione delle applicazioni**: aggiornamento delle stringhe di connessione e della gestione delle credenziali per le politiche sulle password di Amazon DocumentDB. Puoi utilizzare Secrets Manager per archiviare le tue credenziali e ruotare le password.
+ **Gestione degli account di servizio**: stabilisci i processi per la gestione delle credenziali degli account di servizio in. AWS Secrets Manager
+ **Implementazione dei privilegi minimi**: rivedi e perfeziona i controlli di accesso per implementare i principi dei privilegi minimi nel nuovo ambiente.

**Encryption** (Crittografia)

Garantisci che la crittografia a riposo e in transito sia in linea con i requisiti di conformità.

**Configurazione della rete**

Pianifica la [ configurazione del ](https://docs.aws.amazon.com/vpc/latest/userguide/create-vpc.html) Virtual Private Cloud (VPC) e le regole del gruppo di sicurezza.

### Considerazioni operative e di monitoraggio
<a name="w2aac15b9c15c15"></a>

Per mantenere l'affidabilità del sistema, l'individuazione dei carichi di lavoro dovrebbe includere anche:
+ **Strategia di backup e ripristino**: valuta i metodi di backup esistenti e le funzionalità di backup di Amazon DocumentDB.
+ **AWS Backup integrazione**: sfrutta AWS Backup la gestione centralizzata dei backup tra AWS servizi tra cui Amazon DocumentDB.
+ **CloudWatch metriche**: mappa le metriche di monitoraggio MongoDB alle metriche di Amazon DocumentDB per CPU, memoria, CloudWatch connessioni e storage.
+ **Performance Insights**: implementa Amazon DocumentDB Performance Insights per visualizzare il carico del database e analizzare i problemi di prestazioni con un'analisi dettagliata delle query.
+ **Profiler**: configura il profiler Amazon DocumentDB per acquisire operazioni a esecuzione lenta (simile al profiler di MongoDB ma con impostazioni Amazon). DocumentDB-specific 
  + Abilita tramite gruppi di parametri con soglie appropriate.
  + Analizza i dati del profiler per identificare le opportunità di ottimizzazione
+ **CloudWatch Eventi**: configura il monitoraggio basato sugli eventi per gli eventi del cluster Amazon DocumentDB.
  + Configura le notifiche per eventi di backup, finestre di manutenzione e failover.
  + Effettua l'integrazione con Amazon SNS per avvisi e AWS Lambda risposte automatiche.
+ **Registrazione di audit**: pianifica la configurazione della registrazione di audit per tenere traccia delle attività degli utenti e degli eventi rilevanti per la sicurezza.
+ **Monitoraggio avanzato**: abilita il monitoraggio avanzato delle metriche granulari a intervalli di 1 secondo OS-level .

## Crea un nuovo cluster di destinazione
<a name="mig-runbook-configure-target"></a>

Crea un cluster Amazon DocumentDB seguendo i passaggi indicati in[Creazione di un cluster Amazon DocumentDB](db-cluster-create.md). Quando configuri il cluster per la migrazione, applica questi consigli:
+ **Classe di istanza: ** scegli R8G per ottenere prestazioni ottimali. Se R8G non è disponibile nella regione di destinazione, utilizza R6G. Scegli un'istanza quanto più grande possibile per ottenere il massimo rendimento a pieno carico. Riduci la scala una volta completata la migrazione.
+ **Versione del motore: ** più recente (8.0.1)
+ **Numero di istanze: ** scegli 1 istanza per ridurre al minimo i costi durante la migrazione. Scalabilità fino a 3 istanze per un'elevata disponibilità una volta completata la migrazione a pieno carico.
+ **Impostazioni di rete: ** assicurati che il tuo gruppo di sicurezza Amazon DocumentDB consenta le connessioni in entrata dal gruppo di sicurezza dell'istanza di replica DMS (per le migrazioni online) o dall'host di migrazione EC2 (per le migrazioni offline tramite mongorestore).

## Migrazione dell'indice
<a name="mig-runbook-index"></a>

La migrazione da MongoDB ad Amazon DocumentDB comporta il trasferimento non solo di dati ma anche di indici per mantenere le prestazioni delle query e ottimizzare le operazioni del database. Questa sezione illustra la procedura dettagliata e dettagliata per la migrazione degli indici da MongoDB ad Amazon DocumentDB garantendo al contempo compatibilità ed efficienza.

### Utilizzo dello strumento di indicizzazione Amazon DocumentDB
<a name="w2aac15b9c19b5"></a>

**Clona lo strumento di [ indicizzazione su ](https://github.com/awslabs/amazon-documentdb-tools/blob/master/index-tool/README.md) GitHub **

```
git clone https://github.com/awslabs/amazon-documentdb-tools.git
cd amazon-documentdb-tools/index-tool
```

```
pip install -r requirements.txt
```

**Esporta gli indici da MongoDB (se stai migrando da MongoDB) **

```
python3 migrationtools/documentdb_index_tool.py \
  --dump-indexes \
  --dir index_export \
  --uri 'mongodb://<username>:<password>@<source_endpoint>:27017'
```

**Verifica gli indici **

```
python3 migrationtools/documentdb_index_tool.py \
  --show-issues \
  --dir index_export
```

**Indici di importazione **

```
python3 migrationtools/documentdb_index_tool.py \
  --restore-indexes \
  --skip-incompatible \
  --dir index_export \
  --uri 'mongodb://<username>:<password>@<target_endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&retryWrites=false'
```

## Migrazione degli utenti
<a name="mig-runbook-user"></a>

La migrazione degli utenti da MongoDB ad Amazon DocumentDB è essenziale per mantenere il controllo degli accessi, l'autenticazione e la sicurezza del database. Questa sezione descrive i passaggi dettagliati per migrare con successo gli utenti MongoDB preservandone i ruoli e le autorizzazioni utilizzando lo strumento di esportazione per gli utenti di Amazon DocumentDB.

### Utilizzo dello strumento di esportazione degli utenti di Amazon DocumentDB
<a name="w2aac15b9c21b5"></a>

[`Export Users tool`](https://github.com/awslabs/amazon-documentdb-tools/tree/master/migration/export-users)Esporta utenti e ruoli da MongoDB o Amazon DocumentDB in JavaScript file, che possono quindi essere utilizzati per ricrearli in un altro cluster.

**Prerequisiti**

```
# Clone the repository
git clone https://github.com/awslabs/amazon-documentdb-tools.git
cd amazon-documentdb-tools/migration/export-users
```

```
# Install required dependencies
pip install pymongo
```

**Fase 1: Esportazione di utenti e ruoli **

```
# Export users and roles to JavaScript files
python3 docdbExportUsers.py \
  --users-file mongodb-users.js \
  --roles-file mongodb-roles.js \
  --uri "mongodb://<username>:<password>@<source_endpoint>:27017"
```

**Passaggio 2: modifica il file degli utenti **

Le password non vengono esportate per motivi di sicurezza. Apri il `mongodb-users.js` file e aggiungi una password per ogni utente sostituendo il `pwd` valore in ogni `createUser` istruzione:

```
db.getSiblingDB("admin").createUser({
  user: "appuser",
  pwd: "REPLACE_THIS_PASS",
  roles: [
    { role: "readWrite", db: "mydb" }
  ]
})
```

**Passaggio 3: ripristino dei ruoli personalizzati in Amazon DocumentDB **

```
# Import roles first
mongosh \
  --tls \
  --host <target_endpoint>:27017 \
  --tlsCAFile global-bundle.pem \
  --username {{<username>}} \
  --password {{<password>}} \
  mongodb-roles.js
```

**Fase 4: ripristinare gli utenti su Amazon DocumentDB **

```
# Import users after roles are created
mongosh \
  --tls \
  --host <target_endpoint>:27017 \
  --tlsCAFile global-bundle.pem \
  --username {{<username>}} \
  --password {{<password>}} \
  mongodb-users.js
```

**Note importanti**
+ Le password non vengono esportate per motivi di sicurezza e devono essere aggiunte manualmente al file users.js.
+ I ruoli devono essere importati prima degli utenti per garantire la corretta assegnazione dei ruoli.
+ Lo strumento genera JavaScript file che possono essere eseguiti direttamente con la shell mongosh.
+ I ruoli personalizzati e i relativi privilegi vengono preservati durante la migrazione.
+ Questo approccio consente la revisione e la modifica delle autorizzazioni utente prima dell'importazione.

Questo metodo fornisce un approccio sicuro e flessibile alla migrazione di utenti e ruoli da MongoDB ad Amazon DocumentDB, consentendo al contempo la reimpostazione delle password durante il processo di migrazione.

## Migrazione dei dati
<a name="mig-runbook-data"></a>

**Topics**
+ [Migrazione online](#w2aac15b9c23b5)
+ [Migrazione offline](#w2aac15b9c23b7)

### Migrazione online
<a name="w2aac15b9c23b5"></a>

Questa sezione fornisce passaggi dettagliati per eseguire una migrazione online da MongoDB ad Amazon DocumentDB utilizzando per AWS DMS abilitare tempi di inattività minimi e una replica continua. Per iniziare, configuri un cluster Amazon DocumentDB come destinazione e assicurati che l'istanza MongoDB sia configurata correttamente come origine, richiedendo in genere la modalità di set di repliche per l'acquisizione dei dati di modifica. Successivamente, crei un'istanza di replica DMS e definisci gli endpoint di origine e di destinazione con i dettagli di connessione necessari. Dopo aver convalidato gli endpoint, si configura e si avvia un'attività di migrazione che può includere il caricamento completo dei dati, la replica continua o entrambi.

#### Crea un nuovo cluster di destinazione
<a name="w2aac15b9c23b5b5"></a>

Consulta [Crea un nuovo cluster di destinazione](#mig-runbook-configure-target).

#### Configurare la fonte
<a name="w2aac15b9c23b5b7"></a>

MongoDB e Amazon DocumentDB possono entrambi fungere da fonti di migrazione, a seconda dello scenario:
+ **MongoDB come origine**: comune durante la migrazione da un MongoDB locale o autogestito a un Amazon DocumentDB o altri servizi di database. AWS Richiede l'esecuzione in modalità set di repliche con un oplog di dimensioni adeguate (assicurati che sia dimensionato per contenere tutte le operazioni durante il pieno carico) per supportare l'acquisizione dei dati di modifica durante la migrazione.
+ **Amazon DocumentDB come sorgente**: in genere utilizzato per la replica in più regioni, gli aggiornamenti di versione o la migrazione verso altri servizi di database come MongoDB Atlas. Richiede l'[Abilitazione dei flussi di modifica](change_streams.md#change_streams-enabling)impostazione del `change_stream_log_retention_duration` parametro nel gruppo di parametri del cluster per acquisire le modifiche in corso durante la migrazione. Assicurati che le tue `change_stream_log_retention_duration` impostazioni siano sufficientemente grandi da coprire il tempo necessario per completare il caricamento completo.

Prima di iniziare la migrazione, configura la fonte per consentire AWS DMS l'accesso.

Crea un utente MongoDB con le autorizzazioni appropriate:

```
db.createUser({
  user: "{{dmsUser}}",
  pwd: "{{<password>}}",
  roles: [{ role: "readAnyDatabase", db: "admin" }]
})
```

Configura rete e autenticazione.

Quando si configura la connettività di rete per la migrazione da MongoDB a DMS:

**EC2-hosted Fonte MongoDB **
+ Modifica il gruppo di sicurezza EC2 per consentire il traffico in entrata dal gruppo di sicurezza dell'istanza di replica DMS.
+ Aggiungi una regola per la porta TCP 27017 (o la tua porta MongoDB personalizzata).
+ Utilizza l'ID del gruppo di sicurezza dell'istanza di replica DMS come fonte per un controllo preciso degli accessi.
+ Assicurati che la sottorete dell'istanza EC2 abbia un percorso verso la sottorete dell'istanza di replica DMS.

**On-premises Fonte MongoDB **
+ Configura il firewall per consentire le connessioni in entrata dagli indirizzi IP pubblici dell'istanza di replica DMS.
+ Se utilizzi Direct Connect una VPN, assicurati che il routing sia corretto tra la rete e il VPC contenente l'istanza DMS.
+ Verifica la connettività utilizzando i comandi telnet o nc dalla sottorete DMS al server MongoDB.

**Fonte MongoDB Atlas **
+ Aggiungi gli indirizzi IP di un'istanza di replica DMS all'elenco degli indirizzi IP consentiti di MongoDB Atlas.
+ Configura il peering VPC tra VPC e MongoDB Atlas AWS VPC se Atlas è in esecuzione. AWS
+ Configura AWS PrivateLink la connettività privata (livello Enterprise), se in esecuzione su un altro provider cloud.
+ Crea un utente dedicato con le read/write autorizzazioni appropriate.
+ Usa una stringa di connessione MongoDB Atlas con la modalità SSL impostata su «verify-full».
+ Assicurati che il log abbia una dimensione sufficiente per la durata della migrazione.

**Fonte Amazon DocumentDB **

Configura il gruppo di sicurezza Amazon DocumentDB di origine per consentire il traffico in entrata dal gruppo di sicurezza dell'istanza di replica DMS.

#### Crea un'istanza di replica DMS
<a name="w2aac15b9c23b5b9"></a>

Usa [ DMS Buddy ](https://github.com/awslabs/amazon-documentdb-tools/tree/master/migration/dms_buddy) on GitHub per creare un'infrastruttura di migrazione ottimale con impostazioni DMS e dimensioni delle istanze ottimali. Se preferisci configurare manualmente, segui questi passaggi:

1. Nella AWS DMS console, nel pannello di navigazione, scegli ** Migrate o replicate**, quindi scegli ** Provisioned instances. **

1. Inserisci i dettagli dell'istanza di replica:
   + **Nome dell'istanza**: scegli un nome univoco.
   + **Classe di istanza**: seleziona in base al carico di lavoro. Esempio: dms.r7i.large (piccoli carichi di lavoro), dms.r7i.4xlarge (carichi di lavoro di grandi dimensioni).
   + ****Versione del motore: 3.5.4
   + **Memoria allocata**: l'impostazione predefinita è 50 GB (aumentala se necessario). Ciò è determinato dalle dimensioni del documento updates/second e dalla durata del caricamento completo.
   + **Multi-AZ Distribuzione**: abilita per l'alta disponibilità, se necessario.
   + Scegli lo stesso VPC di Amazon DocumentDB.
   + Assicurati che i gruppi ** di sicurezza ** consentano il traffico in entrata dall'origine e da Amazon DocumentDB.

1. Scegli ** Crea istanza di replica ** e attendi che lo stato sia disponibile.

#### Crea endpoint DMS
<a name="w2aac15b9c23b5c11"></a>

##### Crea un endpoint di origine
<a name="w2aac15b9c23b5c11b3"></a>

**Per una fonte MongoDB **

1. Nella console DMS, nel pannello di navigazione, scegli ** Migrate or replicate**, quindi scegli Endpoints. ** **

1. Seleziona **Crea endpoint**.

1. Nella ** pagina ** Crea endpoint, scegli Endpoint ** ** di origine.

1. Nella sezione Configurazione dell'**endpoint: **
   + Inserisci un identificatore dell'**endpoint univoco e significativo ** (ad esempio, «mongodb-source»).
   + Scegli MongoDB ** come motore di origine. ** ** **
   + Per **Accede al database di endpoint** scegli **Fornisci le informazioni di accesso manualmente**.
   + Per il nome ** del server**, inserisci il tuo. {{MongoDB server DNS name/IP address}}
   + Per ** Porta**, inserisci ** 27017 ** (porta MongoDB predefinita).
   + Per la modalità di ** autenticazione**, scegli la modalità appropriata per la tua applicazione (password/SSL) (l'impostazione predefinita è Secrets Manager).
   + Se la modalità di ** autenticazione ** è ** Password**, fornisci:
     + **Nome utente ** e ** password**: inserisci le credenziali MongoDB.
     + **Nome del database**: il nome del database di origine.
     + **Meccanismo di autenticazione**: SCRAM-SHA-1 (predefinito) o meccanismo appropriato

1. Per la modalità ** Metadati**, lasciate l'impostazione predefinita del ** documento. **

1. Attributi di connessione aggiuntivi:
   + authSource=admin (se il database di autenticazione è diverso)
   + <your-replica-set-name>ReplicaSet= (richiesto per CDC)

**Per una fonte Amazon DocumentDB **

1. Nella console DMS, nel pannello di navigazione, scegli ** Migrate or replicate**, quindi Endpoints. ** **

1. Seleziona **Crea endpoint**.

1. Nella ** pagina ** Crea endpoint, scegli Source endpoint. ** **

1. Nella sezione Configurazione dell'**endpoint: **
   + Inserisci un identificatore dell'**endpoint univoco e significativo ** (ad esempio, «docdb-source»).
   + Scegli ** Amazon DocumentDB come motore di origine. ** ** **
   + Per **Accede al database di endpoint** scegli **Fornisci le informazioni di accesso manualmente**.
   + Per il nome ** del server**, inserisci il tuo{{source Amazon DocumentDB cluster endpoint}}.
   + Per ** Porta**, inserisci ** 27017 ** (porta Amazon DocumentDB predefinita).
   + Per la modalità ** SSL**, scegli ** verify-full ** (consigliato per Amazon DocumentDB).
   + Per il certificato ** CA**, scegli il certificato CA principale di Amazon RDS.
   + Per la modalità di ** autenticazione**, scegli la modalità appropriata per la tua applicazione (password/SSL) (l'impostazione predefinita è Secrets Manager).
   + Se la modalità di ** autenticazione ** è ** Password**, fornisci:
     + **Nome utente ** e ** password**: inserisci le credenziali di Amazon DocumentDB.
     + **Nome del database**: il nome del database di origine.
     + **Meccanismo di autenticazione**: SCRAM-SHA-1 (predefinito) o meccanismo appropriato

1. Per la modalità ** Metadati**, lasciate l'impostazione predefinita del ** documento. **

##### Crea un endpoint di destinazione (Amazon DocumentDB)
<a name="w2aac15b9c23b5c11b5"></a>

1. Nella console DMS, nel pannello di navigazione, scegli ** Migrate or replicate**, quindi Endpoints. ** **

1. Seleziona **Crea endpoint**.

1. Nella ** pagina ** Crea endpoint, scegli Target endpoint. ** **

1. Nella sezione di configurazione dell'**endpoint: **
   + Inserisci un identificatore dell'**endpoint univoco e significativo ** (ad esempio, «docdb-target»).
   + Scegli ** Amazon DocumentDB come motore di Target. ** ** **
   + Per ** Access to endpoint database**, scegli il metodo che desideri utilizzare per autenticare l'accesso al database:
     + Se scegli **AWS Secrets Manager**, scegli il segreto in cui archiviare le tue credenziali Amazon DocumentDB nel campo Segreto. ** **
     + Se scegli ** Fornisci le informazioni di accesso manualmente: ** 
       + Per Nome ** server**, inserisci il tuo{{target Amazon DocumentDB cluster endpoint}}.
       + Per ** Porta**, inserisci ** 27017 ** (porta Amazon DocumentDB predefinita).
       + Per la modalità ** SSL**, scegli ** verify-full ** (consigliato per Amazon DocumentDB).
       + Per ** CA Certificate**, scarica e specifica il pacchetto di certificati CA per la verifica SSL.
       + Per la modalità di ** autenticazione**, scegli la modalità appropriata per la tua applicazione (password/SSL) (l'impostazione predefinita è Secrets Manager).
       + Se la modalità di ** autenticazione ** è ** Password**, fornisci:
         + **Nome utente ** e ** password**: inserisci le credenziali di Amazon DocumentDB.
         + **Nome del database**: il nome del database di origine.
         + **Meccanismo di autenticazione**: SCRAM-SHA-1 (predefinito) o meccanismo appropriato

1. Per la modalità ** Metadati**, lasciate l'impostazione predefinita del ** documento. **

#### Crea attività di replica
<a name="w2aac15b9c23b5c13"></a>

1. Nella console DMS, nel pannello di navigazione, scegli ** Migra o replica**, quindi scegli Attività. ** **

1. Scegli **Create task (Crea attività)**.

1. Nella ** pagina ** Crea attività, nella sezione Configurazione dell'**attività: **
   + Inserisci un identificatore di ** attività univoco e significativo ** (ad esempio, «mongodb-docdb-replication»).
   + Scegli l'endpoint di origine che hai creato in precedenza nel menu a discesa Endpoint del database di origine. ** **
   + Scegli l'endpoint di destinazione che hai creato in precedenza nel menu a discesa Endpoint del database di ** Target. **
   + Scegli l'istanza di replica creata in precedenza nel menu a discesa Provisioned instance. ** **
   + Per Tipo di ** attività**, scegli ** Migra e replica. **
   + Per ** quanto tempo intendi continuare a replicare dall'origine alla destinazione? **, scegli ** Per un periodo limitato. **

1. Nella ** sezione ** Impostazioni:
   + Per la modalità di preparazione della tabella ** Target**, scegli ** Non fare nulla**. Altrimenti, le raccolte e gli indici già creati verranno eliminati.
   + Per i registri delle ** attività**, seleziona la casella ** Attiva i CloudWatch ** registri.
   + Lascia i valori predefiniti per tutte le altre impostazioni.

1. Torna nella parte superiore della ** sezione ** Impostazioni, per la modalità di ** modifica**, scegli l'editor ** JSON ** e imposta i seguenti attributi:

   ```
   {
     "TargetMetadata": {
       "ParallelApplyThreads": 5
     },
     "FullLoadSettings": {
       "MaxFullLoadSubTasks": 16
     }
   }
   ```

   `MaxFullLoadSubTasks`Impostato in base al numero di raccolte e alla capacità dell'istanza. Usa valori più bassi (2—4) per raccolte più piccole o più piccole e valori più alti (8—16) per molte raccolte di grandi dimensioni. Per il dimensionamento automatico, vedi DMS Buddy su. [https://github.com/awslabs/amazon-documentdb-tools/tree/master/migration/dms_buddy](https://github.com/awslabs/amazon-documentdb-tools/tree/master/migration/dms_buddy) GitHub

1. Nella ** sezione Mappature delle ** tabelle, aggiungi una nuova regola di selezione:
   + Per il nome ** dello schema**, aggiungi il database di origine da migrare. Usa% per specificare più database.
   + Per il ** nome della tabella ** Schema, aggiungi la raccolta di sorgenti da migrare. Usa% per specificare più raccolte.
   + Per ** Azione**, lascia l'impostazione predefinita di ** Includi **

1. Per raccolte di grandi dimensioni (oltre 100 GB), aggiungi la regola ** delle impostazioni della ** tabella:
   + Per il nome ** dello schema**, aggiungi il database di origine da migrare. Usa% per specificare più database.
   + Per il ** nome della tabella ** Schema, aggiungi la raccolta di sorgenti da migrare. Usa% per specificare più raccolte.
   + Per ** Numero di partizioni**, impostato in base al carico di lavoro. Per un numero limitato di raccolte di grandi dimensioni, imposta le partizioni ≥ `MaxFullLoadSubTasks` per tenere occupati tutti i lavoratori. Per molte raccolte che vengono caricate in parallelo, impostate le partizioni ≤ `MaxFullLoadSubTasks` poiché il numero di raccolte stesso fornisce un parallelismo sufficiente.

1. Nella ** sezione Valutazione della ** premigrazione, assicurati che sia disattivata. La valutazione della premigrazione non è supportata per Amazon DocumentDB come destinazione e deve essere disabilitata.

### Migrazione offline
<a name="w2aac15b9c23b7"></a>

Questa sezione descrive il processo per eseguire una migrazione offline da un'istanza MongoDB autogestita ad Amazon DocumentDB utilizzando strumenti MongoDB nativi: e. `mongodump` `mongorestore`

#### Prerequisiti
<a name="w2aac15b9c23b7b5"></a>

**Requisiti MongoDB di origine **
+ Accesso all'istanza MongoDB di origine con le autorizzazioni appropriate.
+ Installa`mongodump`. se necessario (viene installato durante l'installazione di MongoDB).
+ Assicurati che ci sia abbastanza spazio su disco per i file di dump.

**Requisiti di Amazon DocumentDB target **
+ Assicurati di aver effettuato il provisioning di un cluster Amazon DocumentDB.
+ Assicurati che sia presente un'istanza EC2 nello stesso VPC di Amazon DocumentDB per facilitare la migrazione.
+ La connettività di rete deve essere disponibile tra l'ambiente di origine e Amazon DocumentDB.
+ **mongorestore ** deve essere installato sull'istanza EC2 di migrazione.
+ Le autorizzazioni IAM appropriate devono essere configurate per accedere ad Amazon DocumentDB,

**Requisiti generali **
+ AWS CLI devono essere configurati (se si utilizzano AWS servizi per lo storage intermedio)
+ Deve essere disponibile una larghezza di banda sufficiente per il trasferimento dei dati.
+ La finestra di inattività deve essere approvata (se si esegue una migrazione in tempo reale, si consiglia di prendere in considerazione altri approcci)

#### Prepara un cluster Amazon DocumentDB
<a name="w2aac15b9c23b7b7"></a>

Consulta [Crea un nuovo cluster di destinazione](#mig-runbook-configure-target).

#### Esegui il dump dei dati (mongodump)
<a name="w2aac15b9c23b7b9"></a>

Scegli una delle seguenti opzioni per creare un file di dump:
+ **Opzione 1: Basic **

  ```
  mongodump \
    --uri="mongodb://{{<user>}}:{{<password>}}@{{<source_endpoint>}}:27017/{{<database>}}" \
    --out=/path/to/dump
  ```
+ **Opzione 2: migliore controllo e prestazioni **

  Comprime l'output con gzip, scarica le raccolte in parallelo, abilita TLS e legge da una replica secondaria, se disponibile:

  ```
  mongodump \
    --uri="mongodb://{{<user>}}:{{<password>}}@{{<source_endpoint>}}:27017" \
    --out=/path/to/dump \
    --gzip \
    --numParallelCollections=4 \
    --tls \
    --authenticationDatabase=admin \
    --readPreference=secondaryPreferred
  ```
+ **Opzione 3: database di grandi dimensioni **

  Scarica un database e una raccolta specifici, filtra i documenti per interrogazione e li restituisce in un unico archivio compresso:

  ```
  mongodump \
    --host={{<source_endpoint>}} \
    --port=27017 \
    --username={{<user>}} \
    --password={{<password>}} \
    --db={{<specific_db>}} \
    --collection={{<specific_collection>}} \
    --query='{ "date": { "$gt": "2020-01-01" } }' \
    --archive=/path/to/archive.gz \
    --gzip \
    --tls
  ```

#### Trasferisci i file di dump nell'ambiente di ripristino
<a name="w2aac15b9c23b7c11"></a>

Scegliete un metodo appropriato in base alle dimensioni del dump:
+ **Piccolo**: copia direttamente sul tuo computer di migrazione (istanza EC2 creata in precedenza):

  ```
  scp -r /path/to/dump user@migration-machine:/path/to/restore
  ```
+ **Medio**: usa Amazon S3 come storage intermedio:

  ```
  aws s3 cp --recursive /path/to/dump s3://your-bucket/mongodb-dump/
  ```
+ **Grande**: per database molto grandi, considera un AWS DataSync trasferimento fisico.

#### Ripristina i dati su Amazon DocumentDB (mongorestore)
<a name="w2aac15b9c23b7c13"></a>

Prima di iniziare il processo di ripristino, crea gli indici in Amazon DocumentDB. Puoi utilizzare lo strumento [ Amazon DocumentDB Index per esportare e ](https://github.com/awslabs/amazon-documentdb-tools/tree/master/index-tool) importare indici.

Scegli una delle seguenti opzioni per ripristinare i dati:
+ **Opzione 1: ripristino di base **

  ```
  mongorestore \
    --uri="mongodb://{{<user>}}:{{<password>}}@{{<target_endpoint>}}:27017" \
    --tls \
    --tlsCAFile=global-bundle.pem \
    /path/to/dump
  ```
+ **Opzione 2: controllo e prestazioni migliori **

  Ripristina i dump compressi con gzip con raccolta parallela e inserimento di documenti. Salta il ripristino dell'indice poiché gli indici sono pre-creati:

  ```
  mongorestore \
    --uri="mongodb://{{<user>}}:{{<password>}}@{{<target_endpoint>}}:27017" \
    --tls \
    --tlsCAFile=global-bundle.pem \
    --gzip \
    --numParallelCollections=4 \
    --numInsertionWorkersPerCollection=4 \
    --noIndexRestore \
    /path/to/dump
  ```
+ **Opzione 3: database di grandi dimensioni o controlli specifici **

  Ripristina da un archivio compresso con filtro dello spazio dei nomi per includere o escludere database e raccolte specifici. Salta il ripristino dell'indice poiché gli indici sono precreati:

  ```
  mongorestore \
    --host={{<target_endpoint>}} \
    --port=27017 \
    --username={{<user>}} \
    --password={{<password>}} \
    --tls \
    --tlsCAFile=global-bundle.pem \
    --archive=/path/to/archive.gz \
    --gzip \
    --nsInclude="db1.*" \
    --nsExclude="db1.sensitive_data" \
    --noIndexRestore
  ```

## Monitoraggio
<a name="mig-runbook-monitoring"></a>

Questa sezione fornisce un processo di monitoraggio dettagliato per tenere traccia dell'avanzamento, delle prestazioni e dello stato di una migrazione in corso.

Le fasi di monitoraggio si applicano indipendentemente dal metodo di migrazione (AWS DMS mongodump/mongorestore,, o altri strumenti).

### AWS DMS Monitoraggio della migrazione (se applicabile)
<a name="w2aac15b9c25b7"></a>

Monitora le seguenti CloudWatch metriche chiave:

**Metriche relative alla fase di carico completo **
+ **FullLoadThroughputBandwidthTarget**— Larghezza di banda di rete (KB/second) a pieno carico
+ **FullLoadThroughputRowsTarget**— Numero di rows/documents caricamenti al secondo
+ **FullLoadThroughputTablesTarget**— Numero di tables/collections completamenti al minuto
+ **FullLoadProgressPercent**— Percentuale di carico completo completato
+ **TablesLoaded**— Numero di caricamenti tables/collections effettuati con successo
+ **TablesLoading**— Numero di caricamenti tables/collections attualmente in corso
+ **TablesQueued**— Numero di tables/collections attese da caricare
+ **TablesErrored**— Numero di quelli tables/collections che non sono stati caricati

**Metriche di fase CDC **
+ **CDCLatencyTarget**— Ritardo (secondi) tra il cambio di origine e l'applicazione di destinazione
+ **CDCLatencySource**— Ritardo (secondi) tra la modifica della sorgente e la lettura da parte del DMS
+ **CDCThroughputRowsTarget**— Righe al secondo applicate durante la replica in corso
+ **CDCThroughputBandwidthTarget**— Larghezza di banda di rete (KB/second) durante il CDC
+ **CDCIncomingChanges**— Numero di eventi di modifica ricevuti dalla fonte
+ **CDCChangesMemoryTarget**— Memoria utilizzata (MB) per memorizzare le modifiche sul lato di destinazione

**Metriche relative alle risorse **
+ **Utilizzo della CPU**: utilizzo della CPU dell'istanza di replica
+ **FreeableMemory**— Memoria disponibile sull'istanza di replica
+ **FreeStorageSpace**— Storage disponibile sull'istanza di replica
+ **NetworkTransmitThroughput**— Throughput di rete per l'istanza di replica
+ **NetworkReceiveThroughput**— Throughput di rete per l'istanza di replica

**Metriche di errore **
+ **ErrorsCount**— Numero totale di errori durante la migrazione
+ **TableErrorsCount**— Numero di errori specifici della tabella
+ **RecordsErrorsCount**— Numero di errori specifici dei record

Crea CloudWatch allarmi per metriche critiche, `CPUUtilization` ad esempio `CDCLatencyTarget` per ricevere notifiche se le prestazioni della migrazione peggiorano.

#### Log DMS (log) CloudWatch
<a name="w2aac15b9c25b7c23"></a>



1. Vai alla console Amazon CloudWatch Logs.

1. Trova e scegli nel tuo gruppo di log. Sarà simile a «dms-tasks —».

1. Cerca i flussi di log che potrebbero contenere informazioni sugli errori:
   + Stream con «error» nel nome
   + Stream con ID di attività o nomi di endpoint
   + I flussi di log più recenti durante il periodo della migrazione

1. All'interno di questi stream, cerca parole chiave come:
   + «errore»
   + «eccezione»
   + «fallito»
   + «avviso»

#### stato dell'attività DMS (utilizzando AWS CLI)
<a name="w2aac15b9c25b7c25"></a>



```
aws dms describe-replication-tasks \
  --filters Name=replication-task-id,Values={{<task_id>}} \
  --query "ReplicationTasks[0].Status"
```

Flusso di stato previsto:

creazione → pronto → in esecuzione → arresto → interrotto (o fallito)

#### Monitora usando `docdb-dashboarder`
<a name="w2aac15b9c25b7c27"></a>

Lo `docdb-dashboarder` strumento fornisce un monitoraggio completo per i cluster Amazon DocumentDB generando automaticamente dashboard con metriche prestazionali essenziali. CloudWatch Queste dashboard mostrano metriche critiche a livello di cluster (ritardo di replica, contatori delle operazioni), metriche a livello di istanza (CPU, memoria, connessioni) e metriche di archiviazione (utilizzo del volume, archiviazione di backup). Per gli scenari di migrazione, lo strumento offre dashboard specializzate che tracciano l'avanzamento della migrazione con metriche come il ritardo di replica CDC e i tassi operativi. Le dashboard possono monitorare più cluster contemporaneamente e includere il supporto per le istanze. NVMe-backed Visualizzando queste metriche, i team possono identificare in modo proattivo i colli di bottiglia nelle prestazioni, ottimizzare l'allocazione delle risorse e garantire il corretto funzionamento delle distribuzioni di Amazon DocumentDB. Lo strumento elimina la necessità della creazione manuale di dashboard fornendo al contempo un monitoraggio coerente in tutti gli ambienti. Per istruzioni di configurazione e opzioni di configurazione avanzate, consulta il repository [ Amazon DocumentDB Dashboarder Tool. ](https://github.com/awslabs/amazon-documentdb-tools/tree/master/monitoring/docdb-dashboarder) GitHub 

## Convalida
<a name="mig-runbook-validation"></a>

**Topics**
+ [Lista di controllo per la convalida](#w2aac15b9c27b9)
+ [Convalida dello schema e dell'indice](#w2aac15b9c27c11)
+ [Campionamento dei dati e convalida a livello di campo](#w2aac15b9c27c13)
+ [Validazione tramite strumento DataDiffer](#w2aac15b9c27c15)

Questa sezione fornisce un processo di convalida dettagliato per garantire la coerenza, l'integrità e la compatibilità delle applicazioni dopo la migrazione.

Le fasi di convalida si applicano indipendentemente dal metodo di migrazione (AWS DMS, mongodump/mongorestore, o altri strumenti).

### Lista di controllo per la convalida
<a name="w2aac15b9c27b9"></a>

Verifica che il numero di documenti in ogni raccolta corrisponda tra origine e destinazione:

**Fonte MongoDB **

```
mongosh \
  --host {{<source_endpoint>}} \
  --port 27017 \
  --username {{<user>}} \
  --password {{<password>}} \
  --eval "db.{{<collection>}}.countDocuments()"
```

**Obiettivo Amazon DocumentDB **

```
mongosh \
  --host {{<target_endpoint>}} \
  --port 27017 \
  --username {{<user>}} \
  --password {{<password>}} \
  --tls \
  --tlsCAFile global-bundle.pem \
  --eval "db.{{<collection>}}.countDocuments()"
```

### Convalida dello schema e dell'indice
<a name="w2aac15b9c27c11"></a>

Verifica che:
+ tutte le raccolte esistono nella destinazione.
+ gli indici vengono replicati correttamente.
+ le definizioni dello schema (se applicate) sono identiche.

**Controlla le raccolte (origine e destinazione) **

```
mongosh --host {{<source_endpoint>}} \
  --port 27017 \
  --username {{<username>}} \
  --password {{<password>}} \
  --eval "db = db.getSiblingDB('{{<database>}}'); db.getCollectionNames();"

mongosh --host {{<target_endpoint>}} \
  --port 27017 \
  --username {{<username>}} \
  --password {{<password>}} \
  --tls --tlsCAFile global-bundle.pem \
  --eval "db = db.getSiblingDB('{{<database>}}'); db.getCollectionNames();"
```

**Controlla gli indici (origine e destinazione) **

```
mongosh --host {{<source_endpoint>}} \
  --port 27017 \
  --username {{<username>}} \
  --password {{<password>}} \
  --eval "db.{{<collection>}}.getIndexes()"

mongosh --host {{<target_endpoint>}} \
  --port 27017 \
  --username {{<username>}} \
  --password {{<password>}} \
  --tls --tlsCAFile global-bundle.pem \
  --eval "db.{{<collection>}}.getIndexes()"
```

Confronta l'elenco delle raccolte per assicurarti che non vi siano raccolte mancanti o aggiuntive.

Verifica gli indici controllando i nomi degli indici, le definizioni delle chiavi, i vincoli univoci e gli indici TTL (se presenti).

**Controlla le regole di convalida dello schema (se usi la convalida dello schema in MongoDB) **

```
mongosh --host {{<source_endpoint>}} \
  --port 27017 \
  --username {{<username>}} \
  --password {{<password>}} \
  --eval "db.getCollectionInfos({name: '{{<collection>}}'})[0].options.validator"

mongosh --host {{<target_endpoint>}} \
  --port 27017 \
  --username {{<username>}} \
  --password {{<password>}} \
  --tls --tlsCAFile global-bundle.pem \
  --eval "db.getCollectionInfos({name: '{{<collection>}}'})[0].options.validator"
```

### Campionamento dei dati e convalida a livello di campo
<a name="w2aac15b9c27c13"></a>

È possibile campionare i documenti in modo casuale e confrontare i campi tra origine e destinazione.

**Campionamento manuale **

Recupera cinque documenti a caso (fonte):

```
mongosh --host {{<source_endpoint>}} \
  --port 27017 \
  --username {{<username>}} \
  --password {{<password>}} \
  --eval "db.{{<collection>}}.aggregate([{ \$sample: { size: 5 } }])"
```

Recupera gli stessi ID del documento (destinazione):

```
mongosh --host {{<target_endpoint>}} \
  --port 27017 \
  --username {{<username>}} \
  --password {{<password>}} \
  --tls --tlsCAFile global-bundle.pem \
  --eval "db.{{<collection>}}.find({ _id: { \$in: [{{<list_of_ids>}}] } })"
```

**Campionamento automatico **

```
import pymongo

# Connect to source and target
source_client = pymongo.MongoClient("{{<source_uri>}}")
target_client = pymongo.MongoClient("{{<target_uri>}}",
                                    tls=True,
                                    tlsCAFile='global-bundle.pem')
source_db = source_client["{{<db_name>}}"]
target_db = target_client["{{<db_name>}}"]

# Compare 100 random documents
for doc in source_db["{{<collection>}}"].aggregate([{"$sample": {"size": 100}}]):
    target_doc = target_db["{{<collection>}}"].find_one({"_id": doc["_id"]})
    if target_doc != doc:
        print(f"Mismatch in _id: {doc['_id']}")
    else:
        print(f"Match: {doc['_id']}")
```

### Validazione tramite strumento DataDiffer
<a name="w2aac15b9c27c15"></a>

Lo [ DataDiffer strumento ](https://github.com/awslabs/amazon-documentdb-tools/tree/master/migration/data-differ) attivo GitHub fornisce un modo affidabile per confrontare i dati tra database di origine e di destinazione.

#### Prerequisiti
<a name="w2aac15b9c27c15b5"></a>

I seguenti prerequisiti devono essere soddisfatti prima di installare lo DataDiffer strumento:
+ Python3.7\+
+ PyMongo libreria
+ Connettività di rete ai cluster Amazon DocumentDB di origine e di destinazione

#### Configurazione e installazione
<a name="w2aac15b9c27c15b7"></a>

**Clona il repository e accedi alla directory DataDiffer **

```
git clone https://github.com/awslabs/amazon-documentdb-tools.git
cd amazon-documentdb-tools/migration/data-differ
```

**Installa le dipendenze richieste **

```
pip install -r requirements.txt
```

#### Convalida dei dati in esecuzione
<a name="w2aac15b9c27c15b9"></a>

**Crea un file di configurazione (ad esempio, config.json) con i dettagli della connessione **

```
{
  "source": {
    "uri": "mongodb://<username>:<password>@<source_endpoint>:27017/?replicaSet=rs0",
    "db": "your_database",
    "collection": "your_collection"
  },
  "target": {
    "uri": "mongodb://<username>:<password>@<target_endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&retryWrites=false",
    "db": "your_database",
    "collection": "your_collection"
  },
  "options": {
    "batch_size": 1000,
    "threads": 4,
    "sample_size": 0,
    "verbose": true
  }
}
```

**Esegui lo strumento DataDiffer **

```
python differ.py --config config.json
```

**Per raccolte di grandi dimensioni, utilizza il campionamento per convalidare un sottoinsieme di dati **

```
python differ.py --config config.json --sample-size 10000
```

**Per convalidare più raccolte, create file di configurazione separati o utilizzate la modalità batch **

```
python differ.py --batch-config batch_config.json
```

#### Interpretazione dei risultati
<a name="w2aac15b9c27c15c11"></a>

Lo strumento produrrà:
+ Documenti totali in origine e destinazione
+ Numero di documenti corrispondenti
+ Numero di documenti mancanti
+ Numero di documenti con differenze
+ Rapporto dettagliato delle differenze (se presenti)

#### Best practice
<a name="w2aac15b9c27c15c13"></a>

Di seguito sono riportate le migliori pratiche per l'utilizzo dello DataDiffer strumento:
+ **Esegui per fasi**: prima convalida il numero di documenti, poi campiona i documenti chiave e infine esegui un confronto completo, se necessario.
+ **Verifica le differenze di schema**: Amazon DocumentDB presenta alcune limitazioni rispetto a MongoDB. Lo strumento evidenzierà tipi o strutture di dati incompatibili.
+ **Convalida durante i periodi di silenzio**: esegui la convalida quando le operazioni di scrittura sono minime per garantire la coerenza.
+ **Monitora l'utilizzo delle risorse**: il processo di confronto può richiedere molte risorse. Regola le dimensioni del batch e il numero di thread di conseguenza.
+ **Convalida degli indici**: dopo la convalida dei dati, assicurati che tutti gli indici richiesti siano stati creati nel cluster Amazon DocumentDB di destinazione.
+ **Risultati della convalida dei documenti**: tieni un registro dei risultati di convalida per ogni raccolta come parte della documentazione di migrazione.