MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Migrando o MongoDB para o DynamoDB, parte 1


O AWS Database Migration Service (DMS) foi projetado para migrar bancos de dados na AWS de forma confiável, sem tempo de inatividade. Inicialmente, o DMS era compatível apenas com bancos de dados relacionais, incluindo AWS Redshift. Em abril de 2017, a DMS adicionou dois bancos de dados NoSQL:MongoDB como banco de dados de origem e AWS DynamoDB como banco de dados de destino. Neste tutorial de dois artigos, discutiremos a migração de um banco de dados MongoDB para o DynamoDB no DMS. Um dos requisitos para usar o MongoDB como fonte DMS é que o MongoDB deve ser executado como um conjunto de réplicas, que criaremos usando uma imagem do Docker no primeiro desses dois artigos.

Este artigo tem as seguintes seções:
  • Definindo o ambiente
  • Criando um usuário do IAM para o serviço de migração de banco de dados
  • Criando uma chave de criptografia
  • Criando um banco de dados MongoDB
  • Criando uma tabela do DynamoDB
  • Conclusão

Definindo o ambiente


O único pré-requisito é uma conta da AWS, que pode ser criada em https://aws.amazon.com/resources/create-account/. Devemos executar os bancos de dados de origem e destino na AWS. Para a fonte do MongoDB, usaremos o Docker, para o qual iniciaremos uma instância do EC2 com o AMI Container Linux by CoreOS (Stable) selecionado no AWS Marketplace, conforme mostrado na Figura 1. O CoreOS é escolhido como plataforma Linux porque possui Docker pré-instalado nele.


Figura 1: Selecionando o CoreOS AMI para iniciar uma instância do EC2

O grupo de segurança usado pela instância do CoreOS EC2 deve ter regras de entrada/saída definidas para aceitar todo o tráfego. Isso implica tráfego de todos os protocolos em todas as portas entre todas as origens e destinos (0.0.0.0/0,::/0 ).

Criando um usuário do IAM para o serviço de migração de banco de dados


Nesta seção, criaremos um usuário do IAM para acessar os diferentes serviços da AWS usados ​​na criação de uma migração, incluindo DMS, EC2, DynamoDB, KMS, IAM e CloudWatch. Primeiro, precisamos criar uma Política com as permissões necessárias. Posteriormente, criaremos um usuário e atribuiremos a política ao usuário. Para criar uma política do IAM, selecione Políticas no console do IAM e clique em Criar política . Em Criar política, selecione Criar sua própria política . Em Revisar Política, especifique um Nome de Política (DMS como exemplo) e copie e cole o seguinte documento de política no campo Documento de política.
{ "Versão":"2012-10-17", "Declaração":[ { "Efeito":"Permitir", "Ação":"dms:*", "Recurso":"*" }, { "Efeito":"Permitir", "Ação":"dynamodb:*", "Recurso":"*" }, { "Efeito":"Permitir", "Ação":"kms:*", "Recurso":"*" }, { "Efeito":"Permitir", "Ação":"iam:*", "Recurso":"*" }, { "Efeito":"Permitir", "Ação":"ec2:* ", "Recurso":"*" }, { "Efeito":"Permitir", "Ação":"cloudwatch:*", "Recurso":"*" }, { "Efeito":"Permitir", "Ação ":"aws-marketplace:*", "Recurso":"*" }, { "Efeito":"Permitir", "Ação":"logs:*", "Recurso":"*" }, { "Efeito ":"Permitir", "Ação":[ "redshift:Describe*", "redshift:ModifyClusterIamRoles" ], "Resource":"*" } ]}


Clique em Validar política . Se a saída for "Esta política é válida", clique em Criar política , como mostrado na Figura 2.


Figura 2: Como criar uma política do IAM

Uma nova política do IAM é criada, conforme mostrado na Figura 3.


Figura 3: Política de IAM “DMS”

Em seguida, crie um usuário do IAM. Selecione Usuários e clique em Adicionar usuário , como mostrado na Figura 4.


Figura 4: Adicionar usuário

Em Adicionar usuário , especifique um Nome de usuário , conforme mostrado na Figura 5. Para Tipo de acesso , selecione Acesso programático e acesso ao Console de gerenciamento da AWS .


Figura 5: Adicionando usuário

Para Senha do console , selecione Senha personalizada e especifique uma senha (veja a Figura 6). Clique em Avançar.


Figura 6: Selecione o tipo de acesso da AWS>Próximo

Em Definir permissões, clique em Anexar políticas existentes diretamente , como mostrado na Figura 7.


Figura 7: Configurando permissões

Selecione a política DMS criada anteriormente e clique em Avançar, conforme mostrado na Figura 8.


Figura 8: Selecionando a política de DMS

Em Revisão, clique em Criar usuário , como mostrado na Figura 9.


Figura 9: Revisar>Criar usuário

Um usuário do IAM é criado. Copie o URL mostrado na Figura 10 para fazer login no AWS Management Console como o usuário criado.


Figura 10: URL do usuário do IAM

Um novo usuário é listado em Usuários (ver Figura 11).


Figura 11: URL do usuário do IAM

