Dump DocumentDB (collections) para AWS S3
Tags: documentdb, backup, s3, mongodb
Published: 2024-01-04 13:13:53

Olá e bem-vindo a este tutorial técnico sobre como fazer o backup de coleções do DocumentDB e armazená-las no AWS S3. Neste guia, você aprenderá como executar um script que automatiza o processo de dump das coleções, armazenando os dados em formato JSON, compactando-os e enviando-os para o AWS S3. Essa prática é fundamental para garantir a integridade dos seus dados e criar cópias de segurança eficientes.


---

**Explicação**:

Este script acessa o DocumentDB, faz o backup de todas as collections em formato .json de uma base específica, armazena-os em um diretório chamado "export", compacta todos esses arquivos .json em um arquivo .gz e armazena o arquivo compactado no diretório "export_gz", adicionando a data do dia. Após a compactação, envia os arquivos .gz para o bucket específico e apaga o conteúdo das pastas "export" e "export_gz".

* Neste caso eu uso um disco magnético separado do sistema operacional, para rotatividade do backup.
* É necessário baixar a .pem do DocumentDB e adicionar no sistema operacional, tem menção dela no script.


---

**1- Listagem de diretório da automação:**


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6aow4epac9yai2j8rjzk.png)

* `collections.txt` = lista das collections da database que irá fazer o backup
* `export` = pasta de destino dos arquivos .json de cada collection
* `export_gz` = pasta de destino das colections em .json compactado em .gz
* `mongodump.sh` = script para fazer o dump (necessário dar permissão de execução no arquivo)


---

**2- Script**

```bash
#!/bin/bash

# nome do arquivo com a lista de coleções
collection_file=/backup/collections.txt

# nome do arquivo de saída para cada coleção
output_file_prefix=db_dump

# configurações do banco de dados
host=cluster-mongodb.cluster-ro-xxxxxxxxxxxxxxxx.us-east-1.docdb.amazonaws.com:27017
database=sua_database
username=seu_usuario
password=sua_senha
sslCAFile=/home/ubuntu/rds-combined-ca-bundle.pem

# loop sobre as coleções no arquivo
while read collection; do
    echo "Exportando coleção \$collection..."
    # exporta a coleção atual
    mongoexport --ssl \
        --host="\$host" \
        --collection="\$collection" \
        --db="\$database" \
        --out="/backup/export/\$output_file_prefix.\$collection.json" \
        --username="\$username" \
        --password="\$password" \
        --sslCAFile "\$sslCAFile"
done < "\$collection_file"
tar -cvzf /backup/export_gz/documentdb_dump_\$(date +%d-%m-%Y).tar.gz /backup/export/
aws s3 sync /backup/export_gz s3://export-backup-documentdb
sudo rm -rf /backup/export_gz/*.*
sudo rm -rf /backup/export/*.*
```


---

**Observações**:

* `collection_file` = arquivo com o nome de todas as collections do banco que irá fazer backup;
* `output_file_prefix` = prefixo de saida para coleção (Não é necessário alterar);
* `host` = endpoint do banco com prefixo "ro”, read only;
* `username` = usuário master do banco;
* `password` = senha do banco;
* `sslCAFile` = local onde o arquivo pem do DocumentDB esta alocado dentro do sistema operacional.
* A instância necessita ter role para acesso ao AWS S3 e os pacotes aws-cli e tar instalados.

**Strings**:

* `out` = pasta que ira armazenar os arquivos das collections em **.json**, adicionando o nome do prefixo + nome da collection;
* `Linha com “tar”` = essa linha compacta em **.gz** todos os arquivos da pasta /backup/export/, adicionando a data e o armazena o **.gz** na pasta **/backup/export_gz;**
* `Linhas com “sudo rm`” = Limpa os diretórios para a Proxima execução do backup.


---

**Output**:


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9yzy7z5pdokbq1zot5by.png)