MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Migrazione da MongoDB a DynamoDB, parte 1

AWS Database Migration Service (DMS) è progettato per migrare i database su AWS in modo affidabile, senza tempi di inattività. Inizialmente, DMS supportava solo database relazionali, incluso AWS Redshift. Nell'aprile 2017, DMS ha aggiunto due database NoSQL:MongoDB come database di origine e AWS DynamoDB come database di destinazione. In questo tutorial di due articoli, discuteremo della migrazione di un database MongoDB a DynamoDB su DMS. Uno dei requisiti per l'utilizzo di MongoDB come sorgente DMS è che MongoDB debba essere eseguito come set di repliche, che creeremo utilizzando un'immagine Docker nel primo di questi due articoli.

Questo articolo ha le seguenti sezioni:

  • Impostazione dell'ambiente
  • Creazione di un utente IAM per il servizio di migrazione del database
  • Creazione di una chiave di crittografia
  • Creazione di un database MongoDB
  • Creazione di una tabella DynamoDB
  • Conclusione

Impostazione dell'ambiente

L'unico prerequisito è un account AWS, che può essere creato all'indirizzo https://aws.amazon.com/resources/create-account/. Eseguiremo sia il database di origine che quello di destinazione su AWS. Per il sorgente MongoDB utilizzeremo Docker, per il quale lanceremo un'istanza EC2 con AMI Container Linux by CoreOS (Stable) selezionato da AWS Marketplace, come mostrato nella Figura 1. CoreOS è scelto come piattaforma Linux perché ha Docker preinstallato su di esso.


Figura 1: Selezione dell'AMI CoreOS per avviare un'istanza EC2

Il gruppo di sicurezza utilizzato dall'istanza CoreOS EC2 deve avere regole in entrata/in uscita impostate per accettare tutto il traffico. Ciò implica il traffico di tutti i protocolli su tutte le porte tra tutte le origini e destinazioni (0.0.0.0/0,::/0 ).

Creazione di un utente IAM per il servizio di migrazione del database

In questa sezione creeremo un utente IAM per accedere ai diversi servizi AWS utilizzati nella creazione di una migrazione, inclusi DMS, EC2, DynamoDB, KMS, IAM e CloudWatch. Innanzitutto, dobbiamo creare una politica con le autorizzazioni richieste. Successivamente, creeremo un utente e assegneremo la politica all'utente. Per creare una policy IAM, seleziona Policy nella console IAM e fai clic su Crea policy . In Crea polizza, seleziona Crea la tua polizza . In Revisione politica, specificare un Nome politica (DMS come esempio) e copia e incolla il seguente documento di politica nel campo Documento di politica.

{ "Versione":"17-10-2012", "Dichiarazione":[ { "Effetto":"Consenti", "Azione":"dms:*", "Risorsa":"*" }, { "Effetto":"Consenti", "Azione":"dynamodb:*", "Risorsa":"*" }, { "Effetto":"Consenti", "Azione":"kms:*", "Risorsa":"*" }, { "Effetto":"Consenti", "Azione":"iam:*", "Risorsa":"*" }, { "Effetto":"Consenti", "Azione":"ec2:* ", "Risorsa":"*" }, { "Effetto":"Consenti", "Azione":"cloudwatch:*", "Risorsa":"*" }, { "Effetto":"Consenti", "Azione ":"aws-marketplace:*", "Risorsa":"*" }, { "Effetto":"Consenti", "Azione":"logs:*", "Risorsa":"*" }, { "Effetto ":"Consenti", "Azione":[ "redshift:Describe*", "redshift:ModifyClusterIamRoles" ], "Resource":"*" } ]}

Fai clic su Convalida norma . Se l'output è "Questa norma è valida", fai clic su Crea norma , come mostrato nella Figura 2.


Figura 2: Creazione di una policy IAM

Viene creata una nuova policy IAM, come mostrato nella Figura 3.


Figura 3: Criterio IAM "DMS"