Criando uma chave de criptografia


Em seguida, crie uma chave de criptografia a ser usada para a migração do DMS. Faça login como o usuário do IAM criou e use o URL copiado na Figura 10. Selecione o IAM service no console de gerenciamento da AWS e selecione Chaves de criptografia . Clique em Criar chave para iniciar um assistente para criar uma chave de criptografia. Use o assistente para criar uma chave de criptografia (dms ), conforme mostrado na Figura 12.


Figura 12: Nova chave de criptografia

Criando um banco de dados MongoDB


Nesta seção, criaremos um banco de dados MongoDB que migraremos posteriormente para o DynamoDB. Usaremos o Docker para executar uma instância do MongoDB, para a qual uma instância do CoreOS foi iniciada. Para fazer login em uma instância do CoreOS, obtenha o endereço IP público da instância do CoreOS, conforme mostrado na Figura 13.


Figura 13: Endereço IP público da instância CoreOS

O SSH faz login na instância do CoreOS usando o par de chaves e o IP público.
ssh -i "docker.pem" [email protected]

O prompt de linha de comando da instância do CoreOS é exibido, conforme mostrado na Figura 14.


Figura 14: Instância do CoreOS

Em seguida, execute o seguinte comando para iniciar um contêiner do Docker para o MongoDB usando a imagem do MongoDB “mongo”. A porta do contêiner do Docker 27017 é exposta no host também como 27017 usando o -p opção para execução do docker . O nome do contêiner é definido como “mongo1” e o comando mongod --replSet repl0 é executado no contêiner criado para iniciar um conjunto de réplicas do MongoDB chamado “repl0”. Como mencionado anteriormente, para usar o MongoDB como fonte DMS, é necessário um conjunto de réplicas do MongoDB e um MongoDB autônomo não pode ser usado como fonte.
docker run -p 27017:27017 mongo mongod --replSet repl0

A imagem do Docker mongo é puxado e conforme indicado pela mensagem “MongoDB iniciando” na Figura 15 MongoDB começa a ser iniciado.


Figura 15: Baixando a janela de encaixe Imagem do Docker

Uma instância do MongoDB é iniciada na porta 27017 (consulte a Figura 16). Um conjunto de réplicas ainda não foi criado e vamos inicializar um conjunto de réplicas a seguir.


Figura 16: Instância do Mongo iniciada

Um contêiner do Docker é listado com o docker ps comando, como mostrado na Figura 17.


Figura 17: Listando o Docker Container para Mongo

Use o comando a seguir para iniciar um shell de comando para a interface de linha de comando (CLI) do Mongo.
docker exec -it mongo1 mongo

O shell do MongoDB versão 3.4.4 é conectado ao URL mongodb://127.0.0.1:27017 , conforme mostrado na Figura 18.


Figura 18: Conectando o Shell do MongoDB

O prompt de comando da CLI do Mongo é exibido, conforme mostrado na Figura 19.


Figura 19: Prompt de comando do Mongo Shell

Defina o banco de dados MongoDB para usar como teste com o teste de uso comando, como mostrado na Figura 20.


Figura 20: Configurando o banco de dados como teste

Em seguida, inicializaremos um conjunto de réplicas para o qual precisamos definir os membros ou instâncias do conjunto de réplicas. Obtenha o IP privado da instância do CoreOS EC2 na qual o contêiner do Docker para MongoDB está sendo executado (consulte a Figura 21).


Figura 21: IP privado da instância CoreOS

Na CLI do Mongo, especifique a configuração a seguir para a configuração do conjunto de réplicas.
config ={ "_id" :"repl0", "members" :[ { "_id" :0, "host" :"172.30.2.20:27017" } ]}

A configuração do conjunto de réplicas é definida, conforme mostrado na Figura 22.


Figura 22: Definindo a configuração do conjunto de réplicas

Inicie a configuração do conjunto de réplicas usando o arquivo configuration.
rs.initiate(config)

O conjunto de réplicas é inicializado, conforme mostrado na Figura 23.


Figura 23: Conjunto de réplicas inicializado

Emita a configuração do conjunto de réplicas.
rs.conf()

O repl0:PRIMARY prompt de comando indica que o conjunto de réplicas foi inicializado e o membro Primário do conjunto de réplicas foi definido para executar comandos da CLI do Mongo. O Primário é o único membro em um conjunto de réplicas para operações de gravação. Crie uma coleção do MongoDB chamada wlslog com o db.createCollection() comando.
db.createCollection("wlslog")

Uma coleção do MongoDB é criada, conforme mostrado na Figura 24. Uma coleção do MongoDB é uma coleção de documentos. Os documentos estão no formato BSON (JSON binário).


Figura 24: Criando coleção

