Migração de banco de dados usando o AWS DMS (Database Migration Service)

Na área de tecnologia, devido a sua constante evolução nos deparamos diversas vezes com o cenário onde as aplicações também necessitam evoluir para acompanhar o crescimento do negócio. Essa evolução muitas vezes exige, por exemplo, alterações de infraestrutura das aplicações, alterações em recursos de hardware, frameworks de desenvolvimento entre outras.

Nesse tutorial demonstrarei um cenário onde será necessário realizar uma migração de uma tabela de um RDS PostgreSQL para outro RDS PostgreSQL usando a migração de dados Homogênea, mas usando o AWS DMS também poderia ser migrado de um banco de dados On-premises ou de outro mecanismo (engine) diferente para uma instância RDS PostgreSQL, por exemplo, poderíamos migrar de um SQL Server para um PostgreSQL, para isso seria necessária a utilização da ferramenta AWS Schema Conversion Tool (SCT), mas isso é um tema para outro post.

Falando um pouco sobre a solução, o AWS Database Migration Service (DMS) é um serviço de migração de dados da AWS que permite migrar seus dados entre os bancos de dados e os data warehouses comerciais mais usados. Confira a lista de engines compatíveis entre outros detalhes sobre esse serviço aqui:
https://aws.amazon.com/pt/dms/features/

Referente a migração de dados homogênea que iremos utilizar: É quando o banco de dados de origem e destino possuem a mesma engine.

Vamos lá!

Ao acessar a console do DMS pela primeira vez, será carregada uma janela conforme a imagem abaixo, clique no botão Get started:

Será carregada a console do DMS, clique na opção Endpoints no menu esquerdo e depois no botão Create endpoint conforme abaixo:

Primeiramente iremos cadastrar o Source endpoint, que será o banco de dados que iremos realizar a migração de uma tabela. Abrindo a janela devemos informar o Endpoint type, deixaremos marcado a opção Source endpoint e iremos clicar na checkbox Select RDB DB instance e selecionar o database-origem, nesse momento serão preenchidos automaticamente os campos Endpoint identifier e Source engine conforme a imagem:

Após selecionar a instância RDS a janela será rolada automaticamente para a parte Access to endpoint database, selecionamos a opção Provide access information manually, como já selecionamos a instãncia anteriormente os campos já estarão preenchidos, exceto o campo senha (Password) e banco de dados (Database name). Como estamos usando o usuário master do banco (postgres), precisaremos somente de inserir a senha e o nome do banco de dados, após inserido as informações podemos clicar no botão Create endpoint para que o endpoint seja criado:

Agora faremos o mesmo procedimento para cadastrar o Endpoint de destino (Target), segue as imagens para ajudar:

Após a criação dos endpoints (Source e Target), iremos para a etapa de criação do serveless replication, com essa funcionalidade conseguimos acelerar a nossa migração, pois ela permite que o AWS DMS provisione e escale automaticamente os recursos de migração, facilitando as migrações de banco de dados. Usando o Serveless replication, iremos definir somente o limite do hardware (Capacity) que iremos utilizar, a infraestrutura por trás será criada pelo próprio DMS.

Para criarmos a replicação iremos acessar no menu esquerdo a opção Serverless replications e depois clicar no botão Create replication.

Na janela que será carregada, no bloco Configuration, iremos inserir o nome de identificação da replicação (Name), deixaremos o campo Descriptive Amazon Resource Name em branco, depois selecionamos o banco de dados de origem (Source) no campo Source database endpoint e o banco de dados de destino (Target) para onde iremos migrar a tabela no campo Target database endpoint. Após essas configurações precisaremos informar o tipo de replicação que iremos utilizar (Replication Type), nesse tutorial estaremos utilizando o Full load, nesse tipo de migração será migrada a tabela e todos os seus dados.

No bloco configurações da replicação (Settings), iremos deixar marcada a opção Drop tables on target em Target table preparation mode, pois o banco de dados de destino é novo e não existem tabelas nele. Se já existisse tabelas eu poderia selecionar a opção Do nothing, por exemplo, usando essa opção a replicação ignora as tabelas que já existem e cria/replica os dados somente das tabelas que não existem. Em Include LOB columns in replication deixaremos a opção padrão (Limited LOB mode):

Para gerar os logs da migração marcaremos a checkbox Turn on CloudWatch logs, após marcar essa opção serão carregadas algumas opções e nível de log. Veja abaixo como foi configurado para esse tutorial:

Após definido o nível de log, vamos para o Table mappings, nesse bloco mapeamos os dados e as tabelas do banco de dados de origem (Source) e como serão migradas para o banco de destino (Target). Nesse tutorial iremos migrar somente a tabela empresas do banco de dados dmsdatabase, dessa forma configuramos conforme a imagem abaixo:

Em Compute settings, na primeira parte (Connectivity and security) configuramos a VPC, Subnet group e o Security Group que será utilizado pelos recursos do DMS. Um ponto importante aqui, é que o Security Group utilizado, precisa ter acesso aos dois bancos de dados (Source e Target). Para essa demonstração estamos utilizando a VPC padrão (Default) e o Security Group Default, não recomendado para ambientes de produção devido as configurações mais permissivas. Não utilize em ambientes de produção essa VPC e Security Group em um ambiente de produção.

Para o Security Group fique atento a liberação das portas utilizadas pelo banco de dados de origem e destino, pois a instância de replicação precisará ter acesso aos dois bancos para o funcionamento da migração.

Na segunda parte, em (Availability) selecionamos somente Single-AZ em Deployment e em Capacity selecionamos somente o máximo de recursos serveless que iremos utilizar no campo Maximum DMS capacity units (DCU), para esse tutorial selecionamos 8 DCU (2vCPU e 16GB de memória), esse recurso atenderá tranquilamente o nosso ambiente. Após configuradas as opções, clique no botão Create replication para criar a configuração de migração.

A partir desse momento temos o ambiente configurado e pronto para a migração e voltaremos para a console principal do AWS DMS com uma mensagem com o botão Start replication conforme destacado na imagem abaixo:

Após clicar no botão Start replication a replicação será iniciada e uma janela similar a janela abaixo será carregada. O tempo de replicação dependerá das características do seu ambiente. As características são os recursos definido para o Serverless replication, tipo de instância do banco de dados, tamanho de tabela e etc.

Como utilizamos o Full load como Replication Type, quando finalizar a replicação o status ficará conforme abaixo. Caso seja necessário fazer uma nova migração, será necessário criar uma nova replicação.

Concluído! Nesse ponto, está finalizada a migração da tabela para uma nova instância RDS sem que indisponibilizasse o banco de dados de origem durante o processo de migração..

Até breve!