Quindi, crea un utente IAM. Seleziona Utenti e fai clic su Aggiungi utente , come mostrato nella Figura 4.


Figura 4: Aggiungi utente

In Aggiungi utente , specifica un Nome utente , come mostrato nella Figura 5. Per Tipo di accesso , seleziona Accesso programmatico e Accesso alla Console di gestione AWS .


Figura 5: Aggiunta utente

Per Password della console , seleziona Password personalizzata e specificare una password (vedere la Figura 6). Fare clic su Avanti.


Figura 6: Seleziona Tipo di accesso AWS>Avanti

In Imposta autorizzazioni, fai clic su Allega direttamente le norme esistenti , come mostrato nella Figura 7.


Figura 7: Impostazione delle autorizzazioni

Selezionare il criterio DMS creato in precedenza e fare clic su Avanti, come mostrato nella Figura 8.


Figura 8: Selezione della politica DMS

In Revisione, fai clic su Crea utente , come mostrato nella Figura 9.


Figura 9: Rivedi>Crea utente

Viene creato un utente IAM. Copia l'URL mostrato nella Figura 10 per accedere alla Console di gestione AWS come creato dall'utente.


Figura 10: URL utente IAM

Un nuovo utente viene elencato in Utenti (vedi Figura 11).


Figura 11: URL utente IAM

Creazione di una chiave di crittografia

Quindi, crea una chiave di crittografia da utilizzare per la migrazione DMS. Accedi come l'utente IAM creato e utilizza l'URL copiato nella Figura 10. Seleziona IAM servizio nella console di gestione AWS e seleziona Chiavi di crittografia . Fai clic su Crea chiave per avviare una procedura guidata per creare una chiave di crittografia. Utilizzare la procedura guidata per creare una chiave di crittografia (dms ), come mostrato nella Figura 12.


Figura 12: Nuova chiave di crittografia

Creazione di un database MongoDB

In questa sezione creeremo un database MongoDB che migreremo successivamente su DynamoDB. Useremo Docker per eseguire un'istanza MongoDB, per la quale è stata lanciata un'istanza CoreOS. Per accedere a un'istanza CoreOS, ottieni l'indirizzo IP pubblico dell'istanza CoreOS, come mostrato nella Figura 13.


Figura 13: Indirizzo IP pubblico dell'istanza CoreOS

Accedi all'istanza CoreOS tramite SSH utilizzando la coppia di chiavi e l'IP pubblico.

ssh -i "docker.pem" [email protected]

Viene visualizzato il prompt della riga di comando dell'istanza CoreOS, come mostrato nella Figura 14.


Figura 14: Istanza CoreOS

Quindi, esegui il comando seguente per avviare un contenitore Docker per MongoDB utilizzando l'immagine MongoDB "mongo". La porta del contenitore Docker 27017 è esposta sull'host anche come 27017 utilizzando -p opzione per eseguire la finestra mobile . Il nome del contenitore è impostato su "mongo1" e il comando mongod --replSet repl0 viene eseguito nel contenitore creato per avviare un set di repliche MongoDB chiamato "repl0". Come accennato in precedenza, per utilizzare MongoDB come origine DMS è necessario un set di repliche MongoDB e un MongoDB autonomo non è utilizzabile come origine.

docker run -p 27017:27017 mongo mongod --replSet repl0

L'immagine Docker mongo viene estratto e, come indicato dal messaggio "MongoDB in corso" nella Figura 15, MongoDB inizia a iniziare.


Figura 15: Download della finestra mobile Docker Image

Viene avviata un'istanza MongoDB sulla porta 27017 (vedere la figura 16). Un set di repliche non è stato ancora creato e in seguito inizializzeremo un set di repliche.


Figura 16: Istanza Mongo iniziata

Un contenitore Docker viene elencato con docker ps comando, come mostrato nella Figura 17.


Figura 17: Elenco Docker Container per Mongo

Utilizzare il comando seguente per avviare una shell dei comandi per l'interfaccia a riga di comando (CLI) di Mongo.

