

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Migrar para o Amazon DocumentDB
<a name="docdb-migration"></a>

O Amazon DocumentDB é um serviço de banco de dados gerenciado compatível com a API do MongoDB. Você pode migrar seus dados para o Amazon DocumentDB a partir de bancos de dados MongoDB executados localmente ou no Amazon Elastic Compute Cloud ( EC2Amazon) usando o processo detalhado nesta seção.

**Topics**
+ [Guia de início rápido](migration-quick-start.md)
+ [Runbook de migração](docdb-migration-runbook.md)
+ [Migração do Couchbase Server](migration-from-couchbase.md)

# Migração para o Amazon DocumentDB usando o AWS Database Migration Service (DMS): guia de início rápido
<a name="migration-quick-start"></a>

**Topics**
+ [Preparação do arquivo de origem](#migrate-qs-dma-source)
+ [Configuração do DMS](#migrate-qs-dms-setup)
+ [Habilitação da compactação do DocumentDB](#migrate-qs-comp)
+ [Criação de uma tarefa de replicação](#migrate-qs-create)
+ [Monitorar o andamento](#migrate-qs-monitor)
+ [Mais informações](#migrate-qs-info)

## Preparação do arquivo de origem
<a name="migrate-qs-dma-source"></a>

Consulte [Ativar fluxos de alterações](change_streams.md#change_streams-enabling) para habilitar fluxos de alterações do DocumentDB ou para habilitar o MongoDB Oplog para oferecer suporte à captura de dados de alteração (CDC) do DMS.
+ A fonte do DMS deve reter todas as alterações em andamento até que a carga total do DMS seja concluída para todas as coleções incluídas.
+ Os fluxos de alterações do DocumentDB são baseados no tempo. Certifique-se de que sua configuração `change_stream_log_retention_duration` seja grande o suficiente para cobrir o tempo necessário para concluir a carga completa.
+ O MongoDB Oplog tem um tamanho fixo. Certifique-se de que ele seja dimensionado para comportar todas as operações durante a carga total.

## Configuração do DMS
<a name="migrate-qs-dms-setup"></a>

Crie endpoints de instância, origem e destino do DMS e teste cada endpoint.

## Habilitação da compactação do DocumentDB
<a name="migrate-qs-comp"></a>

Habilite a compactação anexando um grupo de parâmetros personalizado ao seu cluster do DocumentDB e atualizando o parâmetro default\$1collection\$1compression para habilitado. Consulte [Gerenciamento da compactação de documentos a nível de coleção](doc-compression.md) para obter mais informações.

## Criação de uma tarefa de replicação
<a name="migrate-qs-create"></a>

1. No console do DMS, no painel de navegação, escolha **Migrar ou replicar** e, em seguida, escolha **Tarefas**.

1. Escolha **Criar tarefa**.

1. Na página **Criar tarefa**, na seção **Configuração da tarefa**:
   + Insira um **Identificador de tarefa** exclusivo e significativo (por exemplo, “mongodb-docdb-replication”).
   + Escolha o endpoint de origem que você criou anteriormente no menu suspenso **Endpoint de banco de dados de origem**.
   + Escolha o endpoint de destino que você criou anteriormente no menu suspenso **Endpoint de banco de dados de destino**.
   + Em **Tipo de tarefa**, escolha **Migrar e replicar**.

1. Na seção **Configurações**:
   + Em **Logs de tarefas**, marque a caixa **Ativar logs do CloudWatch**.
   + Em **Modo de edição** (na parte superior da seção), escolha **Editor JSON** e defina os atributos a seguir:
     + Defina `ParallelApplyThreads` como 5 (em `TargetMetadata`). Isso permite aproximadamente 1000 operações de inserção/atualização/exclusão por segundo no CDC.
     + Defina `MaxFullLoadSubTasks` como 16 (em `FullLoadSettings`). Considere aumentar isso dependendo do tamanho da sua instância.
     + Para coleções grandes (acima de 100 GB), habilite a partição automática (em Mapeamento de tabelas e sob o atributo `parallel-load`):
       + "type": "partitions-auto"
       + "number-of-partitions": 16

## Monitorar o andamento
<a name="migrate-qs-monitor"></a>

Use o console do AWS DMS ou crie um painel personalizado ([ferramenta de painel](https://github.com/awslabs/amazon-documentdb-tools/tree/master/monitoring/docdb-dashboarder)) para rastrear a migração. Concentre-se nas métricas a seguir:
+ **FullloadThroughputBandwidthTarget**: mede a largura de banda da rede (em KB/segundo) usada pelo DMS ao transferir dados para o banco de dados de destino durante a fase de carga total da migração.
+ **CDCLatencyTarget**: mede o tempo de atraso (em segundos) entre a ocorrência de uma alteração no banco de dados de origem e o momento em que essa alteração é aplicada ao banco de dados de destino.
+ **CDCThroughputRowsTarget**: mede o número de linhas por segundo que o DMS está aplicando ao banco de dados de destino durante a fase de replicação contínua da migração.

## Mais informações
<a name="migrate-qs-info"></a>

Para obter mais informações sobre o Amazon DocumentDB e o AWS DMS, consulte para obter mais informações.
+ [Runbook de migração do Amazon DocumentDB](docdb-migration-runbook.md)
+ [Migração do MongoDB para o Amazon DocumentDB](https://docs.aws.amazon.com/dms/latest/sbs/chap-mongodb2documentdb.html)

# Runbook de migração do Amazon DocumentDB
<a name="docdb-migration-runbook"></a>

Este runbook fornece um guia abrangente para migrar um banco de dados MongoDB para o Amazon DocumentDB usando (DMS). AWS Database Migration Service Ele foi projetado para oferecer suporte a administradores de banco de dados, engenheiros de nuvem e desenvolvedores em toda a jornada de end-to-end migração, desde a descoberta inicial até a validação pós-migração.

Dadas as diferenças na implementação e nos recursos com suporte entre o MongoDB e o Amazon DocumentDB, este runbook enfatiza uma abordagem estruturada e sistemática. Ele descreve as avaliações essenciais de pré-migração, destaca as considerações de compatibilidade e detalha as principais tarefas necessárias para garantir uma migração com êxito e com o mínimo de interrupções.

O runbook está organizado nos tópicos a seguir:
+ **[Compatibilidade](#mig-runbook-compatibility)**: noções básicas dos recursos e tipos de dados do MongoDB com suporte no Amazon DocumentDB e identificação de possíveis incompatibilidades.
+ **[Descoberta de workload](#mig-runbook-workload)**— Analise as cargas de trabalho existentes do MongoDB, read/write incluindo padrões, volumes de dados e linhas de base de desempenho.
+ **[Migração de índices](#mig-runbook-index)**: análise de estratégias para extrair e transformar índices do MongoDB para obter uma performance ideal no Amazon DocumentDB.
+ **[Migração do usuário](#mig-runbook-user)**: detalhamento da abordagem para a migração de usuários, perfis e controles de acesso do banco de dados para o Amazon DocumentDB.
+ **[Migrações de dados](#mig-runbook-data)**— Abrange vários métodos de uso da migração de dados AWS DMS, incluindo carga total e captura de dados de alteração (CDC).
+ **[Monitoramento](#mig-runbook-monitoring)**: detalhamento de várias abordagens de monitoramento na migração usando o DMS ou ferramentas nativas.
+ **[Validação](#mig-runbook-validation)**: fornecimento de procedimentos para verificações de integridade de dados, validação funcional e comparação de performance após a migração.

Seguindo as orientações deste runbook, as equipes podem garantir uma transição tranquila, segura e eficiente para o Amazon DocumentDB, preservando a funcionalidade da aplicação e minimizando os riscos.

## Compatibilidade
<a name="mig-runbook-compatibility"></a>

**Topics**
+ [compatibilidade de recursos principais](#w2aac23b9c13c13)
+ [Ferramenta de avaliação de compatibilidade do Amazon DocumentDB](#w2aac23b9c13c15)

Ao migrar do MongoDB para o Amazon DocumentDB, uma avaliação inicial completa e uma verificação de compatibilidade de recursos são essenciais para uma migração com êxito. Esse processo começa com um inventário abrangente dos recursos do MongoDB, incluindo operadores de pipeline de agregação, padrões de consulta, índices e modelos de dados.

Como o Amazon DocumentDB é compatível com as APIs do MongoDB 3.6, 4.0, 5.0 e 8.0, os aplicativos que usam recursos específicos mais recentes do MongoDB podem precisar de refatoração. As áreas críticas a serem avaliadas incluem mecanismos de fragmentação (o Amazon DocumentDB usa uma abordagem diferente), implementações de transações, funcionalidade de fluxos de mudança e tipos de índice (especialmente índices esparsos e parciais).

As características de performance também diferem, com o Amazon DocumentDB otimizado para workloads corporativas com performance previsível. Os testes devem envolver a execução de workloads representativas em ambos os sistemas para identificar padrões de consulta que possam precisar de otimização.

Monitorar os planos de execução para detectar possíveis lacunas de performance é importante durante a fase de avaliação. Isso ajuda a criar um roteiro de migração claro, identificando as mudanças necessárias nas aplicações e estabelecendo cronogramas realistas para uma transição suave.

### compatibilidade de recursos principais
<a name="w2aac23b9c13c13"></a>



#### Suporte a recursos abrangentes
<a name="w2aac23b9c13c13b5"></a>
+ **Operações CRUD**: aproveite o suporte completo a todas as operações básicas de criação, leitura, atualização e exclusão, incluindo operadores em massa e de consulta, oferecendo compatibilidade perfeita com aplicações.
+ **Recursos avançados de indexação**: aproveite o suporte abrangente para índices de campo único, compostos, TTL, parciais, esparsos e 2dsphere, para otimizar a performance de suas consultas e índices de texto (versão 5) para pesquisas baseadas em texto.
+ **Replicação de nível corporativo**: beneficie-se de um mecanismo robusto de failover automático com réplicas de leitura para alta disponibilidade sem sobrecarga operacional.
+ **Soluções avançadas de backup** — Fique tranquilo com o sistema de backup automatizado com Point-in-Time recuperação (PITR) e instantâneos manuais sob demanda para proteção de dados.

#### Recursos AWS integrados aprimorados
<a name="w2aac23b9c13c13b7"></a>
+ **Agregação simplificada**: aproveite os estágios de agregação mais usados (`$match`, `$group`, `$sort`, `$project`, etc.) com performance otimizada para workloads corporativas.
+ **Suporte a transações**: implemente transações com vários documentos e várias coleções, perfeitas para a maioria das necessidades das aplicações de negócios.
+ **Rastreamento de dados em tempo real**: habilite fluxos de alterações por meio de um comando simples e aumente o período de retenção do fluxo de alterações por meio de uma configuração simples de grupo de parâmetros para o monitoramento de alterações de dados em tempo real.
+ **Serviços baseados em localização**: implemente aplicações geoespaciais com suporte para o operador `$geoNear` e índices do 2dsphere.
+ **Recursos de pesquisa de texto**: utilize a funcionalidade de pesquisa de texto integrada para as necessidades de descoberta de conteúdo.

#### Vantagens da arquitetura moderna
<a name="w2aac23b9c13c13b9"></a>
+ **Design nativo da nuvem** — Desfrute de uma arquitetura AWS otimizada que substitui recursos legados, por exemplo, por operações de pipeline de MapReduce agregação mais eficientes.
+ **Segurança aprimorada** — Beneficie-se da autenticação de AWS Identity and Access Management certificado (IAM), SCRAM-SHA-1, SCRAM-SHA-256, X.509 e autenticação baseada em senha.
+ **Performance previsível**: experimente uma performance consistente otimizada especificamente para workloads corporativas.

Para obter uma visão geral abrangente dos recursos do Amazon DocumentDB, consulte [APIsMongoDB, operações e tipos de dados compatíveis no Amazon DocumentDB](mongo-apis.md) e [Diferenças funcionais: Amazon DocumentDB e MongoDB](functional-differences.md) para maximizar o potencial do seu banco de dados.

O Amazon DocumentDB não oferece suporte a todos os índices oferecidos pelo MongoDB. Fornecemos uma [ferramenta de índice](https://github.com/awslabs/amazon-documentdb-tools/blob/master/index-tool/README.md) gratuita para verificar a compatibilidade. Recomendamos executar a ferramenta de índice para avaliar a incompatibilidade e planejar soluções alternativas adequadamente.

### Ferramenta de avaliação de compatibilidade do Amazon DocumentDB
<a name="w2aac23b9c13c15"></a>

A ferramenta de compatibilidade do [MongoDB para o Amazon DocumentDB é um utilitário de código aberto disponível no GitHub que ajuda a avaliar a compatibilidade da carga de trabalho do MongoDB](https://github.com/awslabs/amazon-documentdb-tools/blob/master/compat-tool/README.md) com o Amazon DocumentDB analisando os registros do MongoDB ou o código-fonte do aplicativo.

**Recursos principais**
+ Identificar os padrões de uso da API do MongoDB em sua workload
+ Sinalizae possíveis problemas de compatibilidade antes da migração
+ Gerar relatórios detalhados de compatibilidade com recomendações
+ Disponível como um utilitário autônomo que pode ser executado localmente

#### Métodos de avaliação
<a name="w2aac23b9c13c15b9"></a>

**Avaliação baseada em logs**


+ Prós:
  + Captura o comportamento real do runtime e padrões de consulta
  + Identifica frequências de uso e características de performance no mundo real
  + Detecta consultas dinâmicas que podem não ser visíveis no código-fonte
  + Não é necessário acesso ao código-fonte da aplicação
+ Contras:
  + Requer acesso aos logs do MongoDB com a criação de perfis habilitada
  + Captura somente as operações que ocorreram durante o período de log
  + Pode perder recursos usados com pouca frequência ou workloads sazonais

**Análise de código-fonte**


+ Prós:
  + Cobertura abrangente de todas as operações potenciais do MongoDB na base de código
  + Pode identificar problemas em caminhos de código raramente executados
  + Detecta a lógica do lado do cliente que pode ser afetada pelas diferenças do Amazon DocumentDB
  + Não é necessário executar a aplicação para realizar a avaliação
+ Contras:
  + Pode sinalizar código que existe, mas nunca é executado em produção
  + Requer acesso ao código-fonte completo da aplicação
  + Capacidade limitada de analisar consultas construídas dinamicamente

Para obter melhores resultados, recomendamos usar os dois métodos de avaliação sempre que possível para obter uma visão completa dos desafios de compatibilidade antes da migração.

## Descoberta de workload
<a name="mig-runbook-workload"></a>

A migração do MongoDB para o Amazon DocumentDB exige uma compreensão completa da workload do banco de dados existente. A descoberta da workload é o processo de analisar os padrões de uso do banco de dados, as estruturas de dados, a performance das consultas e as dependências operacionais para garantir uma transição perfeita com o mínimo de interrupção. Esta seção descreve as principais etapas envolvidas na descoberta da workload para facilitar uma migração efetiva do MongoDB para o Amazon DocumentDB.

**Topics**
+ [Avaliação da implantação existente do MongoDB](#w2aac23b9c15b7)
+ [Identificação de diferenças no modelo de dados](#w2aac23b9c15b9)
+ [Análise de consultas e de performance](#w2aac23b9c15c11)
+ [Verificação de segurança e controle de acesso](#w2aac23b9c15c13)
+ [Considerações operacionais e de monitoramento](#w2aac23b9c15c15)

### Avaliação da implantação existente do MongoDB
<a name="w2aac23b9c15b7"></a>

Antes da migração, é fundamental avaliar o ambiente atual do MongoDB, incluindo:
+ **Arquitetura do cluster**: identifique o número de nós, conjuntos de réplicas e configurações de fragmentação. Ao migrar do MongoDB para o Amazon DocumentDB, entender sua configuração de fragmentação do MongoDB é importante porque o Amazon DocumentDB não oferece suporte à fragmentação controlada pelo usuário. As aplicações projetadas para um ambiente fragmentado do MongoDB precisarão de mudanças arquitetônicas, pois o Amazon DocumentDB usa uma abordagem de escalabilidade diferente com sua arquitetura baseada em armazenamento. Você precisará adaptar sua estratégia de distribuição de dados e possivelmente consolidar coleções fragmentadas ao migrar para o Amazon DocumentDB.
+ **Armazenamento e volume de dados**: meça o tamanho total dos dados e o tamanho do índice do seu cluster. Complemente isso com a [ferramenta de revisão Oplog](https://github.com/awslabs/amazon-documentdb-tools/tree/master/migration/mongodb-oplog-review) para entender os padrões de gravação e a velocidade de crescimento dos dados. Para obter mais informações sobre como dimensionar seu cluster, consulte [Dimensionamento de instância](best_practices.md#best_practices-instance_sizing). 
+ **Padrões de workload**: analise o throughput de leitura e gravação, a frequência de execução de consultas e a eficiência da indexação.
+ **Dependências operacionais**: documente todas as aplicações, serviços e integrações que dependam do MongoDB.

### Identificação de diferenças no modelo de dados
<a name="w2aac23b9c15b9"></a>

Embora o Amazon DocumentDB seja compatível com o MongoDB, há diferenças nos recursos com suporte, como:
+ **Transações**: o Amazon DocumentDB oferece suporte a transações ACID, mas com algumas [Limitações](transactions.md#transactions-limitations).
+ **Design do esquema**: garanta que as estruturas dos documentos, os documentos incorporados e as referências estejam alinhados às [práticas recomendadas do Amazon DocumentDB](https://d1.awsstatic.com/product-marketing/Data%20modeling%20with%20Amazon%20DocumentDB.pdf).

### Análise de consultas e de performance
<a name="w2aac23b9c15c11"></a>

Compreender o comportamento das consultas ajuda a otimizar a migração e a performance pós-migração. As principais áreas a serem analisadas incluem:
+ **Consultas lentas**: identifique consultas com alto tempo de execução usando as ferramentas de criação de perfil do MongoDB.
+ **Padrões de consulta**: categorize os tipos de consulta comuns, incluindo operações e agregações CRUD.
+ **Uso de índices** avalie se os índices são utilizados de forma eficaz ou se precisam de otimização no Amazon DocumentDB. Para avaliar o uso de índices e otimizar a performance no Amazon DocumentDB, use o estágio do pipeline de agregação `$indexStats` combinado com o método `explain()` em suas consultas críticas. Comece executando `db.collection.aggregate([{$indexStats{}}])` para identificar quais índices estão sendo usados. É possível fazer uma análise mais detalhada executando suas consultas mais frequentes com `explainPlan`.
+ **Concorrência e distribuição de workloads**: avalie as taxas de leitura e gravação, o pool de conexões e os gargalos de performance.

### Verificação de segurança e controle de acesso
<a name="w2aac23b9c15c13"></a>

**Autenticação e autorização**
+ **MongoDB RBAC para Amazon DocumentDB IAM e RBAC — Mapeie os usuários e funções de controle de acesso baseados em funções do MongoDB para políticas (IAM) e AWS Identity and Access Management usuários de autenticação SCRAM do Amazon** DocumentDB.
+ **Estratégia de migração de usuários**: planeje a migração de usuários do banco de dados, perfis personalizados e privilégios para os mecanismos de autenticação com suporte no Amazon DocumentDB.
+ **Diferenças de privilégios**: identifique os privilégios do MongoDB sem equivalentes diretos do Amazon DocumentDB (por exemplo, perfis de administração de cluster).
+ **Autenticação de aplicações**: atualize strings de conexão e gerenciamento de credenciais para as políticas de senha do Amazon DocumentDB. É possível usar o gerenciador de segredos para armazenar suas credenciais e alternar senhas.
+ **Gerenciamento da conta de serviço** — Estabeleça processos para gerenciar as credenciais da conta de serviço em AWS Secrets Manager.
+ **Implementação de privilégios mínimos**: revise e refine os controles de acesso para implementar os princípios de privilégios mínimos no novo ambiente.

**Criptografia**

Garanta que a criptografia em repouso e em trânsito esteja alinhada aos requisitos de conformidade.

**Configuração de rede**

Planeje a configuração da [nuvem privada virtual (VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/create-vpc.html) e as regras do grupo de segurança.

### Considerações operacionais e de monitoramento
<a name="w2aac23b9c15c15"></a>

Para manter a confiabilidade do sistema, a descoberta de workloads também deve incluir:
+ **Estratégia de backup e restauração**: avalie os métodos de backup existentes e os recursos de backup do Amazon DocumentDB.
+ **AWS Backup integração** — Aproveite o gerenciamento centralizado AWS Backup de backup em todos os AWS serviços, incluindo o Amazon DocumentDB.
+ **CloudWatch métricas** — Mapeie as métricas de monitoramento do MongoDB com as métricas do Amazon CloudWatch DocumentDB para CPU, memória, conexões e armazenamento.
+ **Insights de performance**: implemente os Insights de performance do Amazon DocumentDB para visualizar a carga do banco de dados e analisar problemas de performance com análises detalhadas das consultas.
+ **Profiler**: configure o profiler do Amazon DocumentDB para capturar operações de execução lenta (semelhante ao profiler do MongoDB, mas com configurações específicas do Amazon DocumentDB).
  + Habilite por meio de grupos de parâmetros com limites apropriados.
  + Analise os dados do profiler para identificar oportunidades de otimização
+ **CloudWatch Eventos** — Configure o monitoramento orientado por eventos de cluster do Amazon DocumentDB.
  + Configure notificações para eventos de backup, janelas de manutenção e failovers.
  + Integre-se ao Amazon SNS para alertas e respostas AWS Lambda automatizadas.
+ **Logs de auditoria**: planeje a configuração dos logs de auditoria para rastrear a atividade do usuário e eventos relevantes à segurança.
+ **Monitoramento aprimorado**: permita o monitoramento aprimorado de métricas granulares no nível do sistema operacional em intervalos de 1 segundo.

## Migração de índices
<a name="mig-runbook-index"></a>

A migração do MongoDB para o Amazon DocumentDB envolve a transferência não apenas de dados, mas também de índices para manter a performance das consultas e otimizar as operações do banco de dados. Esta seção descreve o step-by-step processo detalhado de migração de índices do MongoDB para o Amazon DocumentDB e, ao mesmo tempo, garante compatibilidade e eficiência.

### Uso da ferramenta de índice do Amazon DocumentDB
<a name="w2aac23b9c17b5"></a>

**Clonagem da [ferramenta de índice](https://github.com/awslabs/amazon-documentdb-tools/blob/master/index-tool/README.md)**

```
git clone https://github.com/aws-samples/amazon-documentdb-tools.git
cd amazon-documentdb-tools/index-tool
```

```
pip install -r requirements.txt
```

**Exportação de índices do MongoDB (se estiver migrando a partir do MongoDB)**

```
python3 migrationtools/documentdb_index_tool.py --dump-indexes --dir mongodb_index_export --uri
'mongodb://localhost:27017'
```

**Exportação de índices do Amazon DocumentDB (se estiver migrando a partir do Amazon DocumentDB)**

```
python3 migrationtools/documentdb_index_tool.py --dump-indexes --dir docdb_index_export --uri
'mongodb://user:password@mydocdb.cluster-cdtjj00yfi95.eu-west-
2.docdb.amazonaws.com:27017/?tls=true&tlsCAFile=rds-combined-ca-
bundle.pem&replicaSet=rs0&retryWrites=false'
```

**Importação de índices**

```
python3 migrationtools/documentdb_index_tool.py --restore-indexes --skip-incompatible --dir
mongodb_index_export --uri 'mongodb://user:password@mydocdb.cluster-cdtjj00yfi95.eu-west-
2.docdb.amazonaws.com:27017/?tls=true&tlsCAFile=rds-combined-ca-
bundle.pem&replicaSet=rs0&retryWrites=false'
```

**Verificação de índices**

```
python3 migrationtools/documentdb_index_tool.py --show-issues --dir mongodb_index_export
```

## Migração do usuário
<a name="mig-runbook-user"></a>

A migração de usuários do MongoDB para o Amazon DocumentDB é essencial para manter o controle de acesso, a autenticação e a segurança do banco de dados. Esta seção descreve as etapas detalhadas para uma migração com êxito dos usuários do MongoDB, preservando seus perfis e permissões, por meio da ferramenta de exportação de usuários do Amazon DocumentDB.

### Uso da ferramenta de exportação de usuários do Amazon DocumentDB
<a name="w2aac23b9c19b5"></a>

Ele [https://github.com/awslabs/amazon-documentdb-tools/tree/master/migration/export-users](https://github.com/awslabs/amazon-documentdb-tools/tree/master/migration/export-users)exporta usuários e funções do MongoDB ou do Amazon DocumentDB JavaScript para arquivos, que podem ser usados para recriá-los em outro cluster.

**Pré-requisitos**

```
# Clone the repository
git clone https://github.com/awslabs/amazon-documentdb-tools.git
cd amazon-documentdb-tools/migration/export-users
```

```
# Install required dependencies
pip install pymongo
```

**Etapa 1: exportação de usuários e perfis**

```
# Export users and roles to JavaScript files
python3 docdbExportUsers.py \
--users-file mongodb-users.js \
--roles-file mongodb-roles.js \
--uri "mongodb://admin:password@source-host:27017/"
```

**Etapa 2: edição do arquivo do usuário**

```
// Example of how to update the users.js file
// Find each user creation statement and add the password
db.getSiblingDB("admin").createUser({
user: "appuser",
// Add password here
pwd: "newpassword",
roles: [
{ role: "readWrite", db: "mydb" }
]
})
```

**Etapa 3: restauração de perfis personalizados no Amazon DocumentDB**

```
# Import roles first
mongo --ssl \
--host target-host:27017 \
--sslCAFile rds-combined-ca-bundle.pem \
--username admin \
--password password \
mongodb-roles.js
```

**Etapa 4: restauração de usuários no Amazon DocumentDB**

```
# Import users after roles are created
mongo --ssl \
--host target-host:27017 \
--sslCAFile rds-combined-ca-bundle.pem \
--username admin \
--password password \
mongodb-users.js
```

**Observações importantes**
+ As senhas não são exportadas por motivos de segurança e deverão ser adicionadas manualmente ao arquivo users.js.
+ Os perfis devem ser importados antes dos usuários para garantir a atribuição adequada dos perfis.
+ A ferramenta gera JavaScript arquivos que podem ser executados diretamente com o shell mongo.
+ Os perfis personalizados e seus privilégios são preservados durante a migração.
+ Essa abordagem permite revisar e modificar as permissões do usuário antes da importação.

Esse método fornece uma abordagem segura e flexível para migrar usuários e perfis do MongoDB para o Amazon DocumentDB, permitindo redefinições de senha durante o processo de migração.

## Migrações de dados
<a name="mig-runbook-data"></a>

**Topics**
+ [migração online](#w2aac23b9c21b5)
+ [Migração offline](#w2aac23b9c21b7)
+ [Pré-requisitos](#w2aac23b9c21c11)
+ [Criação de um cluster do Amazon DocumentDB](#w2aac23b9c21c13)
+ [Execute o despejo de dados (mongodump)](#w2aac23b9c21c15)
+ [Transferência dos arquivos de despejo para o ambiente de restauração](#w2aac23b9c21c17)
+ [Restauração dos dados no Amazon DocumentDB (mongorestore)](#w2aac23b9c21c19)

### migração online
<a name="w2aac23b9c21b5"></a>

Esta seção fornece etapas detalhadas para realizar uma migração on-line do MongoDB para o Amazon DocumentDB AWS DMS usando para permitir o mínimo de tempo de inatividade e a replicação contínua. Para começar, você configura um cluster do Amazon DocumentDB como destino e garante que sua instância do MongoDB esteja configurada corretamente como origem, normalmente exigindo o modo de conjunto de réplicas para a captura de dados de alteração. Em seguida, você cria uma instância de replicação do DMS e define os endpoints de origem e de destino com os detalhes de conexão necessários. Depois de validar os endpoints, você configura e inicia uma tarefa de migração que pode incluir carga total de dados, replicação contínua ou ambas.

#### Configuração do destino (Amazon DocumentDB)
<a name="w2aac23b9c21b5b5"></a>

**nota**  
Se você já provisionou um cluster do Amazon DocumentDB para o qual migrar, ignore esta etapa.

**Crie um grupo de parâmetros personalizado**

Veja os AWS CLI procedimentos Console de gerenciamento da AWS ou em[Criando grupos de parâmetros de cluster do Amazon DocumentDB](cluster_parameter_groups-create.md).

**Criar um cluster do Amazon DocumentDB**

**nota**  
Embora existam outros procedimentos para criar um cluster do Amazon DocumentDB neste guia, as etapas desta seção se aplicam especificamente à tarefa de migrar grandes quantidades de dados para um novo cluster.

1. [Faça login no e abra Console de gerenciamento da AWS o console do Amazon DocumentDB em https://console.aws.amazon.com /docdb.](https://console.aws.amazon.com/docdb)

1. No painel de navegação, escolha **Clusters**.
**dica**  
Caso não visualize o painel de navegação à esquerda da tela, selecione o ícone do menu (![\[Hamburger menu icon with three horizontal lines.\]](http://docs.aws.amazon.com/pt_br/documentdb/latest/developerguide/images/docdb-menu-icon.png)) no canto superior esquerdo da página.

1. No console de gerenciamento do Amazon DocumentDB, em **Clusters**, escolha **Criar**.

1. Na página **Criação de cluster do Amazon DocumentDB**, na seção **Tipo de cluster**, escolha **Clusters baseados em instâncias** (essa é a opção padrão).

1. Na seção Configuração do cluster:
   + Em **Identificador do cluster**, insira um nome exclusivo, como **mydocdbcluster**. Observe que o console alterará todos os nomes de cluster para minúsculas, independentemente de como eles sejam inseridos.
   + Em **Versão do mecanismo**, escolha 5.0.0.

1. Na seção **Configuração de armazenamento do cluster**, deixe a configuração **Amazon DocumentDB Padrão** como está (essa é a opção padrão).

1. Na seção **Instance configuration**:
   + Em **Classe de instância de banco de dados**, escolha **Classes otimizadas para memória (incluir classes r)** (esse é o padrão).
   + Em **Classe de instância**, escolha uma classe de instância com base na workload. Por exemplo:
     + db.r6g.large: para workloads menores
     + db.r6g.4xlarge: para workloads maiores

     Como prática recomendada, indicamos escolher uma instância tão grande quanto possível para obter o melhor throughput de carga total e reduzir a escala verticalmente após a conclusão da migração.
   + Em **Número de instâncias**, escolha 1 instância. Escolher uma instância ajuda a minimizar os custos. Recomendamos que você escale para três instâncias para obter alta disponibilidade após a conclusão da migração de carga total.

1. Na seção **Autenticação**, insira um nome de usuário para o usuário principal e escolha **Autogerenciado**. Insira uma senha e confirme-a.

1. Na seção **Configurações de rede**, escolha uma VPC e um grupo de sub-rede e, em seguida, configure o grupo de segurança da VPC. Certifique-se de que seu grupo de segurança do Amazon DocumentDB permita a conexão de entrada do grupo de segurança da instância do DMS atualizando as regras de entrada.

1. Na ncryption-at-rest seção **E**, habilite a criptografia (recomendado) e escolha ou insira uma chave KMS.

1. Na seção **Backup**, defina o período de retenção do backup (1 a 35 dias).

1.  Verifique sua configuração e escolha **Criar cluster**.

   A implantação normalmente dura entre 10 e 15 minutos,

#### Configuração da fonte
<a name="w2aac23b9c21b5b7"></a>

O MongoDB e o Amazon DocumentDB podem servir como origens de migração, dependendo do seu cenário:
+ **MongoDB como** fonte — Comum ao migrar de um MongoDB local ou autogerenciado para um Amazon DocumentDB ou outros serviços de banco de dados. AWS Requer execução no modo de conjunto de réplicas com um oplog de tamanho adequado (certifique-se de que seja dimensionado para conter todas as operações durante a carga total) para oferecer suporte à captura de dados de alterações durante a migração.
+ **Amazon DocumentDB como origem**: normalmente usado para replicação entre regiões, atualizações de versão ou migração para outros serviços de banco de dados, como o MongoDB Atlas. Requer [Ativar fluxos de alterações](change_streams.md#change_streams-enabling) a partir da configuração do parâmetro `change_stream_log_retention_duration` no grupo de parâmetros do cluster para capturar as alterações em andamento durante a migração. Certifique-se de que sua configuração `change_stream_log_retention_duration` seja grande o suficiente para cobrir o tempo necessário para concluir a carga completa.

Antes de iniciar a migração, configure sua fonte para permitir o AWS DMS acesso.

Crie um usuário do MongoDB com as permissões adequadas:

```
db.createUser({
user: "dmsUser",
pwd: "yourSecurePassword",
roles: [{ role: "readAnyDatabase", db: "admin" }]
})
```

Configure a rede e a autenticação.

Ao configurar a conectividade de rede para a migração do MongoDB para o DMS:

**Origem no MongoDB hospedado em EC2**
+ Modifique o grupo de segurança do EC2 para permitir o tráfego de entrada do grupo de segurança da instância de replicação do DMS.
+ Adicione uma regra para a porta 27017 de TCP (ou sua porta personalizada do MongoDB).
+ Use o ID do grupo de segurança da instância de replicação do DMS como fonte para um controle de acesso preciso.
+ Certifique-se de que a sub-rede da instância do EC2 tenha uma rota para a sub-rede da instância de replicação do DMS.

**Origem do MongoDB on-premises**
+ Configure seu firewall para permitir conexões de entrada dos endereços IP públicos da instância de replicação do DMS.
+ Se estiver usando Direct Connect uma VPN, garanta o roteamento adequado entre sua rede e a VPC que contém a instância do DMS.
+ Teste a conectividade usando comandos telnet ou nc da sub-rede do DMS para seu servidor do MongoDB.

**Origem no MongoDB Atlas**
+ Adicione os endereços IP de uma instância de replicação do DMS à lista de permissões de IP do MongoDB Atlas.
+ Configure o emparelhamento de VPC entre a VPC e o AWS MongoDB Atlas VPC se o Atlas estiver em execução. AWS
+ Configure AWS PrivateLink para conectividade privada (nível Enterprise), se estiver executando em outro provedor de nuvem.
+ Crie um usuário dedicado com read/write as permissões apropriadas.
+ Use uma string de conexão do MongoDB Atlas com o modo de SSL definido como “verify-full”.
+ Garanta um tamanho de oplog suficiente para a duração da migração.

**Origem no Amazon DocumentDB**

Configure seu grupo de segurança do Amazon DocumentDB de origem para permitir o tráfego de entrada do grupo de segurança da instância de replicação do DMS.

#### Criação de uma instância de replicação do DMS.
<a name="w2aac23b9c21b5b9"></a>

Recomendamos o uso do [DMS Buddy](https://github.com/awslabs/amazon-documentdb-tools/tree/master/migration/dms_buddy) para provisionar sua infraestrutura do DMS, pois ela cria uma infraestrutura de migração ideal com configurações de DMS e tamanhos de instância ideais.

Se preferir configurar manualmente, siga estas etapas:

1. Abra o console do AWS DMS e escolha **Criar instância de replicação.**

1. Insira os detalhes da instância de replicação:
   + **Nome da instância**: escolha um nome exclusivo.
   + **Classe da instância**: selecione com base na workload. Exemplo: dms.r5.large (workloads pequenas), dms.r5.4xlarge (workloads grandes).
   + **Versão do motor**: 3.5.4
   + **Armazenamento alocado**: o padrão é de 100 GB (aumente se necessário). Isso é determinado pelo tamanho do documento updates/second e pela duração total do carregamento.
   + **Implantação Multi-AZ**: habilite para alta disponibilidade, se necessário.
   + Escolha a mesma VPC do Amazon DocumentDB.
   + Garanta que os **grupos de segurança** permitam tráfego de entrada da origem e do Amazon DocumentDB.

1. Clique em **Criar instância de replicação** e aguarde até que o status seja disponível.

#### Criação de endpoints da VPC
<a name="w2aac23b9c21b5c11"></a>

##### Criação de um endpoint de origem
<a name="w2aac23b9c21b5c11b3"></a>

**Para uma origem do MongoDB**

1. No console do DMS, no painel de navegação, escolha **Migrar ou replicar** e, em seguida, escolha **Endpoints**.

1. Escolha **Criar endpoint**.

1. Na página **Criar endpoint**, escolha **Endpoint de origem**.

1. Na seção **Configuração do endpoint**:
   + Insira um **identificador de endpoint** exclusivo e significativo (por exemplo, “mongodb-source”).
   + Escolha o **MongoDB** como **Mecanismo de origem**.
   + Em **Acesso ao banco de dados de endpoint**, escolha **Fornecer informações de acesso manualmente**.
   + Em **Nome do servidor**, insira seu*MongoDB server DNS name/IP address*.
   + Em **Porta**, insira **27017** (porta padrão do MongoDB).
   + Em **Modo de autenticação**, escolha o modo apropriado para a sua aplicação (senha/SSL) (o padrão é gerenciador de segredos).
   + Se o **Modo de autenticação** for **Senha**, forneça:
     + **Nome de usuário** e **Senha**: insira as credenciais do MongoDB.
     + **Nome do banco de dados**: o nome do seu banco de dados de origem.
     + **Mecanismo de autenticação**: SCRAM-SHA-1 (padrão) ou o mecanismo apropriado

1. Em **Modo de metadados**, deixe a configuração padrão do **documento**.

1. Atributos adicionais de conexão:
   + authSource=admin (se o banco de dados de autenticação for diferente)
   + ReplicaSet=< your-replica-set-name > (necessário para o CDC)

**Para uma origem do Amazon DocumentDB**

1. No console do DMS, no painel de navegação, escolha **Migrar ou replicar** e, em seguida, escolha **Endpoints**.

1. Escolha **Criar endpoint**.

1. Na página **Criar endpoint**, escolha **Endpoint de origem**.

1. Na seção **Configuração do endpoint**:
   + Insira um **identificador de endpoint** exclusivo e significativo (por exemplo, “docdb-source”).
   + Escolha **Amazon DocumentDB** como **Mecanismo de origem**.
   + Em **Acesso ao banco de dados de endpoint**, escolha **Fornecer informações de acesso manualmente**.
   + Em **Nome do servidor**, insira seu*source Amazon DocumentDB cluster endpoint*.
   + Em **Porta**, insira **27017** (porta padrão para o Amazon DocumentDB).
   + Em **Modo de SSL**, escolha **verify-full** (recomendado para Amazon DocumentDB).
   + Em **Certificado CA**, escolha o certificado CA raiz do Amazon DocumentDB,
   + Em **Modo de autenticação**, escolha o modo apropriado para a sua aplicação (senha/SSL) (o padrão é gerenciador de segredos).
   + Se o **Modo de autenticação** for **Senha**, forneça:
     + **Nome de usuário** e **senha**: insira as credenciais do Amazon DocumentDB.
     + **Nome do banco de dados**: o nome do seu banco de dados de origem.
     + **Mecanismo de autenticação**: SCRAM-SHA-1 (padrão) ou o mecanismo apropriado

1. Em **Modo de metadados**, deixe a configuração padrão do **documento**.

##### Criação de um endpoint de destino do Amazon DocumentDB.
<a name="w2aac23b9c21b5c11b5"></a>

1. No console do DMS, no painel de navegação, escolha **Migrar ou replicar** e, em seguida, escolha **Endpoints**.

1. Escolha **Criar endpoint**.

1. Na página **Criar endpoint**, escolha **Endpoint de destino**.

1. Na seção **Configuração do endpoint**:
   + Insira um **identificador de endpoint** exclusivo e significativo (por exemplo, “docdb-target”).
   + Escolha **Amazon DocumentDB** como **Mecanismo de destino**.
   + Para **Acesso ao banco de dados do endpoint**, escolha o método que você deseja usar para autenticar o acesso ao banco de dados:
     + Se você escolher **AWS Secrets Manager**, escolha o segredo em que você armazena suas credenciais do Amazon DocumentDB no campo **Segredo**.
     + Se você escolher **Fornecer informações de acesso manualmente**: 
       + Em **Nome do servidor**, insira seu*target Amazon DocumentDB cluster endpoint*.
       + Em **Porta**, insira **27017** (porta padrão para o Amazon DocumentDB).
       + Em **Modo de SSL**, escolha **verify-full** (recomendado para Amazon DocumentDB).
       + Em **Certificado CA**, baixe e especifique o pacote de certificados CA para verificação de SSL.
       + Em **Modo de autenticação**, escolha o modo apropriado para a sua aplicação (senha/SSL) (o padrão é gerenciador de segredos).
       + Se o **Modo de autenticação** for **Senha**, forneça:
         + **Nome de usuário** e **senha**: insira as credenciais do Amazon DocumentDB.
         + **Nome do banco de dados**: o nome do seu banco de dados de origem.
         + **Mecanismo de autenticação**: SCRAM-SHA-1 (padrão) ou o mecanismo apropriado

1. Em **Modo de metadados**, deixe a configuração padrão do **documento**.

#### Criação de tarefas de replicação
<a name="w2aac23b9c21b5c13"></a>

1. No console do DMS, no painel de navegação, escolha **Migrar ou replicar** e, em seguida, escolha **Tarefas**.

1. Escolha **Criar tarefa**.

1. Na página **Criar tarefa**, na seção **Configuração da tarefa**:
   + Insira um **identificador de tarefa** exclusivo e significativo (por exemplo, "mongodb-docdb-replication“).
   + Escolha o endpoint de origem que você criou anteriormente no menu suspenso **Endpoint de banco de dados de origem**.
   + Escolha o endpoint de destino que você criou anteriormente no menu suspenso **Endpoint de banco de dados de destino**.
   + Em **Tipo de tarefa**, escolha **Migrar e replicar**.

1. Na seção **Configurações**:
   + Em **Modo de preparação da tabela de destino**, deixe a configuração padrão.
   + Em **Interromper a tarefa após a conclusão da carga total**, deixe a configuração padrão.
   + Em **Configurações da coluna LOB**, deixe a configuração do **Modo LOB limitado** como está.
   + Em **Validação de dados**, deixe a configuração padrão de **Desativar**.
   + Para **registros de tarefas**, marque a caixa **Ativar CloudWatch** registros.
   + Em **Aplicação otimizada em lote**, deixe a configuração padrão desmarcada (desativada).

1. De volta ao topo da seção **Configurações da tarefa**, em **Modo de edição**, escolha **Editor JSON** e defina os atributos a seguir:

   ```
   {
     "TargetMetadata": {
       "ParallelApplyThreads": 5
     },
     "FullLoadSettings": {
       "MaxFullLoadSubTasks": 16
     }
   }
   ```

1. Na seção **Mapeamentos de tabela**, adicione uma nova regra de seleção:
   + Em **Nome do esquema**, adicione o banco de dados de origem a ser migrado. Use % para especificar vários bancos de dados.
   + No nome da **Tabela do esquema**, adicione o banco de dados de origem a ser migrado. Use % para especificar várias coleções.
   + Em **Ação**, deixe a configuração padrão de **Incluir**

1. Para coleções grandes (acima de 100 GB), adicione a **Regra de configurações de tabela**:
   + Em **Nome do esquema**, adicione o banco de dados de origem a ser migrado. Use % para especificar vários bancos de dados.
   + No nome da **Tabela do esquema**, adicione o banco de dados de origem a ser migrado. Use % para especificar várias coleções.
   + Em **Número de partições**, insira 16 (deve ser menor que `MaxFullLoadSubTask`).

1. Na seção **Avaliação de pré-migração**, certifique-se de que ela esteja desativada.

### Migração offline
<a name="w2aac23b9c21b7"></a>

Esta seção descreve o processo para realizar uma migração offline de uma instância autogerenciada do MongoDB para o Amazon DocumentDB usando ferramentas nativas do MongoDB: `mongodump` e `mongorestore`.

### Pré-requisitos
<a name="w2aac23b9c21c11"></a>

**Requisitos do MongoDB de origem**
+ Acesso à instância de origem do MongoDB com as permissões apropriadas.
+ Instale o `mongodump`, se necessário (ele é instalado durante a instalação do MongoDB).
+ Verifique se há espaço em disco suficiente para os arquivos de despejo.

**Requisitos do Amazon DocumentDB de destino**
+ Certifique-se de ter um cluster do Amazon DocumentDB provisionado.
+ Certifique-se de que haja uma instância do EC2 na mesma VPC do Amazon DocumentDB para facilitar a migração.
+ A conectividade de rede deve estar disponível entre seu ambiente de origem e o Amazon DocumentDB.
+ O **mongorestore** deve estar instalado na instância EC2 de migração.
+ As permissões apropriadas do IAM devem ser configuradas para acessar o Amazon DocumentDB,

**Requisitos gerais**
+ AWS CLI deve ser configurado (se estiver usando AWS serviços para armazenamento intermediário)
+ Uma largura de banda suficiente deve estar disponível para a transferência de dados.
+ A janela de tempo de inatividade deve ser aprovada (se estiver fazendo uma migração ao vivo, considere outras abordagens)

### Criação de um cluster do Amazon DocumentDB
<a name="w2aac23b9c21c13"></a>

Criação de um cluster do Amazon DocumentDB na AWS:
+ Adeque um tamanho da instância com base na sua workload.
+ Configure uma VPC, sub-redes e grupos de segurança.
+ Habilite os parâmetros necessários por meio de grupos de parâmetros.

### Execute o despejo de dados (mongodump)
<a name="w2aac23b9c21c15"></a>

Escolha uma das opções a seguir para criar um arquivo de despejo:
+ **Opção 1: básica**

  ```
  mongodump --
  uri="mongodb://<source_user>:<source_password>@<source_host>:<source_port>/<database>" --
  out=/path/to/dump
  ```
+ **Opção 2: melhor controle e performance**

  ```
  mongodump \
  --uri="mongodb://<source_user>:<source_password>@<sourcehost>:<source_port>" \
  --out=/path/to/dump \
  --gzip \# Compress output
  --numParallelCollections=4 \# Parallel collections dump
  --ssl \# If using SSL
  --authenticationDatabase=admin \ # If auth is required
  --readPreference=secondaryPreferred # If replica set
  ```
+ **Opção 3: bancos de dados grandes**

  ```
  mongodump \
  --host=<source_host> \
  --port=<source_port> \
  --username=<source_user> \
  --password=<source_password> \
  --db=<specific_db> \# Only dump specific DB
  --collection=<specific_collection> \ # Only dump specific collection
  --query='{ "date": { "$gt": "2020-01-01" } }' \ # Filter documents
  --archive=/path/to/archive.gz \# Single archive output
  --gzip \
  --ssl
  ```

### Transferência dos arquivos de despejo para o ambiente de restauração
<a name="w2aac23b9c21c17"></a>

Escolha um método apropriado com base no tamanho do seu despejo:
+ **Pequeno**: copie diretamente para sua máquina de migração (a instância EC2 que você criou anteriormente):

  ```
  scp -r /path/to/dump user@migration-machine:/path/to/restore
  ```
+ **Médio**: use o Amazon S3 como armazenamento intermediário:

  ```
  aws s3 cp --recursive /path/to/dump s3://your-bucket/mongodb-dump/
  ```
+ **Grande** — Para bancos de dados muito grandes, considere AWS DataSync uma transferência física.

### Restauração dos dados no Amazon DocumentDB (mongorestore)
<a name="w2aac23b9c21c19"></a>

Antes de iniciar o processo de restauração, crie os índices no Amazon DocumentDB. É possível utilizar a [ferramenta de índice do Amazon DocumentDB](https://github.com/awslabs/amazon-documentdb-tools/tree/master/index-tool) para exportar e importar índices.

Escolha uma das opções a seguir para restaurar os dados:
+ **Opção 1: restauração básica**

  ```
  mongorestore --uri="mongodb://<docdb_user>:<docdb_password>@<docdb_endpoint>:27017"
  /path/to/dump
  ```
+ **Opção 2: melhor controle e performance**

  ```
  mongorestore \
  --uri="mongodb://<docdb_user>:<docdb_password>@<docdb_endpoint>:27017" \
  --ssl \
  --sslCAFile=/path/to/rds-combined-ca-bundle.pem \ # DocumentDB CA cert
  --gzip \# If dumped with gzip
  --numParallelCollections=4 \# Parallel restoration
  --numInsertionWorkersPerCollection=4 \# Parallel documents insertion
  --noIndexRestore \# skip indexes as they are pre-created
  /path/to/dump
  ```
+ **Opção 3: bancos de dados grandes ou controles específicos**

  ```
  mongorestore \
  --host=<docdb_endpoint> \
  --port=27017 \
  --username=<docdb_user> \
  --password=<docdb_password> \
  --ssl \
  --sslCAFile=/path/to/rds-combined-ca-bundle.pem \
  --archive=/path/to/archive.gz \# If using archive format
  --gzip \
  --nsInclude="db1.*" \# Only restore specific namespaces
  --nsExclude="db1.sensitive_data" \ # Exclude specific collections if needed
  --noIndexRestore \# skip indexes as they are pre-created
  --writeConcern="{w: 'majority'}" # Ensure write durability
  ```

## Monitoramento
<a name="mig-runbook-monitoring"></a>

Esta seção fornece um processo de monitoramento detalhado para monitorar o andamento, a performance e a integridade de uma migração contínua de:

**MongoDB** para **Amazon DocumentDB**

or

**Amazon DocumentDB** para **Amazon DocumentDB**

As etapas de monitoramento se aplicam independentemente do método de migração (AWS DMS, mongodump/mongorestore ou outras ferramentas).

### AWS DMS Monitoramento da migração (se aplicável)
<a name="w2aac23b9c23c13"></a>

Monitore as seguintes CloudWatch métricas principais:

**Métricas da fase de carga total**
+ **FullLoadThroughputBandwidthTarget**— Largura de banda da rede (KB/segundo) durante a carga total
+ **FullLoadThroughputRowsTarget**— Número de rows/documents carregados por segundo
+ **FullLoadThroughputTablesTarget**— Número de tables/collections concluídos por minuto
+ **FullLoadProgressPercent**— Porcentagem de carga total concluída
+ **TablesLoaded**— Número de carregados tables/collections com sucesso
+ **TablesLoading**— Número de tables/collections carregamentos atuais
+ **TablesQueued**— Número de tables/collections espera para ser carregado
+ **TablesErrored**— Número tables/collections que falhou ao carregar

**Métricas da fase do CDC**
+ **CDCLatencyDestino** — Tempo de espera (segundos) entre a alteração na origem e o aplicativo de destino
+ **CDCLatencyFonte** — Tempo de atraso (segundos) entre a alteração na fonte e a leitura pelo DMS
+ **CDCThroughputRowsTarget**— Linhas por segundo aplicadas durante a replicação contínua
+ **CDCThroughputBandwidthTarget**— Largura de banda da rede (KB/segundo) durante o CDC
+ **CDCIncomingAlterações** — Número de eventos de mudança recebidos da fonte
+ **CDCChangesMemoryTarget**— Memória usada (MB) para armazenar alterações no lado do alvo

**Métricas de recursos**
+ **CPUUtilization**— Uso da CPU da instância de replicação
+ **FreeableMemory**— Memória disponível na instância de replicação
+ **FreeStorageSpace**— Armazenamento disponível na instância de replicação
+ **NetworkTransmitThroughput**— Taxa de transferência de rede para a instância de replicação
+ **NetworkReceiveThroughput**— Taxa de transferência de rede para a instância de replicação

**Métricas de erros**
+ **ErrorsCount**— Número total de erros durante a migração
+ **TableErrorsCount**— Número de erros específicos da tabela
+ **RecordsErrorsCount**— Número de erros específicos do registro

Crie CloudWatch alarmes para métricas críticas, como `CDCLatencyTarget` e `CPUUtilization` para receber notificações se o desempenho da migração diminuir.

#### Registros do DMS (CloudWatch registros)
<a name="w2aac23b9c23c13c23"></a>



1. Acesse o console do Amazon CloudWatch Logs.

1. Encontre e escolha em seu grupo de logs. Ele se parece com “dms-tasks –”.

1. Procure por fluxos de log que possam conter informações de erro:
   + Fluxos com “error” no nome
   + Streams com nomes de tarefas IDs ou endpoints
   + Os fluxos de log mais recentes durante o período de sua migração

1. Dentro desses fluxos, pesquise por palavras-chave como:
   + "error"
   + "exception"
   + "failed"
   + "warning"

#### Status da tarefa do DMS (usando AWS CLI)
<a name="w2aac23b9c23c13c25"></a>



```
aws dms describe-replication-tasks --filters Name=replication-task id,Values=<task_id> --query
"ReplicationTasks[0].Status"
```

Fluxo de status esperado:

em criação → pronto → em execução → parando → parado (ou com falha

#### Monitore usando `docdb-dashboarder`
<a name="w2aac23b9c23c13c27"></a>

A `docdb-dashboarder` ferramenta fornece monitoramento abrangente para clusters do Amazon DocumentDB por meio da geração automática de CloudWatch painéis com métricas essenciais de desempenho. Esses painéis exibem métricas críticas em nível de cluster (atraso de réplica, contadores de operação), métricas em nível de instância (CPU, memória, conexões) e métricas de armazenamento (uso de volume, armazenamento de backup). Para cenários de migração, a ferramenta oferece painéis especializados que monitoram o andamento da migração com métricas como atraso na replicação do CDC e taxas de operação. Os painéis podem monitorar vários clusters simultaneamente e incluir suporte para instâncias NVMe apoiadas. Ao visualizar essas métricas, as equipes podem identificar proativamente gargalos de performance, otimizar a alocação de recursos e garantir o bom funcionamento de suas implantações do Amazon DocumentDB. A ferramenta elimina a necessidade de criação manual de painéis e, ao mesmo tempo, fornece monitoramento consistente em todos os ambientes. Para obter instruções de configuração e opções avançadas de configuração, consulte o repositório [Amazon DocumentDB Dashboarder Tool](https://github.com/awslabs/amazon-documentdb-tools/tree/master/monitoring/docdb-dashboarder). GitHub 

## Validação
<a name="mig-runbook-validation"></a>

**Topics**
+ [Lista de verificação de validação](#w2aac23b9c25c15)
+ [Validação de esquema e índices](#w2aac23b9c25c17)
+ [Amostragem de dados e validação em nível de campo](#w2aac23b9c25c19)
+ [Validação usando a DataDiffer ferramenta](#w2aac23b9c25c21)

Esta seção fornece um processo de validação detalhado para garantir a consistência de dados, sua integridade e a compatibilidade das aplicações após a migração de:

**MongoDB** para **Amazon DocumentDB**

or

**Amazon DocumentDB** para **Amazon DocumentDB**

As etapas de validação se aplicam independentemente do método de migração (AWS DMS, mongodump/mongorestore ou outras ferramentas).

### Lista de verificação de validação
<a name="w2aac23b9c25c15"></a>

Verifique se o número de documentos em cada coleção corresponde entre a origem e o destino:

**Origem do MongoDB**

```
mongo --host <source_host> --port <port> --username <user> -- password <password> --eval
"db.<collection>.count()"
```

**Destino do Amazon DocumentDB**

```
mongo --host <target_host> --port <port> --username <user> -- password <password> --eval
"db.<collection>.count()"
```

### Validação de esquema e índices
<a name="w2aac23b9c25c17"></a>

Verifique se:
+ todas as coleções existem no destino.
+ os índices estão replicados corretamente.
+ as definições do esquema (se aplicadas) são idênticas.

**Verifique as coleções (origem versus destino)**

```
mongo --host <source_host> --eval "show collections"
mongo --host <target_host> --ssl --eval "show collections"
```

**verifique os índices (origem versus destino)**

```
mongo --host <source_host> --eval" db.<collection>.getIndexes()"
mongo --host <target_host> --ssl –eval" db.<collection>.getIndexes()"
```

Compare a lista de coleções para garantir que não haja coleções ausentes ou extras.

Verifique os índices verificando os nomes dos índices, as definições de chave, as restrições exclusivas e os índices de TTL (se houver).

**Verifique as regras de validação do esquema (se estiver usando a validação de esquema do MongoDB)**

```
mongo --host <source_host> --eval" db.getCollectionInfos({name: '<collection>'})
[0].options.validator"
   mongo --host <target_host> --ssl –eval" db.getCollectionInfos({name: '<collection>'})[0].options.validator"
```

### Amostragem de dados e validação em nível de campo
<a name="w2aac23b9c25c19"></a>

É possível amostrar documentos aleatoriamente e comparar campos entre origem e destino.

**Amostragem manual**

Obtenha cinco documentos aleatórios (origem):

```
mongo --host <source_host> --eval "db.<collection>.aggregate([{ \$sample: { size: 5 } }])"
```

Obtenha o mesmo documento IDs (destino):

```
mongo --host <target_host> --ssl –eval "db.<collection>.find({ _id: { \$in: [<list_of_ids>] } })"
```

**Amostragem automática**

```
import pymongo
# Connect to source and target
source_client = pymongo.MongoClient("<source_uri>")
target_client = pymongo.MongoClient("<target_uri>", ssl=True)
source_db = source_client["<db_name>"]
target_db = target_client["<db_name>"]
# Compare 100 random documents
for doc in source_db.<collection>.aggregate([{ "$sample":
{ "size": 100 } }]):
target_doc = target_db.<collection>.find_one({ "_id":
doc["_id"] })
if target_doc != doc:
print(f"❌ Mismatch in _id: {doc['_id']}")
else:
print(f"✅ Match: {doc['_id']}")
```

### Validação usando a DataDiffer ferramenta
<a name="w2aac23b9c25c21"></a>

A [DataDiffer ferramenta](https://github.com/awslabs/amazon-documentdb-tools/tree/master/migration/data-differ) fornece uma maneira confiável de comparar dados entre bancos de dados de origem e de destino.

#### Pré-requisitos
<a name="w2aac23b9c25c21b5"></a>

Os seguintes pré-requisitos devem ser atendidos antes da instalação da ferramenta: DataDiffer 
+ Python 3.7 e posterior
+ PyMongo biblioteca
+ Conectividade de rede com os clusters de origem do MongoDB e de destino do Amazon DocumentDB

#### Configuração e instalação
<a name="w2aac23b9c25c21b7"></a>

**Clone o repositório e navegue até o diretório DataDiffer **

```
git clone https://github.com/awslabs/amazon-documentdb-tools.git
cd amazon-documentdb-tools/migration/data-differ
```

**Instale as dependências necessárias**

```
pip install -r requirements.txt
```

#### Execução da validação de dados
<a name="w2aac23b9c25c21b9"></a>

**Crie um arquivo de configuração (por exemplo, config.json) com detalhes da conexão**

```
{
"source": {
"uri": "mongodb://username:password@source-mongodb-
host:27017/?replicaSet=rs0",
"db": "your_database",
"collection": "your_collection"
},
"target": {
"uri": "mongodb://username:password@target-docdb-
cluster.region.docdb.amazonaws.com:27017/?tls=true&tlsCAFile=global-
bundle.pem&replicaSet=rs0",
"db": "your_database",
"collection": "your_collection"
},
"options": {
"batch_size": 1000,
"threads": 4,
"sample_size": 0,
"verbose": true
}
}
```

**Execute a DataDiffer ferramenta**

```
python differ.py --config config.json
```

**Para coleções grandes, use a amostragem para validar um subconjunto de dados**

```
python differ.py --config config.json --sample-size 10000
```

**Para validar várias coleções, crie arquivos de configuração separados ou use o modo de lote**

```
python differ.py --batch-config batch_config.json
```

#### Como interpretar os resultados do
<a name="w2aac23b9c25c21c11"></a>

A saída da ferramenta será:
+ Total de documentos na origem e no destino
+ Número de documentos correspondentes
+ Número de documentos ausentes
+ Número de documentos com diferenças
+ Relatório detalhado das diferenças (se houver)

#### Práticas recomendadas
<a name="w2aac23b9c25c21c13"></a>

Veja a seguir as melhores práticas ao usar a DataDiffer ferramenta:
+ **Execute em fases**: primeiro valide a contagem de documentos, depois experimente os principais documentos e, por fim, faça uma comparação completa, se necessário.
+ **Verifique as diferenças de esquema**: o Amazon DocumentDB tem algumas limitações em comparação com o MongoDB. A ferramenta destacará tipos ou estruturas de dados incompatíveis.
+ **Valide durante períodos de silêncio**: execute a validação quando as operações de gravação forem mínimas para garantir a consistência.
+ **Monitore o uso de recursos**: o processo de comparação pode consumir muitos recursos. Ajuste o tamanho dos lotes e a contagem de linhas adequadamente.
+ **Valide os índices**: após a validação dos dados, certifique-se de que todos os índices necessários tenham sido criados no cluster de destino do Amazon DocumentDB.
+ **Resultados da validação de documentos**: mantenha um registro dos resultados da validação de cada coleção como parte da documentação de migração.

# Migração do Couchbase Server
<a name="migration-from-couchbase"></a>

**Topics**
+ [Introdução](#introduction)
+ [Comparação com o Amazon DocumentDB](#comparison-to-amazon-documentdb)
+ [Descoberta](#discovery)
+ [Planejamento](#planning)
+ [Migração](#migration)
+ [Validação](#validation)

## Introdução
<a name="introduction"></a>

Este guia apresenta os principais pontos a serem considerados ao migrar do Couchbase Server para o Amazon DocumentDB. Ele explica as considerações sobre as fases de descoberta, planejamento, execução e validação de sua migração. Também explica como realizar migrações offline e online.

## Comparação com o Amazon DocumentDB
<a name="comparison-to-amazon-documentdb"></a>


|  | **Servidor Couchbase** | ** Amazon DocumentDB** | 
| --- | --- | --- | 
| Organização de dados | Nas versões 7.0 e posteriores, os dados são organizados em compartimentos, escopos e coleções. Nas versões anteriores, os dados são organizados em compartimentos. | Os dados são organizados em bancos de dados e coleções. | 
| Compatibilidade | Existem separados APIs para cada serviço (por exemplo, dados, índice, pesquisa etc.). As pesquisas secundárias usam SQL\$1\$1 (anteriormente conhecido como N1QL); uma linguagem de consulta baseada no SQL padrão ANSI, por isso é familiar para muitos desenvolvedores. | O Amazon DocumentDB é [compatível com a API do MongoDB](compatibility.html). | 
| Arquitetura | O armazenamento é anexado a cada instância do cluster. Você não pode escalar a computação independentemente do armazenamento. | O Amazon DocumentDB foi projetado para a nuvem e para evitar as limitações das arquiteturas tradicionais de banco de dados. As [camadas de computação e armazenamento são separadas](db-clusters-understanding.html) no Amazon DocumentDB e a camada de computação pode [ser escalada](how-it-works.html) independentemente do armazenamento. | 
| Adicione capacidade de leitura sob demanda | Os clusters podem ser expandidos adicionando instâncias. Como o armazenamento é anexado à instância em que o serviço está sendo executado, o tempo necessário para escalar depende da quantidade de dados que precisam ser movidos para a nova instância ou rebalanceados. | Você pode obter escalabilidade de leitura para seu cluster Amazon DocumentDB [criando até 15 réplicas do Amazon DocumentDB](db-cluster-manage-performance.html#db-cluster-manage-scaling-reads) no cluster. Não há impacto na camada de armazenamento. | 
| Recupere-se rapidamente da falha do nó | Os clusters têm recursos de failover automático, mas o tempo necessário para que o cluster volte à força total depende da quantidade de dados que precisa ser movida para a nova instância. | O Amazon DocumentDB pode fazer [o failover do primário](failover.html) normalmente em 30 segundos e restaurar a força total do cluster em 8 a 10 minutos, independentemente da quantidade de dados no cluster. | 
| Dimensione o armazenamento à medida que os dados crescem | Para armazenamento de clusters autogerenciados e IOs não escale automaticamente. | [Armazenamento e IOs escalabilidade](db-cluster-manage-performance.html#db-cluster-manage-scaling-storage) automáticos do Amazon DocumentDB. | 
| Faça backup de dados sem afetar o desempenho | Os backups são executados pelo serviço de backup e não são habilitados por padrão. Como o armazenamento e a computação não estão separados, pode haver um impacto no desempenho. | Os backups do Amazon DocumentDB estão habilitados por padrão e não podem ser desativados. Os backups são gerenciados pela camada de armazenamento, portanto, não têm impacto na camada de computação. O Amazon DocumentDB oferece suporte à [restauração a partir de um snapshot de cluster](backup_restore-restore_from_snapshot.html) e [à restauração](backup_restore-point_in_time_recovery.html) em um momento específico. | 
| Durabilidade dos dados | Pode haver no máximo 3 cópias de réplicas de dados em um cluster para um total de 4 cópias. Cada instância em que o serviço de dados está sendo executado terá cópias ativas e 1, 2 ou 3 réplicas dos dados. | O Amazon DocumentDB mantém 6 cópias dos dados, não importa quantas instâncias computacionais existam, com um quorum de gravação de 4 e persistem como verdadeiras. Os clientes recebem uma confirmação após a camada de armazenamento persistir em 4 cópias dos dados. | 
| Consistência | A consistência imediata das K/V operações é suportada. O SDK do Couchbase encaminha as K/V solicitações para a instância específica que contém a cópia ativa dos dados. Assim que uma atualização for confirmada, o cliente terá a garantia de ler essa atualização. A replicação de atualizações em outros serviços (índice, pesquisa, análise, eventos) acaba sendo consistente. | Eventualmente, as réplicas do Amazon DocumentDB são consistentes. Se forem necessárias leituras de consistência imediata, o cliente poderá ler a partir da instância primária. | 
| Replicação | A replicação entre data centers (XDCR) fornece replicação filtrada, ativa-passiva/ativa-ativa de dados em muitas:muitas topologias. | [Os clusters globais do Amazon DocumentDB](global-clusters.html) fornecem replicação ativa-passiva em topologias de 1:muitas (até 10). | 

## Descoberta
<a name="discovery"></a>

A migração para o Amazon DocumentDB exige uma compreensão completa da carga de trabalho do banco de dados existente. A descoberta da carga de trabalho é o processo de analisar a configuração do cluster e as características operacionais do Couchbase — conjunto de dados, índices e carga de trabalho — para ajudar a garantir uma transição perfeita com o mínimo de interrupção.

### Configuração do cluster
<a name="cluster-configuration"></a>

O Couchbase usa uma arquitetura centrada em serviços em que cada recurso corresponde a um serviço. Execute o comando a seguir em seu cluster do Couchbase para determinar quais serviços estão sendo usados (consulte [Obter informações sobre nós](https://docs.couchbase.com/server/current/rest-api/rest-node-get-info.html)):

```
curl -v -u <administrator>:<password> \
  http://<ip-address-or-hostname>:<port>/pools/nodes | \
  jq '[.nodes[].services[]] | unique'
```

Exemplo de saída:

```
[
  "backup",
  "cbas",
  "eventing",
  "fts",
  "index",
  "kv",
  "n1ql"
]
```

Os serviços do Couchbase incluem o seguinte:

#### Serviço de dados (kv)
<a name="data-service-kv"></a>

O serviço de dados fornece read/write acesso aos dados na memória e no disco.

[O Amazon DocumentDB suporta K/V operações em dados JSON por meio da API MongoDB.](java-crud-operations.html)

#### Serviço de consulta (n1ql)
<a name="query-service-n1ql"></a>

O serviço de consulta oferece suporte à consulta de dados JSON via SQL\$1\$1.

O Amazon DocumentDB suporta a consulta de dados JSON por meio da API do MongoDB.

#### Serviço de indexação (índice)
<a name="index-service-index"></a>

O serviço de indexação cria e mantém índices nos dados, permitindo consultas mais rápidas.

O Amazon DocumentDB oferece suporte a um índice primário padrão e à criação de índices secundários em dados JSON por meio da API do MongoDB.

#### Serviço de pesquisa (fts)
<a name="search-service-fts"></a>

O serviço de pesquisa suporta a criação de índices para pesquisa de texto completo.

O recurso nativo de pesquisa de texto completo do Amazon DocumentDB permite que você [realize pesquisas de texto em grandes conjuntos de dados textuais usando índices de texto para fins especiais](text-search.html) por meio da API do MongoDB. Para casos de uso de pesquisa avançada, a [integração zero ETL do Amazon DocumentDB com o OpenSearch Amazon](https://aws.amazon.com/blogs/big-data/amazon-documentdb-zero-etl-integration-with-amazon-opensearch-service-is-now-available/) Service fornece recursos avançados de pesquisa, como pesquisa difusa, pesquisa de coleções cruzadas e pesquisa multilíngue, em dados do Amazon DocumentDB.

#### Serviço de análise (cbas)
<a name="analytics-service-cbas"></a>

O serviço de análise oferece suporte à análise de dados JSON quase em tempo real.

O Amazon DocumentDB oferece suporte a consultas ad-hoc em dados JSON por meio da API MongoDB. Você também pode [executar consultas complexas em seus dados JSON no Amazon DocumentDB usando o Apache Spark executado no Amazon](https://aws.amazon.com/blogs/database/run-complex-queries-on-massive-amounts-of-data-stored-on-your-amazon-documentdb-clusters-using-apache-spark-running-on-amazon-emr/) EMR.

#### Serviço de eventos (eventos)
<a name="eventing-service-eventing"></a>

O serviço de eventos executa a lógica de negócios definida pelo usuário em resposta às alterações nos dados.

O Amazon DocumentDB automatiza cargas de trabalho orientadas por eventos [invocando AWS Lambda funções sempre que os dados são alterados em seu cluster](https://docs.aws.amazon.com/lambda/latest/dg/with-documentdb-tutorial.html) Amazon DocumentDB.

#### Serviço de backup (backup)
<a name="backup-service-backup"></a>

O serviço de backup agenda backups de dados completos e incrementais e mescla backups de dados anteriores.

O Amazon DocumentDB faz backup contínuo de seus dados no Amazon S3 com um período de retenção de 1 a 35 dias para que você possa restaurá-los rapidamente em qualquer ponto dentro do período de retenção de backup. O Amazon DocumentDB também tira snapshots automáticos dos seus dados como parte desse processo de backup contínuo. Você também pode [gerenciar o backup e a restauração do Amazon DocumentDB](https://aws.amazon.com/blogs/storage/manage-backup-and-restore-of-amazon-documentdb-with-aws-backup/) com o. AWS Backup.

### Características operacionais
<a name="operational-characteristics"></a>

Use a [ferramenta Discovery para Couchbase](https://github.com/awslabs/amazon-documentdb-tools/tree/master/migration/discovery-tool-for-couchbase) para obter as seguintes informações sobre seu conjunto de dados, índices e carga de trabalho. Essas informações ajudarão você a dimensionar seu cluster Amazon DocumentDB.

#### Conjunto de dados
<a name="data-set"></a>

A ferramenta recupera as seguintes informações de bucket, escopo e coleção:

1. nome do bucket

1. tipo de bucket

1. nome do escopo

1. nome da coleção

1. tamanho total (bytes)

1. total de itens

1. tamanho do item (bytes)

#### Índices
<a name="indexes"></a>

A ferramenta recupera as seguintes estatísticas de índice e todas as definições de índice para todos os buckets. Observe que os índices primários são excluídos, pois o Amazon DocumentDB cria automaticamente um índice primário para cada coleção.

1. nome do bucket

1. nome do escopo

1. nome da coleção

1. nome do índice

1. tamanho do índice (bytes)

#### Workload
<a name="workload"></a>

A ferramenta recupera métricas de K/V consulta N1QL. K/V os valores métricos são coletados no nível do bucket e as métricas do SQL\$1\$1 são coletadas no nível do cluster.

As opções da linha de comando da ferramenta são as seguintes:

```
python3 discovery.py \
  --username <source cluster username> \
  --password <source cluster password> \
  --data_node <data node IP address or DNS name> \
  --admin_port <administration http REST port> \
  --kv_zoom <get bucket statistics for specified interval> \
  --tools_path <full path to Couchbase tools> \
  --index_metrics <gather index definitions and SQL++ metrics> \
  --indexer_port <indexer service http REST port> \
  --n1ql_start <start time for sampling> \
  --n1ql_step <sample interval over the sample period>
```

Veja a seguir um exemplo de comando:

```
python3 discovery.py \
  --username username \
  --password ******** \
  --data_node "http://10.0.0.1" \
  --admin_port 8091 \
  --kv_zoom week \
  --tools_path "/opt/couchbase/bin" \
  --index_metrics true \
  --indexer_port 9102 \
  --n1ql_start -60000 \
  --n1ql_step 1000
```

Os valores da métrica K/V serão baseados em amostras a cada 10 minutos na última semana (consulte o [método HTTP e o URI](https://docs.couchbase.com/server/current/rest-api/rest-bucket-stats.html#http-method-and-uri)). Os valores métricos do SQL\$1\$1 serão baseados em amostras a cada 1 segundo nos últimos 60 segundos (consulte [Rótulos gerais](https://docs.couchbase.com/server/current/rest-api/rest-statistics-single.html#general-labels)). A saída do comando estará nos seguintes arquivos:

**collection-stats.csv** — informações sobre bucket, escopo e coleta

```
bucket,bucket_type,scope_name,collection_name,total_size,total_items,document_size
beer-sample,membase,_default,_default,2796956,7303,383
gamesim-sample,membase,_default,_default,114275,586,196
pillowfight,membase,_default,_default,1901907769,1000006,1902
travel-sample,membase,inventory,airport,547914,1968,279
travel-sample,membase,inventory,airline,117261,187,628
travel-sample,membase,inventory,route,13402503,24024,558
travel-sample,membase,inventory,landmark,3072746,4495,684
travel-sample,membase,inventory,hotel,4086989,917,4457
...
```

**index-stats.csv** — nomes e tamanhos de índices

```
bucket,scope,collection,index-name,index-size
beer-sample,_default,_default,beer_primary,468144
gamesim-sample,_default,_default,gamesim_primary,87081
travel-sample,inventory,airline,def_inventory_airline_primary,198290
travel-sample,inventory,airport,def_inventory_airport_airportname,513805
travel-sample,inventory,airport,def_inventory_airport_city,487289
travel-sample,inventory,airport,def_inventory_airport_faa,526343
travel-sample,inventory,airport,def_inventory_airport_primary,287475
travel-sample,inventory,hotel,def_inventory_hotel_city,497125
...
```

**kv-stats.csv** — obtenha, defina e exclua métricas para todos os buckets

```
bucket,gets,sets,deletes
beer-sample,0,0,0
gamesim-sample,0,0,0
pillowfight,369,521,194
travel-sample,0,0,0
```

**n1ql-stats.csv** — SQL\$1\$1 seleciona, exclui e insere métricas para o cluster

```
selects,deletes,inserts
0,132,87
```

**indexes- .txt** <bucket-name>— definições de índice de todos os índices no bucket. Observe que os índices primários são excluídos, pois o Amazon DocumentDB cria automaticamente um índice primário para cada coleção.

```
CREATE INDEX `def_airportname` ON `travel-sample`(`airportname`)
CREATE INDEX `def_city` ON `travel-sample`(`city`)
CREATE INDEX `def_faa` ON `travel-sample`(`faa`)
CREATE INDEX `def_icao` ON `travel-sample`(`icao`)
CREATE INDEX `def_inventory_airport_city` ON `travel-sample`.`inventory`.`airport`(`city`)
CREATE INDEX `def_inventory_airport_faa` ON `travel-sample`.`inventory`.`airport`(`faa`)
CREATE INDEX `def_inventory_hotel_city` ON `travel-sample`.`inventory`.`hotel`(`city`)
CREATE INDEX `def_inventory_landmark_city` ON `travel-sample`.`inventory`.`landmark`(`city`)
CREATE INDEX `def_sourceairport` ON `travel-sample`(`sourceairport`)
...
```

## Planejamento
<a name="planning"></a>

Na fase de planejamento, você determinará os requisitos de cluster do Amazon DocumentDB e o mapeamento dos buckets, escopos e coleções do Couchbase para bancos de dados e coleções do Amazon DocumentDB.

### Requisitos de cluster do Amazon DocumentDB
<a name="amazon-documentdb-cluster-requirements"></a>

Use os dados coletados na fase de descoberta para dimensionar seu cluster Amazon DocumentDB. Consulte [Dimensionamento de instâncias](best_practices.html#best_practices-instance_sizing) para obter mais informações sobre como dimensionar seu cluster Amazon DocumentDB.

### Mapeamento de compartimentos, escopos e coleções para bancos de dados e coleções
<a name="mapping-buckets-scopes-and-collections-to-databases-and-collections"></a>

Determine os bancos de dados e coleções que existirão no (s) seu (s) cluster (s) do Amazon DocumentDB. Considere as opções a seguir, dependendo de como os dados são organizados em seu cluster do Couchbase. Essas não são as únicas opções, mas fornecem pontos de partida para você considerar.

#### Couchbase Server 6.x ou anterior
<a name="couchbase-6x-or-earlier"></a>

##### Buckets do Couchbase para coleções do Amazon DocumentDB
<a name="couchbase-buckets-to-amazon-documentdb-collections"></a>

Migre cada bucket para uma coleção diferente do Amazon DocumentDB. Nesse cenário, o valor do documento do Couchbase será usado como o `id` valor do Amazon `_id` DocumentDB.

![\[Buckets do Couchbase Server 6.x ou anteriores para coleções do Amazon DocumentDB\]](http://docs.aws.amazon.com/pt_br/documentdb/latest/developerguide/images/buckets-to-collections.png)


#### Couchbase Server 7.0 ou posterior
<a name="couchbase-70-or-later"></a>

##### Coleções do Couchbase para coleções do Amazon DocumentDB
<a name="couchbase-collections-to-amazon-documentdb-collections"></a>

Migre cada coleção para uma coleção diferente do Amazon DocumentDB. Nesse cenário, o valor do documento do Couchbase será usado como o `id` valor do Amazon `_id` DocumentDB.

![\[Coleções do Couchbase Server 7.0 ou posterior para coleções do Amazon DocumentDB\]](http://docs.aws.amazon.com/pt_br/documentdb/latest/developerguide/images/collections-to-collections.png)


## Migração
<a name="migration"></a>

### Migração de índices
<a name="index-migration"></a>

A migração para o Amazon DocumentDB envolve a transferência não apenas de dados, mas também de índices para manter o desempenho das consultas e otimizar as operações do banco de dados. Esta seção descreve o step-by-step processo detalhado de migração de índices para o Amazon DocumentDB e, ao mesmo tempo, garante compatibilidade e eficiência.

Use o [Amazon Q](https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/chat-with-q.html) para converter instruções SQL\$1\$1 em `CREATE INDEX` comandos do Amazon `createIndex()` DocumentDB.

1. Faça o upload dos arquivos **indexes- .txt** <bucket name>criados pela Discovery Tool for Couchbase.

1. Insira o seguinte prompt:

   `Convert the Couchbase CREATE INDEX statements to Amazon DocumentDB createIndex commands`

O Amazon Q gerará comandos equivalentes do Amazon DocumentDB`createIndex()`. Observe que talvez seja necessário atualizar os nomes das coleções com base em como você [mapeou os buckets, escopos e coleções do Couchbase para as coleções do Amazon DocumentDB](#mapping-buckets-scopes-and-collections-to-databases-and-collections).

Por exemplo:

**indexes-beer-sample.txt**

```
CREATE INDEX `beerType` ON `beer-sample`(`type`)
CREATE INDEX `code` ON `beer-sample`(`code`) WHERE (`type` = "brewery")
```

Exemplo de saída do Amazon Q (trecho):

```
db.beerSample.createIndex(
  { "type": 1 },
  {
    "name": "beerType",
    "background": true
  }
)

db.beerSample.createIndex(
  { "code": 1 },
  {
    "name": "code",
    "background": true,
    "partialFilterExpression": { "type": "brewery" }
  }
)
```

Para quaisquer índices que o Amazon Q não consiga converter, consulte [Gerenciando índices do Amazon DocumentDB](managing-indexes.html) e [Índices e propriedades de índice](mongo-apis.html#mongo-apis-index) para obter mais informações.

### Refatore o código para usar o MongoDB APIs
<a name="refactor-code-to-use-the-mongodb-apis"></a>

Os clientes usam o Couchbase SDKs para se conectar ao Couchbase Server. Os clientes do Amazon DocumentDB usam drivers do MongoDB para se conectar ao Amazon DocumentDB. Todos os idiomas suportados pelo Couchbase também SDKs são suportados pelos drivers do MongoDB. Consulte [MongoDB](https://www.mongodb.com/docs/drivers/) Drivers para obter mais informações sobre o driver para seu idioma.

Como APIs são diferentes entre o Couchbase Server e o Amazon DocumentDB, você precisará refatorar seu código para usar o MongoDB apropriado. APIs Você pode usar o [Amazon Q](https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/chat-with-q.html) para converter as chamadas de K/V API e as consultas SQL\$1\$1 no MongoDB equivalente: APIs

1. Faça upload do (s) arquivo (s) do código-fonte.

1. Insira o seguinte prompt:

   `Convert the Couchbase API code to Amazon DocumentDB API code`

Usando o exemplo de [código Hello Couchbase Python](https://docs.couchbase.com/python-sdk/current/hello-world/start-using-sdk.html#hello-couchbase), o Amazon Q gera o seguinte (trecho):

```
from datetime import timedelta
from pymongo import MongoClient

# Connection parameters
database_name = "travel-sample"

# Connect to Amazon DocumentDB cluster
client = MongoClient('<Amazon DocumentDB connection string>')

# Get reference to database and collection
db = client['travel-sample']
airline_collection = db['airline']

# upsert document function
def upsert_document(doc):
    print("\nUpsert Result: ")
    try:
        # key will equal: "airline_8091"
        key = doc["type"] + "_" + str(doc["id"])
        doc['_id'] = key # Amazon DocumentDB uses _id as primary key
        result = airline_collection.update_one(
            {'_id': key},
            {'$set': doc},
            upsert=True
        )
        print(f"Modified count: {result.modified_count}")
    except Exception as e:
        print(e)

# get document function
def get_airline_by_key(key):
    print("\nGet Result: ")
    try:
        result = airline_collection.find_one({'_id': key})
        print(result)
    except Exception as e:
        print(e)

# query for document by callsign
def lookup_by_callsign(cs):
    print("\nLookup Result: ")
    try:
        result = airline_collection.find(
            {'callsign': cs},
            {'name': 1, '_id': 0}
        )
        for doc in result:
            print(doc['name'])
    except Exception as e:
        print(e)

# Test document
airline = {
    "type": "airline",
    "id": 8091,
    "callsign": "CBS",
    "iata": None,
    "icao": None,
    "name": "Couchbase Airways",
}

upsert_document(airline)
get_airline_by_key("airline_8091")
lookup_by_callsign("CBS")
```

Consulte [Conexão programática ao Amazon DocumentDB para ver exemplos de conexão](connect_programmatically.html) com o Amazon DocumentDB em Python, Node.js, PHP, Go, Java, C\$1/.NET, R e Ruby.

### Selecione a abordagem de migração
<a name="select-the-migration-approach"></a>

Ao migrar dados para o Amazon DocumentDB, há duas opções:

1. [migração off-line](#offline-migration)

1. [migração online](#online-migration)

#### Migração offline
<a name="offline-migration"></a>

Considere uma migração off-line quando:
+ **O tempo de inatividade é aceitável:** a migração off-line envolve interromper as operações de gravação no banco de dados de origem, exportar os dados e importá-los para o Amazon DocumentDB. Esse processo gera tempo de inatividade para seu aplicativo. Se seu aplicativo ou carga de trabalho puder tolerar esse período de indisponibilidade, a migração off-line é uma opção viável.
+ **Migração de conjuntos de dados menores ou realização de provas de conceito:** Para conjuntos de dados menores, o tempo necessário para o processo de exportação e importação é relativamente curto, tornando a migração off-line um método rápido e simples. Também é adequado para desenvolvimento, testes e proof-of-concept ambientes em que o tempo de inatividade é menos crítico.
+ **Simplicidade é uma prioridade:** o método off-line, usando cbexport e mongoimport, geralmente é a abordagem mais direta para migrar dados. Isso evita as complexidades da captura de dados de alteração (CDC) envolvida nos métodos de migração on-line.
+ **Nenhuma alteração contínua precisa ser replicada:** se o banco de dados de origem não estiver recebendo ativamente as alterações durante a migração ou se essas alterações não forem essenciais para serem capturadas e aplicadas ao destino durante o processo de migração, uma abordagem off-line é apropriada.

**Topics**
+ [Couchbase Server 6.x ou anterior](#couchbase-6x-or-earlier-offline)
+ [Couchbase Server 7.0 ou posterior](#couchbase-70-or-later-offline)

##### Couchbase Server 6.x ou anterior
<a name="couchbase-6x-or-earlier-offline"></a>

##### Bucket do Couchbase para a coleção Amazon DocumentDB
<a name="couchbase-bucket-to-amazon-documentdb-collection-offline"></a>

Exporte dados usando [cbexport json](https://docs-archive.couchbase.com/server/6.6/tools/cbexport-json.html) para criar um despejo JSON de todos os dados no bucket. Para a `--format` opção, você pode usar `lines` ou`list`.

```
cbexport json \
  --cluster <source cluster endpoint> \
  --bucket <bucket name> \
  --format <lines | list> \
  --username <username> \
  --password <password> \
  --output export.json \
  --include-key _id
```

Importe os dados para uma coleção do Amazon DocumentDB usando o [mongoimport](backup_restore-dump_restore_import_export_data.html#backup_restore-dump_restore_import_export_data-mongoimport) com a opção apropriada para importar as linhas ou a lista:

linhas:

```
mongoimport \
  --db <database> \
  --collection <collection> \
  --uri "<Amazon DocumentDB cluster connection string>" \
  --file export.json
```

lista:

```
mongoimport \
  --db <database> \
  --collection <collection> \
  --uri "<Amazon DocumentDB cluster connection string>" \
  --jsonArray \
  --file export.json
```

##### Couchbase Server 7.0 ou posterior
<a name="couchbase-70-or-later-offline"></a>

Para realizar uma migração off-line, use as ferramentas cbexport e mongoimport:

##### Bucket do Couchbase com escopo e coleção padrão
<a name="couchbase-bucket-with-default-scope-and-default-collection-offline"></a>

Exporte dados usando [cbexport json](https://docs.couchbase.com/server/current/tools/cbexport-json.html) para criar um despejo JSON de todas as coleções no bucket. Para a `--format` opção, você pode usar `lines` ou`list`.

```
cbexport json \
  --cluster <source cluster endpoint> \
  --bucket <bucket name> \
  --format <lines | list> \
  --username <username> \
  --password <password> \
  --output export.json \
  --include-key _id
```

Importe os dados para uma coleção do Amazon DocumentDB usando o [mongoimport](backup_restore-dump_restore_import_export_data.html#backup_restore-dump_restore_import_export_data-mongoimport) com a opção apropriada para importar as linhas ou a lista:

linhas:

```
mongoimport \
  --db <database> \
  --collection <collection> \
  --uri "<Amazon DocumentDB cluster connection string>" \
  --file export.json
```

lista:

```
mongoimport \
  --db <database> \
  --collection <collection> \
  --uri "<Amazon DocumentDB cluster connection string>" \
  --jsonArray \
  --file export.json
```

##### Coleções do Couchbase para coleções do Amazon DocumentDB
<a name="couchbase-collections-to-amazon-documentdb-collections-offline"></a>

Exporte dados usando [cbexport json](https://docs.couchbase.com/server/current/tools/cbexport-json.html) para criar um despejo JSON de cada coleção. Use a `--include-data` opção de exportar cada coleção. Para a `--format` opção, você pode usar `lines` ou`list`. Use as `--collection-field` opções `--scope-field` e para armazenar o nome do escopo e da coleção nos campos especificados em cada documento JSON.

```
cbexport json \
  --cluster <source cluster endpoint> \
  --bucket <bucket name> \
  --include-data <scope name>.<collection name> \
  --format <lines | list> \
  --username <username> \
  --password <password> \
  --output export.json \
  --include-key _id \
  --scope-field "_scope" \
  --collection-field "_collection"
```

Como o cbexport adicionou os `_collection` campos `_scope` e a cada documento exportado, você pode removê-los de todos os documentos no arquivo de exportação por meio de pesquisa e substituição`sed`, ou qualquer método de sua preferência.

Importe os dados de cada coleção para uma coleção do Amazon DocumentDB usando o [mongoimport](backup_restore-dump_restore_import_export_data.html#backup_restore-dump_restore_import_export_data-mongoimport) com a opção apropriada para importar as linhas ou a lista:

linhas:

```
mongoimport \
--db <database> \
--collection <collection> \
--uri "<Amazon DocumentDB cluster connection string>" \
--file export.json
```

lista:

```
mongoimport \
--db <database> \
--collection <collection> \
--uri "<Amazon DocumentDB cluster connection string>" \
--jsonArray \
--file export.json
```

#### migração online
<a name="online-migration"></a>

Considere uma migração on-line quando precisar minimizar o tempo de inatividade e as mudanças contínuas precisarem ser replicadas para o Amazon DocumentDB quase em tempo real.

Consulte [Como realizar uma migração ao vivo do Couchbase para o Amazon DocumentDB para](https://github.com/awslabs/amazon-documentdb-tools/tree/master/migration/migration-utility-for-couchbase) saber como realizar uma migração ao vivo para o Amazon DocumentDB. A documentação orienta você na implantação da solução e na execução de uma migração ao vivo de um bucket para um cluster do Amazon DocumentDB.

**Topics**
+ [Couchbase Server 6.x ou anterior](#couchbase-6x-or-earlier-online)
+ [Couchbase Server 7.0 ou posterior](#couchbase-70-or-later-online)

##### Couchbase Server 6.x ou anterior
<a name="couchbase-6x-or-earlier-online"></a>

##### Bucket do Couchbase para a coleção Amazon DocumentDB
<a name="couchbase-bucket-to-amazon-documentdb-collection-online"></a>

O [utilitário de migração do Couchbase](https://github.com/awslabs/amazon-documentdb-tools/tree/master/migration/migration-utility-for-couchbase) é pré-configurado para realizar uma migração on-line de um bucket do Couchbase para uma coleção do Amazon DocumentDB. Analisando a configuração do [conector do coletor](https://github.com/awslabs/amazon-documentdb-tools/blob/master/migration/migration-utility-for-couchbase/migration-utility-connectors.yaml), o `document.id.strategy` parâmetro é configurado para usar o valor da chave da mensagem como o valor do `_id` campo (consulte [Propriedades da estratégia de identificação do conector do coletor](https://www.mongodb.com/docs/kafka-connector/current/sink-connector/configuration-properties/id-strategy/#std-label-sink-configuration-id-strategy)):

```
ConnectorConfiguration:
  document.id.strategy: 'com.mongodb.kafka.connect.sink.processor.id.strategy.ProvidedInKeyStrategy'
```

##### Couchbase Server 7.0 ou posterior
<a name="couchbase-70-or-later-online"></a>

##### Bucket do Couchbase com escopo e coleção padrão
<a name="couchbase-bucket-with-default-scope-and-default-collection-online"></a>

O [utilitário de migração do Couchbase](https://github.com/awslabs/amazon-documentdb-tools/tree/master/migration/migration-utility-for-couchbase) é pré-configurado para realizar uma migração on-line de um bucket do Couchbase para uma coleção do Amazon DocumentDB. Analisando a configuração do [conector do coletor](https://github.com/awslabs/amazon-documentdb-tools/blob/master/migration/migration-utility-for-couchbase/migration-utility-connectors.yaml), o `document.id.strategy` parâmetro é configurado para usar o valor da chave da mensagem como o valor do `_id` campo (consulte [Propriedades da estratégia de identificação do conector do coletor](https://www.mongodb.com/docs/kafka-connector/current/sink-connector/configuration-properties/id-strategy/#std-label-sink-configuration-id-strategy)):

```
ConnectorConfiguration:
  document.id.strategy: 'com.mongodb.kafka.connect.sink.processor.id.strategy.ProvidedInKeyStrategy'
```

##### Coleções do Couchbase para coleções do Amazon DocumentDB
<a name="couchbase-collections-to-amazon-documentdb-collections-online"></a>

Configure o [conector de origem](https://github.com/awslabs/amazon-documentdb-tools/blob/master/migration/migration-utility-for-couchbase/migration-utility-connectors.yaml) para transmitir cada coleção do Couchbase em cada escopo para um tópico separado (consulte [Opções de configuração de origem](https://docs.couchbase.com/kafka-connector/current/source-configuration-options.html#couchbase.collections)). Por exemplo:

```
ConnectorConfiguration:
  # add couchbase.collections configuration
  couchbase.collections: '<scope 1>.<collection 1>, <scope 1>.<collection 2>, ...'
```

Configure o [conector do coletor](https://github.com/awslabs/amazon-documentdb-tools/blob/master/migration/migration-utility-for-couchbase/migration-utility-connectors.yaml) para transmitir de cada tópico para uma coleção separada do Amazon DocumentDB (consulte [Propriedades de configuração do conector do coletor](https://github.com/mongodb-labs/mongo-kafka/blob/master/docs/sink.md#sink-connector-configuration-properties)). Por exemplo:

```
ConnectorConfiguration:
  # remove collection configuration  
  #collection: 'test'
  
  # modify topics configuration
  topics: '<bucket>.<scope 1>.<collection 1>, <bucket>.<scope 1>.<collection 2>, ...'

  # add topic.override.%s.%s configurations for each topic 
  topic.override.<bucket>.<scope 1>.<collection 1>.collection: '<collection>'
  topic.override.<bucket>.<scope 1>.<collection 2>.collection: '<collection>'
```

## Validação
<a name="validation"></a>

Esta seção fornece um processo de validação detalhado para verificar a consistência e a integridade dos dados após a migração para o Amazon DocumentDB. As etapas de validação se aplicam independentemente do método de migração.

**Topics**
+ [Verifique se todas as coleções existem no destino](#validation-checklist-step-1)
+ [Verifique a contagem de documentos entre os clusters de origem e de destino](#validation-checklist-step-2)
+ [Compare documentos entre clusters de origem e de destino](#validation-checklist-step-3)

### Verifique se todas as coleções existem no destino
<a name="validation-checklist-step-1"></a>

#### Fonte do Couchbase
<a name="source-verify-collections"></a>

opção 1: banco de trabalho de consulta

```
SELECT RAW `path`
  FROM system:keyspaces
  WHERE `bucket` = '<bucket>'
```

opção 2: ferramenta [cbq](https://docs.couchbase.com/server/current/cli/cbq-tool.html)

```
cbq \
  -e <source cluster endpoint> \
  -u <username> \
  -p <password> \
  -q "SELECT RAW `path`
       FROM system:keyspaces
       WHERE `bucket` = '<bucket>'"
```

#### Destino do Amazon DocumentDB
<a name="target-verify-collections"></a>

mongosh (consulte [Connect to your Amazon DocumentDB cluster](connect-ec2-manual.html#manual-connect-ec2.connect-use)):

```
db.getSiblingDB('<database>')
db.getCollectionNames()
```

### Verifique a contagem de documentos entre os clusters de origem e de destino
<a name="validation-checklist-step-2"></a>

#### Fonte do Couchbase
<a name="source-verify-document-count"></a>

##### Couchbase Server 6.x ou anterior
<a name="source-verify-document-count-couchbase-6x-or-earlier"></a>

opção 1: banco de trabalho de consulta

```
SELECT COUNT(*)
FROM `<bucket>`
```

opção 2: [cbq](https://docs.couchbase.com/server/current/cli/cbq-tool.html)

```
cbq \
  -e <source cluster endpoint> \
  -u <username> \
  -p <password> \
  -q "SELECT COUNT(*)
       FROM `<bucket:>`"
```

##### Couchbase Server 7.0 ou posterior
<a name="source-verify-document-count-couchbase-70-or-later"></a>

opção 1: banco de trabalho de consulta

```
SELECT COUNT(*)
FROM `<bucket>`.`<scope>`.`<collection>`
```

opção 2: [cbq](https://docs.couchbase.com/server/current/cli/cbq-tool.html)

```
cbq \
  -e <source cluster endpoint> \
  -u <username> \
  -p <password> \
  -q "SELECT COUNT(*)
       FROM `<bucket:>`.`<scope>`.`<collection>`"
```

#### Destino do Amazon DocumentDB
<a name="target-verify-document-count"></a>

mongosh (consulte [Connect to your Amazon DocumentDB cluster](connect-ec2-manual.html#manual-connect-ec2.connect-use)):

```
db = db.getSiblingDB('<database>')
db.getCollection('<collection>').countDocuments()
```

### Compare documentos entre clusters de origem e de destino
<a name="validation-checklist-step-3"></a>

#### Fonte do Couchbase
<a name="source-compare-documents"></a>

##### Couchbase Server 6.x ou anterior
<a name="source-compare-documents-couchbase-6x-or-earlier"></a>

opção 1: banco de trabalho de consulta

```
SELECT META().id as _id, *
FROM `<bucket>`
LIMIT 5
```

opção 2: [cbq](https://docs.couchbase.com/server/current/cli/cbq-tool.html)

```
cbq \
  -e <source cluster endpoint> 
  -u <username> \
  -p <password> \
  -q "SELECT META().id as _id, *
       FROM `<bucket>` \
       LIMIT 5"
```

##### Couchbase Server 7.0 ou posterior
<a name="source-compare-documents-couchbase-70-or-later"></a>

opção 1: banco de trabalho de consulta

```
SELECT COUNT(*)
FROM `<bucket>`.`<scope>`.`<collection>`
```

opção 2: [cbq](https://docs.couchbase.com/server/current/cli/cbq-tool.html)

```
cbq \
  -e <source cluster endpoint> \
  -u <username> \
  -p <password> \
  -q "SELECT COUNT(*)
       FROM `<bucket:>`.`<scope>`.`<collection>`"
```

#### Destino do Amazon DocumentDB
<a name="target-compare-documents"></a>

mongosh (consulte [Connect to your Amazon DocumentDB cluster](connect-ec2-manual.html#manual-connect-ec2.connect-use)):

```
db = db.getSiblingDB('<database>')
db.getCollection('<collection>').find({
  _id: {
    $in: [
      <_id 1>, <_id 2>, <_id 3>, <_id 4>, <_id 5>
    ]
  }
})
```