DEV Community

Leandro Domingues
Leandro Domingues

Posted on

MongoDB Atlas Data Lake

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.

Após criado o projeto você verá no menu a opção "Data Lake Beta":

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

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

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:

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:

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

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

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:

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!):

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

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:

É 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):

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:

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

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. O script abaixo tem o necessário para podermos acessar os arquivos que estão lá:

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:

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

db.restaurants.count()
db.restaurantes.findOne()

E até mesmo operações utilizando o Aggregation Framework

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:

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 que explica todos isso que fizemos aqui e também compartilhe à vontade e deixe seu like aqui!

Um abraço e até mais!

Top comments (0)