Execute as seguintes instruções que definem documentos JSON na CLI do Mongo.
doc1 ={"timestamp":"8 de abril de 2014 19:06:16 PDT", "category":"Aviso","type":"WebLogicServer", "servername":"AdminServer","code ":"BEA-000365", "msg":"Estado do servidor alterado para STANDBY"}doc2 ={"timestamp":"8 de abril de 2014 19:06:17 PDT", "category":"Aviso"," type":"WebLogicServer", "servername":"AdminServer","code":"BEA-000365", "msg":"Estado do servidor alterado para STARTING"}doc3 ={"timestamp":"8 de abril de 2014 7 :06:18 PM PDT", "category":"Aviso","type":"WebLogicServer", "servername":"AdminServer","code":"BEA-000365", "msg":"Estado do servidor alterado to ADMIN"}doc4 ={"timestamp":"8 de abril de 2014 19:06:19 PDT", "category":"Aviso","type":"WebLogicServer", "servername":"AdminServer"," code":"BEA-000365", "msg":"Estado do servidor alterado para RESUMING"}doc5 ={"timestamp":"8 de abril de 2014 19:06:20 PDT", "category":"Aviso", "type":"WebLogicServer", "servername":"AdminServer","code":"BEA-000331", "msg":"Iniciado WebLogic Admin Server"}doc6 ={"timestamp":"8 de abril de 2014 7 :06:21 PM PDT", "category":"Aviso","type":"WebLogicServer", "servername":"AdminServer","code":"BEA-000365", "msg":"Estado do servidor alterado para RUNNING"}doc7 ={" timestamp":"8 de abril de 2014 19:06:22 PDT", "category":"Aviso","type":"WebLogicServer", "servername":"AdminServer","code":"BEA-000360" , "msg":"Servidor iniciado no modo RUNNING"}

As variáveis ​​dos documentos JSON são definidas, conforme mostrado na Figura 25.


Figura 25: Definindo variáveis ​​para documentos JSON

Adicione os documentos JSON ao wlslog coleção.
db.wlslog.insert([doc1,doc2,doc3,doc4,doc5,doc6,doc7])

Conforme indicado pela saída na Figura 26, sete documentos são adicionados ao wlslog coleção.


Figura 26: Documentos JSON adicionados à coleção

Liste os documentos adicionados ao wlslog coleção.
db.wlslog.find()

Os sete documentos adicionados são listados, conforme mostrado na Figura 27.


Figura 27: Encontrar ou obter documentos de uma coleção do Mongo

Criando uma tabela do DynamoDB


Tendo criado um conjunto de réplicas do MongoDB para a origem do DMS, em seguida, criaremos uma tabela do DynamoDB para o destino do DMS. Faça login como o usuário do IAM (dvohra) criado anteriormente e atribuído a uma política. Selecione o serviço DynamoDB no Console de gerenciamento do AW e selecione Criar tabela , conforme mostrado na Figura 28.


Figura 28: DynamoDB>Criar tabela

Na tabela Criar DynamoDB, especifique um Nome da tabela e especifique a chave primária , que também é a chave de partição, como _id , conforme mostrado na Figura 29. Embora o nome da tabela seja arbitrário e esteja definido como wlslog , que é o mesmo que a coleção do MongoDB criada no conjunto de réplicas do MongoDB, a chave primária deve ser definida como _id porque cada documento do MongoDB recebe o campo de chave primária _id .


Figura 29: Criando uma tabela do DynamoDB

A tabela do DynamoDB wlslog é criado, como mostrado na Figura 30.


Figura 30: Tabela do DynamoDB wlslog criada

Clique na tabela do DynamoDB wlslog no Painel e nos detalhes da tabela, incluindo a chave primária _id , são exibidos (consulte a Figura 31).


Figura 31: Detalhe do wlslog da tabela do DynamoDB

Quando uma migração DMS é criada, uma função do IAM dms-vpc-role com política gerenciada AmazonDMSVPCManagementRole é criado automaticamente. Para que o serviço DMS acesse o serviço DynamoDB, precisamos modificar a função de acesso ao serviço dms-vpc-role para adicionar o seguinte documento de política, que fornece acesso ao DynamoDB a partir do DMS.
{ "Versão":"2012-10-17", "Declaração":[{ "Efeito":"Permitir", "Ação":[ "dynamodb:*" ], "Recurso":["*" ] }]}

Usando o mesmo procedimento usado para criar a política DMS, crie uma política DynamoDB e especifique o documento de política anterior na caixa de campo Documento de política, conforme mostrado na Figura 32. Clique em Criar política .


Figura 32: Política de revisão>Criar política

A política do DynamoDB é criada, conforme mostrado na Figura 33.


Figura 33: Política do IAM DynamoDB criado

O dms-vpc-role à qual a política do DynamoDB deve ser adicionada é mostrada na Figura 34.


Figura 34: Função de VPC do DMS

Clique em dms-vpc-role e adicione a política do DynamoDB usando Attach Policy. As políticas AmazonDMSVPCManagementRole e DynamoDB devem ser listadas como políticas gerenciadas, conforme mostrado na Figura 35.


Figura 35: Políticas de permissões na função DMS VPC

Conclusão


Neste artigo, apresentamos o uso do AWS Database Migration Service (DMS) para migrar o MongoDB para o Amazon DynamoDB. Começamos criando um conjunto de réplicas do MongoDB como fonte de dados para migrar e também criamos uma tabela do DynamoDB como tabela de destino. Em um artigo subsequente, discutiremos a criação e execução de uma migração DMS para migrar dados.