Der AWS Database Migration Service (DMS) wurde entwickelt, um Datenbanken auf AWS zuverlässig und ohne Ausfallzeiten zu migrieren. Anfänglich unterstützte DMS nur relationale Datenbanken, einschließlich AWS Redshift. Im April 2017 fügte DMS zwei NoSQL-Datenbanken hinzu:MongoDB als Quelldatenbank und AWS DynamoDB als Zieldatenbank. In diesem aus zwei Artikeln bestehenden Tutorial besprechen wir die Migration einer MongoDB-Datenbank zu DynamoDB auf DMS. Eine der Voraussetzungen für die Verwendung von MongoDB als DMS-Quelle ist, dass MongoDB als Replikatsatz ausgeführt werden muss, den wir im ersten dieser beiden Artikel mithilfe eines Docker-Images erstellen werden.
Dieser Artikel hat die folgenden Abschnitte:
- Einstellung der Umgebung
- Erstellen eines IAM-Benutzers für den Datenbankmigrationsdienst
- Erstellen eines Verschlüsselungsschlüssels
- Erstellen einer MongoDB-Datenbank
- Erstellen einer DynamoDB-Tabelle
- Schlussfolgerung
Einstellung der Umgebung
Einzige Voraussetzung ist ein AWS-Konto, das unter https://aws.amazon.com/resources/create-account/ erstellt werden kann. Wir führen sowohl die Quell- als auch die Zieldatenbank auf AWS aus. Für die MongoDB-Quelle verwenden wir Docker, für das wir eine EC2-Instance mit AMI Container Linux by CoreOS (Stable) starten, das aus dem AWS Marketplace ausgewählt wird, wie in Abbildung 1 gezeigt. CoreOS wird als Linux-Plattform ausgewählt, weil es Docker hat darauf vorinstalliert.
Abbildung 1: Auswählen des CoreOS-AMI zum Starten einer EC2-Instance
Die von der CoreOS EC2-Instance verwendete Sicherheitsgruppe muss über eingehende/ausgehende Regeln verfügen, um den gesamten Datenverkehr zu akzeptieren. Dies impliziert Verkehr aller Protokolle auf allen Ports zwischen allen Quellen und Zielen (0.0.0.0/0,::/0 ).
Erstellen eines IAM-Benutzers für den Datenbankmigrationsdienst
In diesem Abschnitt erstellen wir einen IAM-Benutzer für den Zugriff auf die verschiedenen AWS-Services, die beim Erstellen einer Migration verwendet werden, einschließlich DMS, EC2, DynamoDB, KMS, IAM und CloudWatch. Zuerst müssen wir eine Richtlinie mit den erforderlichen Berechtigungen erstellen. Anschließend legen wir einen Benutzer an und weisen ihm die Richtlinie zu. Um eine IAM-Richtlinie zu erstellen, wählen Sie Richtlinien aus in der IAM-Konsole und klicken Sie auf Richtlinie erstellen . Wählen Sie unter Richtlinie erstellen die Option Eigene Richtlinie erstellen aus . Geben Sie unter Überprüfungsrichtlinie einen Richtliniennamen an (DMS als Beispiel) und kopieren Sie das folgende Richtliniendokument und fügen Sie es in das Feld Richtliniendokument ein.
{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":"dms:*", "Resource":"*" }, { "Effekt":"Zulassen", "Aktion":"dynamodb:*", "Ressource":"*" }, { "Effekt":"Zulassen", "Aktion":"kms:*", "Ressource":"*" }, { "Effekt":"Zulassen", "Aktion":"iam:*", "Ressource":"*" }, { "Effekt":"Zulassen", "Aktion":"ec2:* ", "Ressource":"*" }, { "Effekt":"Zulassen", "Aktion":"cloudwatch:*", "Ressource":"*" }, { "Effekt":"Zulassen", "Aktion ":"aws-marketplace:*", "Resource":"*" }, { "Effect":"Allow", "Action":"logs:*", "Resource":"*" }, { "Effect ":"Erlauben", "Aktion":[ "redshift:Describe*", "redshift:ModifyClusterIamRoles" ], "Resource":"*" } ]}Klicken Sie auf Richtlinie validieren . Wenn die Ausgabe „Diese Richtlinie ist gültig“ lautet, klicken Sie auf Richtlinie erstellen , wie in Abbildung 2 gezeigt.
Abbildung 2: Erstellen einer IAM-RichtlinieEine neue IAM-Richtlinie wird erstellt, wie in Abbildung 3 gezeigt.
Abbildung 3: IAM-Richtlinie „DMS“Erstellen Sie als Nächstes einen IAM-Benutzer. Wählen Sie Nutzer aus und klicken Sie auf Nutzer hinzufügen , wie in Abbildung 4 gezeigt.
Abbildung 4: Benutzer hinzufügenUnter Benutzer hinzufügen , geben Sie einen Benutzernamen an , wie in Abbildung 5 gezeigt. Für Zugriffstyp , wählen Sie Programmgesteuerter Zugriff aus und Zugriff auf die AWS Management Console .
Abbildung 5: Benutzer hinzufügenFür Konsolenpasswort , wählen Sie Benutzerdefiniertes Passwort aus und geben Sie ein Passwort an (siehe Abbildung 6). Klicken Sie auf Weiter.
Abbildung 6: Wählen Sie AWS-Zugriffstyp> WeiterKlicken Sie unter Berechtigungen festlegen auf Vorhandene Richtlinien direkt anhängen , wie in Abbildung 7 gezeigt.
Abbildung 7: Berechtigungen festlegenWählen Sie die zuvor erstellte DMS-Richtlinie aus und klicken Sie auf Weiter, wie in Abbildung 8 gezeigt.
Abbildung 8: DMS-Richtlinie auswählenKlicken Sie unter Überprüfung auf Nutzer erstellen , wie in Abbildung 9 gezeigt.
Abbildung 9: Überprüfen Sie>Benutzer erstellenEin IAM-Benutzer wird erstellt. Kopieren Sie die in Abbildung 10 gezeigte URL, um sich als der erstellte Benutzer bei der AWS Management Console anzumelden.
Abbildung 10: IAM-Benutzer-URLEin neuer Benutzer wird unter Benutzer aufgeführt (siehe Abbildung 11).
Abbildung 11: IAM-Benutzer-URLErstellen eines Verschlüsselungsschlüssels
Erstellen Sie als Nächstes einen Verschlüsselungsschlüssel, der für die DMS-Migration verwendet werden soll. Melden Sie sich als der erstellte IAM-Benutzer an und verwenden Sie die in Abbildung 10 kopierte URL. Wählen Sie IAM aus in der AWS-Verwaltungskonsole und wählen Sie Verschlüsselungsschlüssel aus . Klicken Sie auf Schlüssel erstellen , um einen Assistenten zum Erstellen eines Verschlüsselungsschlüssels zu starten. Verwenden Sie den Assistenten, um einen Verschlüsselungsschlüssel zu erstellen (dms ), wie in Abbildung 12 gezeigt.
Abbildung 12: Neuer VerschlüsselungsschlüsselErstellen einer MongoDB-Datenbank
In diesem Abschnitt erstellen wir eine MongoDB-Datenbank, die wir anschließend zu DynamoDB migrieren. Wir werden Docker verwenden, um eine MongoDB-Instanz auszuführen, für die eine CoreOS-Instanz gestartet wurde. Um sich bei einer CoreOS-Instanz anzumelden, rufen Sie die öffentliche IP-Adresse der CoreOS-Instanz ab, wie in Abbildung 13 gezeigt.
Abbildung 13: Öffentliche IP-Adresse der CoreOS-InstanzSSH-Anmeldung bei der CoreOS-Instanz mit dem Schlüsselpaar und der öffentlichen IP.
ssh -i "docker.pem" [email protected]Die Befehlszeileneingabeaufforderung der CoreOS-Instanz wird angezeigt, wie in Abbildung 14 gezeigt.
Abbildung 14: CoreOS-InstanzFühren Sie als Nächstes den folgenden Befehl aus, um einen Docker-Container für MongoDB mit dem MongoDB-Image „mongo“ zu starten. Der Docker-Container-Port 27017 wird auf dem Host auch als 27017 mit dem -p bereitgestellt Option zum docker run . Der Containername wird auf „mongo1“ gesetzt und der Befehl mongod --replSet repl0 wird in dem erstellten Container ausgeführt, um einen MongoDB-Replikatsatz mit dem Namen „repl0“ zu starten. Wie bereits erwähnt, ist zur Verwendung von MongoDB als DMS-Quelle ein MongoDB-Replikatsatz erforderlich, und eine eigenständige MongoDB kann nicht als Quelle verwendet werden.
docker run -p 27017:27017 mongo mongod --replSet repl0Das Docker-Image mongo wird gezogen und wie durch die Meldung „MongoDB Starting“ in Abbildung 15 angezeigt, beginnt MongoDB mit dem Start.
Abbildung 15: Docker-Image-Docker herunterladenEine MongoDB-Instanz wird auf Port 27017 gestartet (siehe Abbildung 16). Es wurde noch kein Replikatsatz erstellt, und als nächstes werden wir einen Replikatsatz initialisieren.
Abbildung 16: Mongo-Instanz gestartetEin Docker-Container wird mit dem docker ps aufgelistet Befehl, wie in Abbildung 17 gezeigt.
Abbildung 17: Docker-Container für Mongo auflistenVerwenden Sie den folgenden Befehl, um eine Befehlsshell für die Mongo-Befehlszeilenschnittstelle (CLI) zu starten.
docker exec -it mongo1 mongoDie MongoDB-Shell-Version 3.4.4 wird unter der URL mongodb://127.0.0.1:27017 verbunden , wie in Abbildung 18 gezeigt.
Abbildung 18: MongoDB-Shell verbindenDie Mongo-CLI-Eingabeaufforderung wird angezeigt, wie in Abbildung 19 gezeigt.
Abbildung 19: Mongo-Shell-EingabeaufforderungLegen Sie die MongoDB-Datenbank fest, die als Test verwendet werden soll mit dem Gebrauchstest Befehl, wie in Abbildung 20 gezeigt.
Abbildung 20: Datenbank als Test setzenAls Nächstes initialisieren wir einen Replikatsatz, für den wir die Mitglieder oder Instanzen des Replikatsatzes definieren müssen. Rufen Sie die private IP-Adresse der CoreOS EC2-Instanz ab, auf der der Docker-Container für MongoDB ausgeführt wird (siehe Abbildung 21).
Abbildung 21: Private IP der CoreOS-InstanzGeben Sie in der Mongo-CLI die folgende Konfiguration für die Konfiguration des Replikatsatzes an.
config ={ "_id" :"repl0", "members" :[ { "_id" :0, "host" :"172.30.2.20:27017" } ]}Die Replica-Set-Konfiguration wird eingestellt, wie in Abbildung 22 gezeigt.
Abbildung 22: Replikatsatz-Konfiguration einstellenInitiieren Sie die Konfiguration des Replikatsatzes mithilfe der Konfiguration.
rs.initiate(config)Der Replikatsatz wird initialisiert, wie in Abbildung 23 gezeigt.
Abbildung 23: Replikatsatz initialisiertGeben Sie die Konfiguration des Replikatsatzes aus.
rs.conf()Die repl0:PRIMARY Die Eingabeaufforderung zeigt an, dass der Replikatsatz initialisiert wurde und das primäre Mitglied des Replikatsatzes so eingestellt wurde, dass er Mongo-CLI-Befehle ausführt. Der Primäre ist das einzige Mitglied in einem Replikatsatz für Schreibvorgänge. Erstellen Sie eine MongoDB-Sammlung namens wlslog mit der db.createCollection(
) Befehl.db.createCollection("wlslog")Eine MongoDB-Sammlung wird erstellt, wie in Abbildung 24 gezeigt. Eine MongoDB-Sammlung ist eine Sammlung von Dokumenten. Die Dokumente liegen im BSON-Format (binäres JSON) vor.
Abbildung 24: Sammlung erstellenFühren Sie die folgenden Anweisungen aus, die JSON-Dokumente in der Mongo-CLI definieren.
doc1 ={"timestamp":"8. April 2014 19:06:16 PDT", "category":"Notice","type":"WebLogicServer", "servername":"AdminServer","code ":"BEA-000365", "msg":"Serverstatus auf STANDBY geändert"}doc2 ={"timestamp":"8. April 2014 19:06:17 PDT", "category":"Notice"," type":"WebLogicServer", "servername":"AdminServer","code":"BEA-000365", "msg":"Serverstatus geändert auf STARTING"}doc3 ={"timestamp":"8. April 2014 7 :06:18 PM PDT", "category":"Notice","type":"WebLogicServer", "servername":"AdminServer","code":"BEA-000365", "msg":"Serverstatus geändert an ADMIN"}doc4 ={"timestamp":"8. April 2014 19:06:19 PDT", "category":"Notice","type":"WebLogicServer", "servername":"AdminServer"," code":"BEA-000365", "msg":"Serverstatus geändert in RESUMING"}doc5 ={"timestamp":"8. April 2014 19:06:20 PDT", "category":"Notice", "type":"WebLogicServer", "servername":"AdminServer","code":"BEA-000331", "msg":"WebLogic Admin Server gestartet"}doc6 ={"timestamp":"8. April 2014 7 :06:21 PDT", "category":"Notice","type":"WebLogicServer", "servername":"AdminServer","code":"BEA-000365", "msg":"Serverstatus auf RUNNING geändert"}doc7 ={" timestamp":"8. April 2014 19:06:22 PDT", "category":"Notice","type":"WebLogicServer", "servername":"AdminServer","code":"BEA-000360" , "msg":"Server im RUNNING-Modus gestartet"}Die Variablen der JSON-Dokumente werden definiert, wie in Abbildung 25 gezeigt.
Abbildung 25: Variablen für JSON-Dokumente definierenFügen Sie die JSON-Dokumente zum wlslog hinzu Sammlung.
db.wlslog.insert([doc1,doc2,doc3,doc4,doc5,doc6,doc7])Wie die Ausgabe in Abbildung 26 zeigt, werden dem wlslog sieben Dokumente hinzugefügt Sammlung.
Abbildung 26: JSON-Dokumente zur Sammlung hinzugefügtListen Sie die zum wlslog hinzugefügten Dokumente auf Sammlung.
db.wlslog.find()Die sieben hinzugefügten Dokumente werden aufgelistet, wie in Abbildung 27 gezeigt.
Abbildung 27: Suchen oder Abrufen von Dokumenten aus einer Mongo-SammlungErstellen einer DynamoDB-Tabelle
Nachdem wir einen MongoDB-Replikatsatz für die DMS-Quelle erstellt haben, erstellen wir als Nächstes eine DynamoDB-Tabelle für das DMS-Ziel. Melden Sie sich als der zuvor erstellte IAM-Benutzer (dvohra) an, dem eine Richtlinie zugewiesen wurde. Wählen Sie den DynamoDB-Dienst in der AW-Verwaltungskonsole und dann Tabelle erstellen aus , wie in Abbildung 28 gezeigt.
Abbildung 28: DynamoDB>Tabelle erstellenGeben Sie in der DynamoDB-Tabelle erstellen einen Tabellennamen an und geben Sie den Primärschlüssel an , der auch der Partitionsschlüssel ist, als _id , wie in Abbildung 29 gezeigt. Obwohl der Tabellenname willkürlich ist und auf wlslog gesetzt ist , die mit der im MongoDB-Replikatsatz erstellten MongoDB-Sammlung identisch ist, muss der Primärschlüssel auf _id festgelegt werden weil jedem MongoDB-Dokument das Primärschlüsselfeld _id zugewiesen wird .
Abbildung 29: Erstellen einer DynamoDB-TabelleDie DynamoDB-Tabelle wlslog wird erstellt, wie in Abbildung 30 gezeigt.
Abbildung 30: DynamoDB-Tabelle wlslog ErstelltKlicken Sie auf die DynamoDB-Tabelle wlslog im Dashboard und den Tabellendetails, einschließlich des Primärschlüssels _id , werden angezeigt (siehe Abbildung 31).
Abbildung 31: Wlslog-Details der DynamoDB-TabelleWenn eine DMS-Migration erstellt wird, eine IAM-Rolle dms-vpc-role mit verwalteter Richtlinie AmazonDMSVPCManagementRole wird automatisch erstellt. Damit der DMS-Dienst auf den DynamoDB-Dienst zugreifen kann, müssen wir die Dienstzugriffsrolle dms-vpc-role ändern um das folgende Richtliniendokument hinzuzufügen, das den Zugriff auf DynamoDB von DMS ermöglicht.
{ "Version":"2012-10-17", "Statement":[{ "Effect":"Allow", "Action":[ "dynamodb:*" ], "Resource":["*" ] }]}Erstellen Sie auf dieselbe Weise wie beim Erstellen der DMS-Richtlinie eine DynamoDB-Richtlinie und geben Sie das vorangehende Richtliniendokument im Feld „Richtliniendokument“ an, wie in Abbildung 32 gezeigt. Klicken Sie auf Richtlinie erstellen .
Abbildung 32: Überprüfen Sie Richtlinie>Richtlinie erstellenDie DynamoDB-Richtlinie wird erstellt, wie in Abbildung 33 gezeigt.
Abbildung 33: IAM-Richtlinie DynamoDB erstelltDie dms-vpc-Rolle zu der die DynamoDB-Richtlinie hinzugefügt werden soll, ist in Abbildung 34 dargestellt.
Abbildung 34: DMS-VPC-RolleKlicken Sie auf dms-vpc-role und fügen Sie die DynamoDB-Richtlinie mit Attach Policy hinzu. Die AmazonDMSVPCManagementRole- und DynamoDB-Richtlinien sollten als verwaltete Richtlinien aufgelistet werden, wie in Abbildung 35 gezeigt.
Abbildung 35: Berechtigungsrichtlinien in der DMS-VPC-RolleSchlussfolgerung
In diesem Artikel haben wir die Verwendung von AWS Database Migration Service (DMS) für die Migration von MongoDB zu Amazon DynamoDB vorgestellt. Wir begannen mit der Erstellung eines MongoDB-Replikatsatzes als zu migrierende Datenquelle und erstellten außerdem eine DynamoDB-Tabelle als Zieltabelle. In einem späteren Artikel werden wir das Erstellen und Ausführen einer DMS-Migration zum Migrieren von Daten besprechen.