MongoDB Atlas Data Lake
Tags: mongodb, nosql, bigdata, datascience
Published: 2019-07-22 21:17:52

---
title: MongoDB Atlas Data Lake
published: true
description: Conheça o novo recurso disponível no MongoDB Atlas e veja como configurar um AWS S3 Bucket para fazer queries como se estivesse no MongoDB
tags: mongodb, nosql, big data, data science
---

Eae pessoALL, tudo bem? Hoje vou falar um pouquinho sobre a nova funcionalidade disponível no MongoDB Atlas - o MongoDB Atlas Data Lake! Ainda está na versão Beta, mas já podemos testar e sentir um pouco mais sobre o que essa funcionalidade vai nos proporcionar... se você preferir no final do artigo tem o link para o vídeo onde eu demonstro como fazer. Vamos lá?

### MongoDB Atlas Data Lake

Seguindo as tendências de Big Data, e olhando para o esse universo tão grande, em Junho durante o MongoWorld fomos apresentados a uma ferramenta que permite utilizar MQL (MongoDB Query Language) para fazer consultas em diversos tipos de arquivos num bucket do S3 na AWS (até agora é o único repositório compatível). Com apenas alguns cliques e algumas configurações é possível já sair executando consultas nos arquivos do bucket como se estivesse em um cluster MongoDB sem a necessidade de importação dos arquivos. Vários formatos são suportados como TXT, CSV, PARQUET, AVRO e claro, JSON.

### Configurando um novo Data Lake