docker exec -it mongo1 mongo

La shell MongoDB versione 3.4.4 viene collegata all'URL mongodb://127.0.0.1:27017 , come mostrato nella Figura 18.


Figura 18: Collegamento della shell di MongoDB

Viene visualizzato il prompt dei comandi della CLI di Mongo, come mostrato nella Figura 19.


Figura 19: Prompt dei comandi di Mongo Shell

Imposta il database MongoDB da utilizzare come test con il test d'uso comando, come mostrato nella Figura 20.


Figura 20: Impostazione del database come test

Successivamente, inizializzeremo un set di repliche per il quale è necessario definire i membri o le istanze del set di repliche. Ottieni l'IP privato dell'istanza CoreOS EC2 su cui è in esecuzione il contenitore Docker per MongoDB (vedi Figura 21).


Figura 21: IP privato dell'istanza CoreOS

Nella CLI Mongo, specifica la seguente configurazione per la configurazione del set di repliche.

config ={ "_id" :"repl0", "membri" :[ { "_id" :0, "host" :"172.30.2.20:27017" } ]}

Viene impostata la configurazione del set di repliche, come mostrato nella Figura 22.


Figura 22: Impostazione della replica imposta la configurazione

Avvia la configurazione del set di repliche utilizzando la configurazione.

rs.initiate(config)

Il set di repliche viene inizializzato, come mostrato nella Figura 23.


Figura 23: Set di repliche inizializzato

Genera la configurazione del set di repliche.

rs.conf()

Il repl0:PRIMARY il prompt dei comandi indica che il set di repliche è stato inizializzato e che il membro primario del set di repliche è stato impostato per eseguire i comandi dell'interfaccia a riga di comando di Mongo. Il primario è l'unico membro in un set di repliche per le operazioni di scrittura. Crea una raccolta MongoDB chiamata wlslog con db.createCollection() comando.

db.createCollection("wlslog")

Viene creata una raccolta MongoDB, come mostrato nella Figura 24. Una raccolta MongoDB è una raccolta di documenti. I documenti sono in formato BSON (JSON binario).


Figura 24: Creazione raccolta

Esegui le seguenti istruzioni che definiscono i documenti JSON nella CLI di Mongo.

doc1 ={"timestamp":"8 aprile 2014 19:06:16 PDT", "category":"Notice","type":"WebLogicServer", "servername":"AdminServer","code ":"BEA-000365", "msg":"Stato del server modificato in STANDBY"}doc2 ={"timestamp":"8 aprile 2014 19:06:17 PDT", "category":"Notice"," type":"WebLogicServer", "servername":"AdminServer","code":"BEA-000365", "msg":"Stato del server modificato in INIZIO"}doc3 ={"timestamp":"8 aprile 2014 7 :06:18 PDT", "category":"Notice","type":"WebLogicServer", "servername":"AdminServer","code":"BEA-000365", "msg":"Stato del server modificato to ADMIN"}doc4 ={"timestamp":"8 aprile 2014 19:06:19 PDT", "category":"Notice","type":"WebLogicServer", "servername":"AdminServer"," code":"BEA-000365", "msg":"Stato del server modificato in RESUMING"}doc5 ={"timestamp":"8 aprile 2014 19:06:20 PDT", "category":"Avviso", "type":"WebLogicServer", "servername":"AdminServer","code":"BEA-000331", "msg":"WebLogic Admin Server avviato"}doc6 ={"timestamp":"8 aprile 2014 7 :06:21 PDT", "category":"Notice","type":"WebLogicServer", "servername":"AdminServer","code":"BEA-000365", "msg":"Stato del server modificato in RUNNING"}doc7 ={" timestamp":"8 aprile 2014 19:06:22 PDT", "category":"Notice","type":"WebLogicServer", "servername":"AdminServer","code":"BEA-000360" , "msg":"Server avviato in modalità ESECUZIONE"}

