sql >> Databasteknik >  >> NoSQL >> MongoDB

Migrera MongoDB till DynamoDB, del 1

AWS Database Migration Service (DMS) är utformad för att migrera databaser på AWS på ett tillförlitligt sätt, utan driftstopp. Inledningsvis stödde DMS endast relationsdatabaser, inklusive AWS Redshift. I april 2017 lade DMS till två NoSQL-databaser:MongoDB som källdatabas och AWS DynamoDB som måldatabas. I den här handledningen med två artiklar kommer vi att diskutera migrering av en MongoDB-databas till DynamoDB på DMS. Ett av kraven för att använda MongoDB som en DMS-källa är att MongoDB måste köras som en replikuppsättning, som vi ska skapa med hjälp av en Docker-avbildning i den första av dessa två artiklar.

Den här artikeln har följande avsnitt:

  • Ställa in miljön
  • Skapa en IAM-användare för databasmigreringstjänst
  • Skapa en krypteringsnyckel
  • Skapa en MongoDB-databas
  • Skapa en DynamoDB-tabell
  • Slutsats

Ställa in miljön

Den enda förutsättningen är ett AWS-konto, som kan skapas på https://aws.amazon.com/resources/create-account/. Vi ska köra både käll- och måldatabaserna på AWS. För MongoDB-källan ska vi använda Docker, för vilken vi kommer att lansera en EC2-instans med AMI Container Linux av CoreOS (Stable) vald från AWS Marketplace, som visas i figur 1. CoreOS väljs som Linux-plattform eftersom den har Docker förinstallerad på den.


Figur 1: Väljer CoreOS AMI för att starta en EC2-instans

Säkerhetsgruppen som används av CoreOS EC2-instansen måste ha inkommande/utgående regler inställda för att acceptera all trafik. Detta innebär trafik av alla protokoll på alla portar mellan alla källor och destinationer (0.0.0.0/0,::/0 ).

Skapa en IAM-användare för databasmigreringstjänst