Como disse anteriormente, esse recurso é parte do MongoDB Atlas, portanto, para utilizá-lo você precisará ter um projeto rodando lá. Se você ainda não tem não se preocupe, é super simples e requer apenas seu e-mail e uma senha (não é necessário cartão de crédito), para saber como iniciar um projeto no MongoDB Atlas [veja aqui](https://dev.to/delbussoweb/conhecendo-o-mongodb-atlas---o-dbaas-da-mongodb-1alo).

Após criado o projeto você verá no menu a opção "Data Lake Beta":
 ![](https://thepracticaldev.s3.amazonaws.com/i/g7k99d1755uednsd7r5x.png)

Entrando nessa opção clique em "Try MongoDB Atlas Data Lake", você será guiado por um passo-a-passo bem simples:

![](https://thepracticaldev.s3.amazonaws.com/i/gs9wn4t7aa5z3is6r6cz.png)

Clicando em "Configure a New Data Lake", vamos dar um nome para nosso novo Data Lake:

![](https://thepracticaldev.s3.amazonaws.com/i/6mdyphwtmfhber59kru9.png)

Agora vamos dizer o nome do nosso bucket no S3. A configuração do bucket no S3 não é o foco do artigo, aqui presumo que você já tenha criado uma conta na AWS e tenha um bucket configurado, o meu bucket é o *meetupatlasdatalake*:

![](https://thepracticaldev.s3.amazonaws.com/i/yvqwqrxilxxho5tgdb8p.png)

Note que você pode conectar mais de um bucket, é só separar os nomes por vírgula!

Após informar qual é o bucket, clique em "Save and Continue". Nesse momento o Atlas Data Lake nos informará o *Unique External ID* e o *Atlas AWS IAM User ARN*. Esses dados serão utilizados para a configuração da AWS IAM role bem como para a criação de uma policy no S3.

Basicamente iremos dar um nome para a role que será criada na AWS, no meu caso a role se chama *dataLakeRole*.

Seguindo o passo-a-passo, agora criaremos um arquivo chamado *dl-role-trust.json*, esse arquivo vai descrever uma política que você precisará para criar a IAM role. Copie o conteúdo descrito no passo 2 e cole nesse arquivo json:

![](https://thepracticaldev.s3.amazonaws.com/i/53z0qq6k79xd1jby49ud.png)

O passo três utiliza o AWS CLI para rodarmos o comando para a criação da IAM role para o Atlas utilizar:

![](https://thepracticaldev.s3.amazonaws.com/i/9zikeusay07tays5x0d4.png)

A saída desse comando nos dará uma informação para utilizarmos mais a frente, copie o conteúdo da chave **Arn**:

![](https://thepracticaldev.s3.amazonaws.com/i/qfl9l9umd75i0huhph4x.png)

Agora criaremos mais um arquivo chamado *dl-s3-role-policy.json* e colocaremos nele o conteúdo do passo quatro. Esse arquivo tem as ações que são permitidas para a IAM role que criamos no passo anterior:

![](https://thepracticaldev.s3.amazonaws.com/i/4b8fj28ugo17aey9p6ko.png)

E finalmente utilizaremos novamente o AWS CLI para executar o comando para vincularmos essas ações à IAM role (esse comando não gerará nenhuma saída, não se preocupe!):

![](https://thepracticaldev.s3.amazonaws.com/i/9u00ioq54g52ehv8otqg.png)

Clicando no botão "Next", vamos agora informar a *Role Arn*, é justamente o conteúdo da chave Arn gerada no passo três:

![](https://thepracticaldev.s3.amazonaws.com/i/urykvg7k337cyev7n2rh.png)

Agora é só clicar no botão "Validate & Launch"...

### Conectando no Atlas Data Lake

Com os acessos configurados, agora já podemos nos conectar ao nosso novo Data Lake, como passo 2 da tela que está sendo exibida, clicaremos em connect e vamos escolher como iremos nos conectar:

![](https://thepracticaldev.s3.amazonaws.com/i/mm0de2d33nqkxygjjk7g.png)

É muito importante lembramos de liberar o nosso IP para acesso ao MongoDB Atlas e criar um usuário para o projeto (no caso de um projeto novo):

![](https://thepracticaldev.s3.amazonaws.com/i/3lx2mz6by97z97om4ie1.png)

Após o IP liberado e usuário criado eu escolhi me conectar através do Mongo Shell, só precisaremos copiar a linha de comando e substituir o usuário e senha que acabamos de criar para nos conectarmos:

![](https://thepracticaldev.s3.amazonaws.com/i/384pu31v9wlf6h2jnyhu.png)

Feito isso já estaremos dentro de uma instância MongoDB conectada diretamente com o nosso bucket no S3!

![](https://thepracticaldev.s3.amazonaws.com/i/2xxt2ea9ba22xh438gaa.png)

### Configurando o acesso aos arquivos no bucket

Nesse passo definimos alguns parâmetros para a "criação" do database e das collections a partir dos arquivos que estão no bucket. Utilizei um script bem simples que irá criar um database chamado *sample* e uma collection para cada arquivo no meu bucket, no meu caso tenho apenas o arquivo *restaurants.json* lá. Para todas as definições de configuração dê uma olhada na [documentação](https://docs.atlas.mongodb.com/reference/data-lake-configuration/). O script abaixo tem o necessário para podermos acessar os arquivos que estão lá:

```javascript
use admin;
db.runCommand( { "storageSetConfig": {
  "stores": [{
    "s3": {
      "name": "s3store",              // Cria um store S3
      "region":"us-east-1",           // Altera o código da região do bucket
      "bucket": "meetupatlasdatalake" // Altera o nome do seu bucket
    }
  }],
  "databases": {
    "sample": {                    // Cria um novo database chamado sample
      "*": [{                      // Criará uma collection para cada arquivo no bucket
        "store": "s3store",        // Link o store S3 especificado acima
        "definition": "/{collectionName()}"
      }]
    }
  }
}})
```

Após executar o comando acima já teremos o database criado e a collection restaurants:

![](https://thepracticaldev.s3.amazonaws.com/i/zcxb00ks3clezvrb6ywk.png)

Agora é só executar alguns comandos como se estivéssemos numa instância normal de MongoDB:

```javascript
db.restaurants.count()
```

```javascript
db.restaurantes.findOne()
```

E até mesmo operações utilizando o [Aggregation Framework](https://docs.mongodb.com/manual/aggregation/)

```javascript
db.restaurants.aggregate([
    {
        $match: {
            name: "Wendy'S"
        }
    }, 
    {
        $group: {
            _id: "$name",
            total: {
                $sum: 1
            }
        }
    }
])
```

### Acompanhando o consumo

Muito bacana, mas quanto isso custa? Bem, hoje o preço é de 5 USD por TB trafegado e você pode acompanhar o consumo através do painel do Atlas Data Lake:

![](https://thepracticaldev.s3.amazonaws.com/i/1uugim8pmszb3b2bl4bb.png)

### Conclusão

Bem, viram como é simples conectar? Como disse é um funcionalidade que ainda está em Beta, e com certeza ainda vai evoluir muito!

Não deixe de conferir também o [vídeo](https://youtu.be/Wbh-UYg8rME) que explica todos isso que fizemos aqui e também compartilhe à vontade e deixe seu like aqui!

Um abraço e até mais!