Le variabili dei documenti JSON vengono definite, come mostrato nella Figura 25.


Figura 25: Definizione di variabili per documenti JSON

Aggiungi i documenti JSON al wlslog raccolta.

db.wlslog.insert([doc1,doc2,doc3,doc4,doc5,doc6,doc7])

Come indicato dall'output nella Figura 26, sette documenti vengono aggiunti al wlslog raccolta.


Figura 26: Documenti JSON aggiunti alla raccolta

Elenca i documenti aggiunti al wlslog raccolta.

db.wlslog.find()

I sette documenti aggiunti vengono elencati, come mostrato nella Figura 27.


Figura 27: Trovare o ottenere documenti da una raccolta Mongo

Creazione di una tabella DynamoDB

Dopo aver creato una replica MongoDB impostata per l'origine DMS, creeremo quindi una tabella DynamoDB per la destinazione DMS. Accedi come utente IAM (dvohra) creato in precedenza e a cui è stata assegnata una policy. Seleziona il servizio DynamoDB in AW Management Console e seleziona Crea tabella , come mostrato nella Figura 28.


Figura 28: DynamoDB>Crea tabella

Nella tabella Crea DynamoDB, specifica un Nome tabella e specifica la Chiave primaria , che è anche la chiave di partizione, come _id , come mostrato nella Figura 29. Sebbene il nome della tabella sia arbitrario e sia impostato su wlslog , che è la stessa della raccolta MongoDB creata nel set di repliche MongoDB, la chiave primaria deve essere impostata su _id perché a ogni documento MongoDB viene assegnato il campo della chiave primaria _id .


Figura 29: Creazione di una tabella DynamoDB

La tabella DynamoDB wlslog viene creato, come mostrato nella Figura 30.


Figura 30: wlslog tabella DynamoDB creata

Fare clic sulla tabella DynamoDB wlslog nella Dashboard e nei dettagli della tabella, inclusa la chiave primaria _id , vengono visualizzati (vedere la Figura 31).


Figura 31: Dettagli wlslog della tabella DynamoDB

Quando viene creata una migrazione DMS, un ruolo IAM dms-vpc-role con criteri gestiti AmazonDMSVPCManagementRole viene creato automaticamente. Affinché il servizio DMS possa accedere al servizio DynamoDB, è necessario modificare il ruolo di accesso al servizio dms-vpc-role per aggiungere il seguente documento di policy, che fornisce l'accesso a DynamoDB da DMS.

{ "Versione":"17-10-2012", "Dichiarazione":[{ "Effetto":"Consenti", "Azione":[ "dynamodb:*" ], "Risorsa":["*" ] }]}

Utilizzando la stessa procedura utilizzata per creare la policy DMS, creare una policy DynamoDB e specificare il documento della policy precedente nella casella del campo Policy Document, come mostrato nella Figura 32. Fare clic su Crea policy .


Figura 32: Rivedi la politica>Crea politica

Viene creata la policy DynamoDB, come mostrato nella Figura 33.


Figura 33: Criterio IAM DynamoDB creato

Il ruolo dms-vpc a cui deve essere aggiunta la policy DynamoDB è mostrato nella Figura 34.


Figura 34: Ruolo DMS VPC

Fare clic su dms-vpc-ruolo e aggiungi la policy DynamoDB usando Attach Policy. Le policy AmazonDMSVPCManagementRole e DynamoDB devono essere elencate come Policy gestite, come mostrato nella Figura 35.


Figura 35: Criteri di autorizzazione nel ruolo DMS VPC

Conclusione

In questo articolo, abbiamo introdotto l'utilizzo di AWS Database Migration Service (DMS) per la migrazione di MongoDB ad Amazon DynamoDB. Abbiamo iniziato creando una replica MongoDB impostata come origine dati da migrare e abbiamo anche creato una tabella DynamoDB come tabella di destinazione. In un articolo successivo, discuteremo della creazione e dell'esecuzione di una migrazione DMS per migrare i dati.