AWS Database Migration Service (DMS) er designet til at migrere databaser på AWS pålideligt uden nedetid. Oprindeligt understøttede DMS kun relationelle databaser, inklusive AWS Redshift. I april 2017 tilføjede DMS to NoSQL-databaser:MongoDB som kildedatabase og AWS DynamoDB som måldatabase. I denne tutorial med to artikler skal vi diskutere migrering af en MongoDB-database til DynamoDB på DMS. Et af kravene for at bruge MongoDB som en DMS-kilde er, at MongoDB skal køre som et replikasæt, som vi skal oprette ved hjælp af et Docker-billede i den første af disse to artikler.
Denne artikel har følgende sektioner:
- Indstilling af miljøet
- Oprettelse af en IAM-bruger til databasemigreringstjeneste
- Oprettelse af en krypteringsnøgle
- Oprettelse af en MongoDB-database
- Oprettelse af en DynamoDB-tabel
- Konklusion
Indstilling af miljøet
Den eneste forudsætning er en AWS-konto, som kan oprettes på https://aws.amazon.com/resources/create-account/. Vi kører både kilde- og måldatabaserne på AWS. Til MongoDB-kilden skal vi bruge Docker, hvortil vi vil lancere en EC2-instans med AMI Container Linux af CoreOS (Stable) valgt fra AWS Marketplace, som vist i figur 1. CoreOS er valgt som Linux-platformen, fordi den har Docker forudinstalleret på den.
Figur 1: Valg af CoreOS AMI for at starte en EC2-instans
Sikkerhedsgruppen, der bruges af CoreOS EC2-instansen, skal have indgående/udgående regler indstillet til at acceptere al trafik. Dette indebærer trafik af alle protokoller på alle porte mellem alle kilder og destinationer (0.0.0.0/0,::/0 ).
Oprettelse af en IAM-bruger til databasemigreringstjeneste
I dette afsnit skal vi oprette en IAM-bruger for at få adgang til de forskellige AWS-tjenester, der bruges til at oprette en migrering, inklusive DMS, EC2, DynamoDB, KMS, IAM og CloudWatch. Først skal vi oprette en politik med de nødvendige tilladelser. Efterfølgende skal vi oprette en bruger og tildele politikken til brugeren. For at oprette en IAM-politik skal du vælge Politik i IAM-konsollen, og klik på Opret politik . I Opret politik skal du vælge Opret din egen politik . Angiv et politiknavn (DMS i Review Policy som et eksempel) og kopier og indsæt følgende politikdokument i feltet Politikdokument.
{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":"dms:*", "Resource":"*" }, { "Effect":"Tillad", "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" ":"Tillad", "Action":[ "redshift:Beskriv*", "redshift:ModifyClusterIamRoles" ], "Resource":"*" } ]}Klik på Valider politik . Hvis outputtet er "Denne politik er gyldig", skal du klikke på Opret politik , som vist i figur 2.
Figur 2: Oprettelse af en IAM-politikEn ny IAM-politik bliver oprettet, som vist i figur 3.
Figur 3: IAM-politik "DMS"Opret derefter en IAM-bruger. Vælg Brugere og klik på Tilføj bruger , som vist i figur 4.
Figur 4: Tilføj brugerI Tilføj bruger , angiv et Brugernavn , som vist i figur 5. For Adgangstype , vælg Programmatisk adgang og Adgang til AWS Management Console .
Figur 5: Tilføjelse af brugerTil Konsoladgangskode , vælg Brugerdefineret adgangskode og angiv en adgangskode (se figur 6). Klik på Næste.
Figur 6: Vælg AWS-adgangstype>NæsteI Angiv tilladelser skal du klikke på Vedhæft eksisterende politikker direkte , som vist i figur 7.
Figur 7: Indstilling af tilladelserVælg den tidligere oprettede DMS-politik, og klik på Næste, som vist i figur 8.
Figur 8: Valg af DMS-politikI Gennemgang skal du klikke på Opret bruger , som vist i figur 9.
Figur 9: Gennemgå>Opret brugerEn IAM-bruger oprettes. Kopiér URL'en vist i figur 10 for at logge ind på AWS Management Console som brugeren oprettede.
Figur 10: IAM-bruger-URLEn ny bruger bliver opført i Brugere (se figur 11).
Figur 11: IAM-bruger-URLOprettelse af en krypteringsnøgle
Derefter skal du oprette en krypteringsnøgle, der skal bruges til DMS-migreringen. Log ind som den oprettede IAM-bruger, og brug URL'en kopieret i figur 10. Vælg IAM tjeneste i AWS-administrationskonsollen, og vælg Krypteringsnøgler . Klik på Opret nøgle for at starte en guide til at oprette en krypteringsnøgle. Brug guiden til at oprette en krypteringsnøgle (dms ), som vist i figur 12.
Figur 12: Ny krypteringsnøgleOprettelse af en MongoDB-database
I dette afsnit skal vi oprette en MongoDB-database, som vi efterfølgende migrerer til DynamoDB. Vi skal bruge Docker til at køre en MongoDB-instans, for hvilken en CoreOS-instans blev lanceret. For at logge ind på en CoreOS-instans skal du få CoreOS-instansens offentlige IP-adresse, som vist i figur 13.
Figur 13: Offentlig IP-adresse for CoreOS-forekomstSSH log ind på CoreOS-instansen ved hjælp af nøgleparret og den offentlige IP.
ssh -i "docker.pem" [email protected]CoreOS-instansens kommandolinjeprompt vises, som vist i figur 14.
Figur 14: CoreOS-forekomstKør derefter følgende kommando for at starte en Docker-container til MongoDB ved hjælp af MongoDB-billedet "mongo". Docker-containerporten 27017 er eksponeret på værten også som 27017 ved hjælp af -p mulighed for at docker run . Beholdernavnet er sat til "mongo1" og kommandoen mongod --replSet repl0 køres i den container, der er oprettet for at starte et MongoDB replikasæt kaldet "repl0". Som nævnt før, for at bruge MongoDB som en DMS-kilde kræves et MongoDB-repliksæt, og en selvstændig MongoDB kan ikke bruges som kilde.
docker run -p 27017:27017 mongo mongod --replSet repl0Docker-billedet mongo bliver trukket og som angivet af meddelelsen "MongoDB starter" i figur 15 begynder MongoDB at komme i gang.
Figur 15: Downloader Docker Image dockerEn MongoDB-instans starter på port 27017 (se figur 16). Et replikasæt er endnu ikke oprettet, og vi initialiserer derefter et replikasæt.
Figur 16: Mongo-forekomst startetEn Docker-beholder bliver opført med docker-ps'en kommando, som vist i figur 17.
Figur 17: Liste over Docker Container for MongoBrug følgende kommando til at starte en kommandoskal til Mongo-kommandolinjegrænsefladen (CLI).
docker exec -it mongo1 mongoMongoDB shell version 3.4.4 bliver forbundet til på URL mongodb://127.0.0.1:27017 , som vist i figur 18.
Figur 18: Forbinder MongoDB ShellMongo CLI-kommandoprompten vises, som vist i figur 19.
Figur 19: Mongo Shell kommandopromptIndstil MongoDB-databasen til brug som test med brugstesten kommando, som vist i figur 20.
Figur 20: Indstilling af database som testDernæst skal vi initialisere et replikasæt, for hvilket vi skal definere replikasættets medlemmer eller instanser. Få den private IP for CoreOS EC2-instansen, som Docker-containeren til MongoDB kører på (se figur 21).
Figur 21: Privat IP af CoreOS-instansI Mongo CLI skal du angive følgende konfiguration for replikasættets konfiguration.
config ={ "_id" :"repl0", "members" :[ { "_id" :0, "host" :"172.30.2.20:27017" } ]}Replikasættets konfiguration indstilles, som vist i figur 22.
Figur 22: Indstilling af Replica set ConfigurationStart replikasættets konfiguration ved hjælp af konfigurationen.
rs.initiate(config)Replikasættet initialiseres, som vist i figur 23.
Figur 23: Replikasæt initialiseretUdskriv replikasætkonfigurationen.
rs.conf()repl0:PRIMARY kommandoprompt angiver, at replikasættet er blevet initialiseret, og replikasættet Primært medlem er blevet indstillet til at køre Mongo CLI-kommandoer. Den primære er det eneste medlem i et replikasæt til skriveoperationer. Opret en MongoDB-samling kaldet wlslog med db.createCollection(
) kommando.db.createCollection("wlslog")En MongoDB-samling oprettes, som vist i figur 24. En MongoDB-samling er en samling af dokumenter. Dokumenterne er i BSON-format (binært JSON).
Figur 24: Oprettelse af samlingKør følgende sætninger, der definerer JSON-dokumenter i Mongo CLI.
doc1 ={"timestamp":"8. april 2014 19:06:16 PDT", "category":"Bemærkning","type":"WebLogicServer", "servernavn":"AdminServer","kode ":"BEA-000365", "msg":"Servertilstand ændret til STANDBY"}doc2 ={"timestamp":"8. apr. 2014 19:06:17 PDT", "category":"Bemærk"," type":"WebLogicServer", "servername":"AdminServer","code":"BEA-000365", "msg":"Servertilstand ændret til STARTING"}doc3 ={"tidsstempel":"8. apr. 2014 7 :06:18 PM PDT", "category":"Bemærkning","type":"WebLogicServer", "servername":"AdminServer","code":"BEA-000365", "msg":"Servertilstand ændret til ADMIN"}doc4 ={"tidsstempel":"8. april 2014 19:06:19 PDT", "category":"Bemærkning","type":"WebLogicServer", "servernavn":"AdminServer"," code":"BEA-000365", "msg":"Servertilstand ændret til GENOPTAGELSE"}doc5 ={"tidsstempel":"8. apr. 2014 19:06:20 PDT", "kategori":"Bemærk", "type":"WebLogicServer", "servername":"AdminServer","code":"BEA-000331", "msg":"Startet WebLogic Admin Server"}doc6 ={"tidsstempel":"8. april 2014 7 :06:21 PM PDT", "category":"Bemærkning","type":"WebLogicServer", "servername":"AdminServer","code":"BEA-000365", "msg":"Servertilstand ændret til RUNNING"}doc7 ={" timestamp":"8. april 2014 19:06:22 PDT", "category":"Bemærkning","type":"WebLogicServer", "servernavn":"AdminServer","kode":"BEA-000360" , "msg":"Server startede i RUNNING-tilstand"}JSON-dokumenternes variabler bliver defineret, som vist i figur 25.
Figur 25: Definering af variabler for JSON-dokumenterTilføj JSON-dokumenterne til wlslog samling.
db.wlslog.insert([doc1,doc2,doc3,doc4,doc5,doc6,doc7])Som angivet af outputtet i figur 26, tilføjes syv dokumenter til wlslog samling.
Figur 26: JSON-dokumenter føjet til samlingListe over de dokumenter, der er tilføjet til wlslog samling.
db.wlslog.find()De syv tilføjede dokumenter vises som vist i figur 27.
Figur 27: Find eller hent dokumenter fra en Mongo-samlingOprettelse af en DynamoDB-tabel
Efter at have oprettet et MongoDB-repliksæt til DMS-kilde, skal vi derefter oprette en DynamoDB-tabel til DMS-målet. Log ind som den IAM-bruger (dvohra), der blev oprettet tidligere og tildelt en politik. Vælg DynamoDB-tjenesten i AW Management Console, og vælg Opret tabel , som vist i figur 28.
Figur 28: DynamoDB>Opret tabelAngiv et Tabelnavn i tabellen Create DynamoDB og angiv Primær nøgle , som også er partitionsnøglen, som _id , som vist i figur 29. Selvom tabelnavnet er vilkårligt og er sat til wlslog , som er den samme som MongoDB-samlingen oprettet i MongoDB replikasæt, skal den primære nøgle indstilles til _id fordi hvert MongoDB-dokument får tildelt det primære nøglefelt _id .
Figur 29: Oprettelse af en DynamoDB-tabelDynamoDB-tabellen wlslog bliver oprettet, som vist i figur 30.
Figur 30: DynamoDB tabel wlslog OprettetKlik på DynamoDB-tabellen wlslog i Dashboardet og tabeldetaljerne, inklusive den primære nøgle _id , vises (se figur 31).
Figur 31: DynamoDB tabel wlslog DetailNår en DMS-migrering oprettes, vil en IAM-rolle dms-vpc-rolle med administreret politik AmazonDMSVPCManagementRole oprettes automatisk. For at DMS-tjenesten kan få adgang til DynamoDB-tjenesten, skal vi ændre tjenesteadgangsrollen dms-vpc-role for at tilføje følgende politikdokument, som giver adgang til DynamoDB fra DMS.
{ "Version":"2012-10-17", "Statement":[{ "Effect":"Tillad", "Action":[ "dynamodb:*" ], "Resource":["*" ] }]}Brug den samme procedure, der blev brugt til at oprette DMS-politikken, opret en politik DynamoDB og angiv det foregående politikdokument i feltboksen Politikdokument, som vist i figur 32. Klik på Opret politik .
Figur 32: Gennemgå politik>Opret politikDynamoDB-politikken bliver oprettet, som vist i figur 33.
Figur 33: IAM-politik DynamoDB oprettetdms-vpc-rollen hvortil DynamoDB-politikken skal tilføjes, er vist i figur 34.
Figur 34: DMS VPC-rolleKlik på dms-vpc-rolle og tilføj DynamoDB-politikken ved hjælp af Attach Policy. AmazonDMSVPCManagementRole- og DynamoDB-politikkerne skal være opført som Managed Policies, som vist i figur 35.
Figur 35: Tilladelsespolitikker i DMS VPC-rolleKonklusion
I denne artikel introducerede vi brugen af AWS Database Migration Service (DMS) til at migrere MongoDB til Amazon DynamoDB. Vi startede med at oprette et MongoDB-repliksæt som datakilden til at migrere og oprettede også en DynamoDB-tabel som destinationstabel. I en efterfølgende artikel vil vi diskutere oprettelse og drift af en DMS-migrering for at migrere data.