I det här avsnittet ska vi skapa en IAM-användare för att komma åt de olika AWS-tjänsterna som används för att skapa en migrering, inklusive DMS, EC2, DynamoDB, KMS, IAM och CloudWatch. Först måste vi skapa en policy med nödvändiga behörigheter. Därefter ska vi skapa en användare och tilldela policyn till användaren. För att skapa en IAM-policy, välj Policyer i IAM-konsolen och klicka på Skapa policy . I Skapa policy väljer du Skapa din egen policy . I Granskningspolicy anger du ett policynamn (DMS som ett exempel) och kopiera och klistra in följande policydokument i fältet Policydokument.

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":"dms:*", "Resource":"*" }, { "Effect":"Allow", "Action":"dynamodb:*", "Resource":"*" }, { "Effect":"Allow", "Action":"kms:*", "Resource":"*" }, { "Effect":"Allow", "Action":"iam:*", "Resource":"*" }, { "Effect":"Allow", "Action":"ec2:* ", "Resource":"*" }, { "Effect":"Allow", "Action":"cloudwatch:*", "Resource":"*" }, { "Effect":"Allow", "Action" ":"aws-marketplace:*", "Resource":"*" }, { "Effect":"Allow", "Action":"logs:*", "Resource":"*" }, { "Effect" ":"Allow", "Action":[ "redshift:Describe*", "redshift:ModifyClusterIamRoles" ], "Resource":"*" } ]}

Klicka på Validera policy . Om resultatet är "Denna policy är giltig" klickar du på Skapa policy , som visas i figur 2.


Figur 2: Skapa en IAM-policy

En ny IAM-policy skapas, som visas i figur 3.


Figur 3: IAM-policy "DMS"

Skapa sedan en IAM-användare. Välj Användare och klicka på Lägg till användare , som visas i figur 4.


Figur 4: Lägg till användare

I Lägg till användare , ange ett Användarnamn , som visas i figur 5. För Åtkomsttyp , välj Programmatisk åtkomst och åtkomst till AWS Management Console .


Figur 5: Lägger till användare

För Konsollösenord , välj Anpassat lösenord och ange ett lösenord (se figur 6). Klicka på Nästa.


Figur 6: Välj AWS Access Type>Nästa

I Ange behörigheter klickar du på Bifoga befintliga policyer direkt , som visas i figur 7.


Figur 7: Ställa in behörigheter

Välj den DMS-policy som skapats tidigare och klicka på Nästa, som visas i figur 8.


Figur 8: Väljer DMS-policy

I Granska klickar du på Skapa användare , som visas i figur 9.


Figur 9: Granska>Skapa användare

En IAM-användare skapas. Kopiera URL:en som visas i figur 10 för att logga in på AWS Management Console som användaren skapade.


Figur 10: IAM-användaradress

En ny användare listas i Användare (se figur 11).


Figur 11: IAM-användaradress

Skapa en krypteringsnyckel

Skapa sedan en krypteringsnyckel som ska användas för DMS-migreringen. Logga in som IAM-användaren skapade och använd URL:en som kopierades i figur 10. Välj IAM tjänst i AWS-hanteringskonsolen och välj Krypteringsnycklar . Klicka på Skapa nyckel för att starta en guide för att skapa en krypteringsnyckel. Använd guiden för att skapa en krypteringsnyckel (dms ), som visas i figur 12.


Figur 12: Ny krypteringsnyckel

Skapa en MongoDB-databas

I det här avsnittet ska vi skapa en MongoDB-databas som vi ska migrera till DynamoDB. Vi kommer att använda Docker för att köra en MongoDB-instans, för vilken en CoreOS-instans lanserades. För att logga in på en CoreOS-instans skaffar du CoreOS-instansens allmänna IP-adress, som visas i figur 13.


Figur 13: Offentlig IP-adress för CoreOS-instansen

SSH logga in på CoreOS-instansen med nyckelparet och den offentliga IP-adressen.

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

CoreOS-instansens kommandoradsprompt visas, som visas i figur 14.


Figur 14: CoreOS-instans

Kör sedan följande kommando för att starta en Docker-behållare för MongoDB med MongoDB-avbildningen "mongo". Docker containerport 27017 är exponerad på värden också som 27017 med -p alternativet för att dockerkörning . Behållarnamnet är satt till "mongo1" och kommandot mongod --replSet repl0 körs i behållaren som skapats för att starta en MongoDB-replikuppsättning som heter "repl0". Som nämnts tidigare, för att använda MongoDB som en DMS-källa krävs en MongoDB-replikuppsättning och en fristående MongoDB är inte användbar som en källa.

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

Docker-bilden mongo dras och som indikeras av meddelandet "MongoDB startar" i figur 15 börjar MongoDB att starta.


Figur 15: Laddar ner Docker Image docker

En MongoDB-instans startar på port 27017 (se figur 16). En replikuppsättning har ännu inte skapats och vi kommer att initiera en replikuppsättning härnäst.


Figur 16: Mongo-instansen startade

En Docker-behållare listas med docker-ps kommando, som visas i figur 17.


Figur 17: Lista Docker Container for Mongo

Använd följande kommando för att starta ett kommandoskal för Mongo kommandoradsgränssnitt (CLI).

docker exec -it mongo1 mongo

MongoDB-skalversion 3.4.4 ansluts till URL:en mongodb://127.0.0.1:27017 , som visas i figur 18.


Figur 18: Ansluter MongoDB Shell

Mongo CLI-kommandotolken visas, som visas i figur 19.


Figur 19: Mongo Shell Kommandotolk

Ställ in MongoDB-databasen att använda som test med användningstestet kommando, som visas i figur 20.


Figur 20: Ställa in databas som test

Därefter ska vi initiera en replikuppsättning för vilken vi behöver definiera replikuppsättningens medlemmar eller instanser. Skaffa den privata IP-adressen för CoreOS EC2-instansen som Docker-behållaren för MongoDB körs på (se figur 21).


Figur 21: Privat IP för CoreOS-instans

I Mongo CLI, ange följande konfiguration för replikuppsättningskonfigurationen.

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

Konfigurationen av replikuppsättningen ställs in, som visas i figur 22.


Figur 22: Ställa in Replica set Configuration

Initiera replikuppsättningskonfigurationen med hjälp av konfigurationen.

rs.initiate(config)

Replikuppsättningen initieras, som visas i figur 23.


Figur 23: Replikuppsättning initierad

Skriv ut replikuppsättningens konfiguration.

rs.conf()

repl0:PRIMARY kommandotolken indikerar att replikuppsättningen har initierats och replikuppsättningens primära medlem har ställts in för att köra Mongo CLI-kommandon. Primären är den enda medlemmen i en replikuppsättning för skrivoperationer. Skapa en MongoDB-samling som heter wlslog med db.createCollection() kommando.

db.createCollection("wlslog")

En MongoDB-samling skapas, som visas i figur 24. En MongoDB-samling är en samling dokument. Dokumenten är i BSON-format (binärt JSON).


Figur 24: Skapar samling

Kör följande satser som definierar JSON-dokument i Mongo CLI.

doc1 ={"timestamp":"8 apr 2014 19:06:16 PDT", "category":"Meddelande","type":"WebLogicServer", "servername":"AdminServer","kod ":"BEA-000365", "msg":"Servertillstånd ändrat till STANDBY"}doc2 ={"timestamp":"8 apr 2014 19:06:17 PDT", "category":"Meddelande"," type":"WebLogicServer", "servername":"AdminServer","code":"BEA-000365", "msg":"Servertillstånd ändrat till STARTING"}doc3 ={"tidsstämpel":"8 apr 2014 7 :06:18 PM PDT", "category":"Meddelande","type":"WebLogicServer", "servername":"AdminServer","code":"BEA-000365", "msg":"Servertillstånd har ändrats till ADMIN"}doc4 ={"tidsstämpel":"8 april 2014 19:06:19 PDT", "category":"Meddelande","type":"WebLogicServer", "servernamn":"AdminServer"," code":"BEA-000365", "msg":"Servertillstånd ändrat till ÅTERTAGANDE"}doc5 ={"tidsstämpel":"8 apr 2014 19:06:20 PDT", "category":"Meddelande", "type":"WebLogicServer", "servername":"AdminServer","code":"BEA-000331", "msg":"Startade WebLogic Admin Server"}doc6 ={"tidsstämpel":"8 april 2014 7 :06:21 PM PDT", "category":"Meddelande","type":"WebLogicServer", "servername":"AdminServer","code":"BEA-000365", "msg":"Servertillstånd ändrat till RUNNING"}doc7 ={" timestamp":"8 apr 2014 19:06:22 PDT", "category":"Meddelande","type":"WebLogicServer", "servername":"AdminServer","code":"BEA-000360" , "msg":"Server startade i RUNNING-läge"}

JSON-dokumentens variabler definieras, som visas i figur 25.


Figur 25: Definiera variabler för JSON-dokument

Lägg till JSON-dokumenten i wlslog samling.

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

Som framgår av utdata i figur 26 läggs sju dokument till i wlslog samling.


Figur 26: JSON-dokument har lagts till i samlingen

Lista de dokument som lagts till i wlslog samling.

db.wlslog.find()

De sju dokument som läggs till listas, som visas i figur 27.


Figur 27: Hitta eller hämta dokument från en Mongo-samling

Skapa en DynamoDB-tabell

Efter att ha skapat en MongoDB-replikuppsättning för DMS-källa, ska vi sedan skapa en DynamoDB-tabell för DMS-målet. Logga in som IAM-användaren (dvohra) som skapats tidigare och tilldelats en policy. Välj DynamoDB-tjänsten i AW Management Console och välj Skapa tabell , som visas i figur 28.


Figur 28: DynamoDB>Skapa tabell

Ange ett tabellnamn i tabellen Skapa DynamoDB och ange Primärnyckeln , som också är partitionsnyckeln, som _id , som visas i figur 29. Även om tabellnamnet är godtyckligt och är satt till wlslog , vilket är samma som MongoDB-samlingen som skapats i MongoDB-replikuppsättningen, måste den primära nyckeln ställas in på _id eftersom varje MongoDB-dokument tilldelas det primära nyckelfältet _id .


Figur 29: Skapa en DynamoDB-tabell

DynamoDB-tabellen wlslog skapas, som visas i figur 30.


Figur 30: DynamoDB-tabell wlslog Skapad

Klicka på DynamoDB-tabellen wlslog i instrumentpanelen och tabelldetaljerna, inklusive primärnyckeln _id , visas (se figur 31).


Figur 31: DynamoDB tabell wlslog Detalj

När en DMS-migrering skapas, en IAM-roll dms-vpc-role med hanterad policy AmazonDMSVPCManagementRole skapas automatiskt. För att DMS-tjänsten ska få åtkomst till DynamoDB-tjänsten måste vi ändra tjänståtkomstrollen dms-vpc-role för att lägga till följande policydokument, som ger åtkomst till DynamoDB från DMS.

{ "Version":"2012-10-17", "Statement":[{ "Effect":"Tillåt", "Action":[ "dynamodb:*" ], "Resurs":["*" ] }]}

Använd samma procedur som används för att skapa DMS-policyn, skapa en policy DynamoDB och ange föregående policydokument i fältrutan Policydokument, som visas i figur 32. Klicka på Skapa policy .


Figur 32: Granska policy>Skapa policy

DynamoDB-policyn skapas, som visas i figur 33.


Figur 33: IAM-policy DynamoDB skapad

dms-vpc-rollen till vilken DynamoDB-policyn ska läggas till visas i figur 34.


Figur 34: DMS VPC-roll

Klicka på dms-vpc-role och lägg till DynamoDB-policyn med hjälp av Attach Policy. AmazonDMSVPCManagementRole och DynamoDB-policyerna bör listas som Managed Policies, som visas i figur 35.


Figur 35: Behörighetspolicyer i DMS VPC-roll

Slutsats

I den här artikeln introducerade vi användningen av AWS Database Migration Service (DMS) för att migrera MongoDB till Amazon DynamoDB. Vi började med att skapa en MongoDB-replikuppsättning som datakälla för att migrera och skapade även en DynamoDB-tabell som måltabell. I en efterföljande artikel kommer vi att diskutera att skapa och köra en DMS-migrering för att migrera data.


  1. MongoDB, MapReduce och sortering

  2. Få $elemMatch (projektion) att returnera alla objekt som matchar kriterierna

  3. Redis utgångsdatum för tangentutrymmesavisering aktiveras inte

  4. Node.js Kue hur man startar om misslyckade jobb