Usługa migracji bazy danych AWS (DMS) została zaprojektowana do niezawodnej migracji baz danych na AWS, bez przestojów. Początkowo DMS obsługiwał tylko relacyjne bazy danych, w tym AWS Redshift. W kwietniu 2017 DMS dodał dwie bazy danych NoSQL:MongoDB jako bazę źródłową oraz AWS DynamoDB jako bazę docelową. W tym samouczku składającym się z dwóch artykułów omówimy migrację bazy danych MongoDB do DynamoDB na DMS. Jednym z wymagań dotyczących używania MongoDB jako źródła DMS jest to, że MongoDB musi działać jako zestaw replik, który utworzymy za pomocą obrazu Docker w pierwszym z tych dwóch artykułów.
Ten artykuł ma następujące sekcje:
- Ustawianie środowiska
- Tworzenie użytkownika uprawnień do usługi migracji bazy danych
- Tworzenie klucza szyfrującego
- Tworzenie bazy danych MongoDB
- Tworzenie tabeli DynamoDB
- Wniosek
Ustawianie środowiska
Jedynym warunkiem wstępnym jest konto AWS, które można utworzyć pod adresem https://aws.amazon.com/resources/create-account/. Na AWS będziemy uruchamiać zarówno źródłową, jak i docelową bazę danych. Dla źródła MongoDB użyjemy Dockera, dla którego uruchomimy instancję EC2 z AMI Container Linux by CoreOS (Stable) wybranym z AWS Marketplace, jak pokazano na Rysunku 1. Jako platformę Linux wybrano CoreOS, ponieważ posiada Docker preinstalowany na nim.
Rysunek 1: Wybór CoreOS AMI do uruchomienia instancji EC2
Grupa zabezpieczeń używana przez instancję CoreOS EC2 musi mieć ustawione reguły ruchu przychodzącego/wychodzącego, aby akceptować cały ruch. Oznacza to ruch całego protokołu na wszystkich portach między wszystkimi źródłami i miejscami docelowymi (0.0.0.0/0,::/0 ).
Tworzenie użytkownika uprawnień do usługi migracji bazy danych
W tej sekcji utworzymy użytkownika IAM, aby uzyskać dostęp do różnych usług AWS używanych podczas tworzenia migracji, w tym DMS, EC2, DynamoDB, KMS, IAM i CloudWatch. Najpierw musimy stworzyć Politykę z wymaganymi uprawnieniami. Następnie utworzymy użytkownika i przypiszemy politykę do użytkownika. Aby utworzyć zasady uprawnień, wybierz Zasady w konsoli uprawnień i kliknij Utwórz zasady . W sekcji Utwórz zasadę wybierz Utwórz własną zasadę . W Zasadach recenzji określ Nazwę zasady (DMS jako przykład) i skopiuj i wklej następujący dokument polityki w polu Dokument polityki.
{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":"dms:*", "Resource":"*" }, { "Efekt":"Zezwól", "Czynność":"dynamodb:*", "Zasób":"*" }, { "Efekt":"Zezwól", "Czynność":"kms:*", "Zasób":"*" }, { "Efekt":"Zezwól", "Czynność":"iam:*", "Zasób":"*" }, { "Efekt":"Zezwól", "Czynność":"ec2:* ", "Zasób":"*" }, { "Efekt":"Zezwól", "Akcja":"cloudwatch:*", "Zasób":"*" }, { "Efekt":"Zezwól", "Akcja ":"aws-marketplace:*", "Resource":"*" }, { "Effect":"Allow", "Action":"logs:*", "Resource":"*" }, { "Effect ":"Allow", "Action":[ "redshift:Describe*", "redshift:ModifyClusterIamRoles" ], "Resource":"*" } ]}Kliknij Zweryfikuj zasady . Jeśli wynik to „Ta zasada jest prawidłowa”, kliknij Utwórz zasadę , jak pokazano na rysunku 2.
Rysunek 2: Tworzenie zasad uprawnieńZostanie utworzona nowa zasada uprawnień, jak pokazano na rysunku 3.
Rysunek 3: Zasady uprawnień „DMS”Następnie utwórz użytkownika uprawnień. Wybierz Użytkownicy i kliknij Dodaj użytkownika , jak pokazano na rysunku 4.
Rysunek 4: Dodaj użytkownikaW Dodaj użytkownika , określ Nazwę użytkownika , jak pokazano na rysunku 5. Dla Typu dostępu , wybierz Dostęp automatyczny i dostęp do konsoli zarządzania AWS .
Rysunek 5: Dodawanie użytkownikaDla hasła konsoli , wybierz Hasło niestandardowe i określ hasło (patrz Rysunek 6). Kliknij Dalej.
Rysunek 6: Wybierz typ dostępu AWS>DalejW sekcji Ustaw uprawnienia kliknij Załącz bezpośrednio istniejące zasady , jak pokazano na rysunku 7.
Rysunek 7: Ustawianie uprawnieńWybierz utworzoną wcześniej politykę DMS i kliknij Dalej, jak pokazano na rysunku 8.
Rysunek 8: Wybór polityki DMSW Przeglądzie kliknij Utwórz użytkownika , jak pokazano na rysunku 9.
Rysunek 9: Recenzja>Utwórz użytkownikaZostanie utworzony użytkownik uprawnień. Skopiuj adres URL pokazany na rysunku 10, aby zalogować się do konsoli zarządzania AWS jako utworzony użytkownik.
Rysunek 10: URL użytkownika uprawnieńNowy użytkownik zostaje umieszczony na liście Użytkownicy (patrz Rysunek 11).
Rysunek 11: URL użytkownika uprawnieńTworzenie klucza szyfrującego
Następnie utwórz klucz szyfrowania, który będzie używany do migracji DMS. Zaloguj się jako utworzony użytkownik uprawnień i użyj adresu URL skopiowanego na rysunku 10. Wybierz IAM usługę w konsoli zarządzania AWS i wybierz Klucze szyfrowania . Kliknij Utwórz klucz aby uruchomić kreatora tworzenia klucza szyfrowania. Użyj kreatora, aby utworzyć klucz szyfrowania (dms ), jak pokazano na rysunku 12.
Rysunek 12: Nowy klucz szyfrowaniaTworzenie bazy danych MongoDB
W tej sekcji stworzymy bazę danych MongoDB, którą następnie zmigrujemy do DynamoDB. Będziemy używać Dockera do uruchomienia instancji MongoDB, dla której uruchomiono instancję CoreOS. Aby zalogować się do instancji CoreOS, uzyskaj publiczny adres IP instancji CoreOS, jak pokazano na rysunku 13.
Rysunek 13: Publiczny adres IP instancji CoreOSSSH zaloguj się do instancji CoreOS przy użyciu pary kluczy i publicznego adresu IP.
ssh -i "docker.pem" [email protected]Zostanie wyświetlony wiersz poleceń instancji CoreOS, jak pokazano na rysunku 14.
Rysunek 14: Instancja CoreOSNastępnie uruchom następujące polecenie, aby uruchomić kontener Docker dla MongoDB przy użyciu obrazu MongoDB „mongo”. Port kontenera Docker 27017 jest ujawniany na hoście również jako 27017 przy użyciu -p opcja uruchamiania dokera . Nazwa kontenera jest ustawiona na „mongo1”, a polecenie mongod --replSet repl0 jest uruchamiany w kontenerze utworzonym w celu uruchomienia zestawu replik MongoDB o nazwie „repl0”. Jak wspomniano wcześniej, aby użyć MongoDB jako źródła DMS, wymagany jest zestaw replik MongoDB, a samodzielny MongoDB nie może służyć jako źródło.
docker run -p 27017:27017 mongo mongod --replSet repl0Obraz Dockera mongo zostaje ściągnięty i jak wskazano w komunikacie „Uruchamianie MongoDB” na Rysunku 15 MongoDB zaczyna się uruchamiać.
Rysunek 15: Pobieranie okna dokowanego obrazu DockerInstancja MongoDB jest uruchamiana na porcie 27017 (patrz Rysunek 16). Zestaw replik nie został jeszcze utworzony, a następnie zainicjujemy zestaw replik.
Rysunek 16: Uruchomiono instancję MongoKontener Dockera jest wyświetlany z docker ps polecenia, jak pokazano na rysunku 17.
Rysunek 17: Wyświetlanie listy kontenera Docker dla MongoUżyj następującego polecenia, aby uruchomić powłokę poleceń dla interfejsu wiersza poleceń Mongo (CLI).
docker exec -it mongo1 mongoPowłoka MongoDB w wersji 3.4.4 łączy się z adresem URL mongodb://127.0.0.1:27017 , jak pokazano na rysunku 18.
Rysunek 18: Podłączanie powłoki MongoDBZostanie wyświetlony wiersz polecenia Mongo CLI, jak pokazano na rysunku 19.
Rysunek 19: Wiersz polecenia powłoki MongoUstaw bazę danych MongoDB jako test z testem użycia polecenia, jak pokazano na rysunku 20.
Rysunek 20: Ustawianie bazy danych jako testNastępnie zainicjujemy zestaw replik, dla którego musimy zdefiniować elementy lub instancje zestawu replik. Uzyskaj prywatny adres IP instancji CoreOS EC2, na której działa kontener Docker dla MongoDB (patrz Rysunek 21).
Rysunek 21: Prywatny adres IP instancji CoreOSW Mongo CLI określ następującą konfigurację konfiguracji zestawu replik.
config ={ "_id" :"repl0", "members" :[ { "_id" :0, "host" :"172.30.2.20:27017" } ]}Konfiguracja zestawu replik zostanie ustawiona, jak pokazano na rysunku 22.
Rysunek 22: Ustawianie konfiguracji zestawu replikZainicjuj konfigurację zestawu replik za pomocą konfiguracji.
rs.initiate(config)Zestaw replik zostaje zainicjowany, jak pokazano na rysunku 23.
Rysunek 23: Zainicjowano zestaw replikWyprowadź konfigurację zestawu replik.
rs.conf()repl0:PRIMARY wiersz polecenia wskazuje, że zestaw replik został zainicjowany, a podstawowy element zestawu replik został ustawiony do uruchamiania poleceń Mongo CLI. Element podstawowy jest jedynym elementem zestawu replik dla operacji zapisu. Utwórz kolekcję MongoDB o nazwie wlslog z db.createCollection(
) polecenie.db.createCollection("wlslog")Zostaje utworzona kolekcja MongoDB, jak pokazano na rysunku 24. Kolekcja MongoDB to zbiór dokumentów. Dokumenty są w formacie BSON (binarny JSON).
Rysunek 24: Tworzenie kolekcjiUruchom następujące instrukcje, które definiują dokumenty JSON w Mongo CLI.
doc1 ={"timestamp":"8.04.2014 19:06:16 PDT", "category":"Uwaga","type":"WebLogicServer", "servername":"AdminServer","code ":"BEA-000365", "msg":"Zmieniono stan serwera na STANDBY"}doc2 ={"timestamp":"8.04.2014 19:06:17 PDT", "category":"Uwaga"," type":"WebLogicServer", "servername":"AdminServer","code":"BEA-000365", "msg":"Stan serwera zmieniony na STARTING"}doc3 ={"timestamp":"8.04.2014 7 :18:18 PDT", "category":"Uwaga","type":"WebLogicServer", "servername":"AdminServer","code":"BEA-000365", "msg":"Zmieniony stan serwera to ADMIN"}doc4 ={"timestamp":"8.04.2014 19:06:19 PDT", "category":"Uwaga","type":"WebLogicServer", "servername":"AdminServer"," code":"BEA-000365", "msg":"Stan serwera zmieniony na WZNOWIENIE"}doc5 ={"timestamp":"8.04.2014 19:06:20 PDT", "category":"Uwaga", "type":"WebLogicServer", "servername":"AdminServer","code":"BEA-000331", "msg":"Uruchomiony serwer administracyjny WebLogic"}doc6 ={"timestamp":"8.04.2014 7 :06:21 PDT", "category":"Uwaga","type":"WebLogicServer", "servername":"AdminServer","code":"BEA-000365", "msg":"Stan serwera zmieniony na URUCHOMIONY"}doc7 ={" znacznik czasu":"8.04.2014 19:06:22 PDT", "category":"Uwaga","type":"WebLogicServer", "servername":"AdminServer","code":"BEA-000360" , "msg":"Serwer uruchomiony w trybie URUCHOMIENIA"}Zmienne dokumentów JSON zostają zdefiniowane, jak pokazano na rysunku 25.
Rysunek 25: Definiowanie zmiennych dla dokumentów JSONDodaj dokumenty JSON do wlslog kolekcja.
db.wlslog.insert([doc1,doc2,doc3,doc4,doc5,doc6,doc7])Jak pokazano na rysunku 26, siedem dokumentów zostaje dodanych do wlslog kolekcja.
Rysunek 26: Dokumenty JSON dodane do kolekcjiWymień dokumenty dodane do wlslog kolekcja.
db.wlslog.find()Siedem dodanych dokumentów zostanie wyświetlonych na liście, jak pokazano na rysunku 27.
Rysunek 27: Znajdowanie lub pobieranie dokumentów z kolekcji MongoTworzenie tabeli DynamoDB
Po utworzeniu zestawu replik MongoDB dla źródła DMS, następnie stworzymy tabelę DynamoDB dla celu DMS. Zaloguj się jako utworzony wcześniej użytkownik uprawnień (dvohra), któremu przypisano zasadę. Wybierz usługę DynamoDB w konsoli zarządzania AW i wybierz Utwórz tabelę , jak pokazano na rysunku 28.
Rysunek 28: DynamoDB>Utwórz tabelęW tabeli Utwórz DynamoDB określ Nazwę tabeli i określ klucz główny , który jest również kluczem partycji, jako _id , jak pokazano na rysunku 29. Chociaż nazwa tabeli jest dowolna i jest ustawiona na wlslog , który jest taki sam jak kolekcja MongoDB utworzona w zestawie replik MongoDB, klucz podstawowy musi być ustawiony na _id ponieważ każdy dokument MongoDB otrzymuje przypisane pole klucza podstawowego _id .
Rysunek 29: Tworzenie tabeli DynamoDBTabela DynamoDB wlslog zostanie utworzony, jak pokazano na rysunku 30.
Rysunek 30: Tabela DynamoDB wlslog UtworzonoKliknij tabelę DynamoDB wlslog w panelu i szczegółach tabeli, w tym klucz podstawowy _id , są wyświetlane (patrz Rysunek 31).
Rysunek 31: Tabela DynamoDB wlslog SzczegółyPo utworzeniu migracji DMS rola uprawnień dms-vpc-role z zarządzaną zasadą AmazonDMSVPCManagementRole zostanie utworzony automatycznie. Aby usługa DMS mogła uzyskać dostęp do usługi DynamoDB, musimy zmodyfikować rolę dostępu do usługi dms-vpc-role aby dodać następujący dokument polityki, który zapewnia dostęp do DynamoDB z DMS.
{ "Version":"2012-10-17", "Statement":[{ "Effect":"Allow", "Action":[ "dynamodb:*" ], "Resource":["*" ] }]}Korzystając z tej samej procedury, co przy tworzeniu polityki DMS, utwórz DynamoDB polityki i określ poprzedni dokument polityki w polu Dokument polityki, jak pokazano na Rysunku 32. Kliknij Utwórz politykę .
Rysunek 32: Przejrzyj zasady>Utwórz zasadyPolityka DynamoDB zostanie utworzona, jak pokazano na rysunku 33.
Rysunek 33: Utworzono zasady uprawnień DynamoDBRola dms-vpc do którego ma zostać dodana polityka DynamoDB, pokazano na rysunku 34.
Rysunek 34: Rola DMS VPCKliknij rolę dms-vpc i dodaj politykę DynamoDB za pomocą Attach Policy. Zasady AmazonDMSVPCManagementRole i DynamoDB powinny być wymienione jako zasady zarządzane, jak pokazano na rysunku 35.
Rysunek 35: Zasady uprawnień w roli DMS VPCWniosek
W tym artykule przedstawiliśmy użycie usługi migracji bazy danych AWS (DMS) do migracji MongoDB do Amazon DynamoDB. Zaczęliśmy od utworzenia zestawu replik MongoDB jako źródła danych do migracji, a także utworzyliśmy tabelę DynamoDB jako tabelę docelową. W kolejnym artykule omówimy tworzenie i uruchamianie migracji DMS w celu migracji danych.