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.