Simplificando o desenvolvimento nativo da nuvem com o Gitpod e o MongoDB Atlas
Avalie esse Tutorial
Os desenvolvedores estão mudando cada vez mais do modelo de desenvolvimento tradicional de escrever código e testar toda a pilha de aplicativos localmente para ambientes de desenvolvimento remoto que são mais nativos da cloud. Isso permite que eles tenham ambientes configuráveis como código, facilmente reproduzíveis para qualquer membro da equipe e rápidos o suficiente para iniciar e desmontar para que cada pull request possa ter um ambiente efêmero associado para revisões de código.
À medida que novas plataformas e serviços que os desenvolvedores usam diariamente são fornecidos com mais regularidade como ofertas cloud-first ou cloud-only, faz sentido aproveitar todas as vantagens da cloud para todo o ciclo de vida de desenvolvimento e fazer com que o ambiente de desenvolvimento espelhe de forma mais eficaz o ambiente de produção.
Neste blog, vamos ver como o Gitpod, com seu ambiente de desenvolvimento em nuvem (CDE), é o complemento ideal para o MongoDB Atlas quando se trata de uma experiência de desenvolvimento nativa na nuvem. Estamos tão otimistas com o potencial dessa experiência de desenvolvimento combinado que investimos na mais recente rodada de financiamento do Gitpod.
Como exemplo, vejamos um aplicativo Node.js simples que expõe uma API para recuperar citações de autores populares. Você pode encontrar o código fonte no Github. Você mesmo deve poder experimentar a configuração de ponta a ponta acessando Gitpod. O projeto está configurado para utilizar um cluster gratuito no Atlas e, supondo que você ainda não tenha um em execução na sua conta do Atlas, tudo deve funcionar imediatamente.
O código do aplicativo é simples e está contido principalmente em app.js, mas a parte mais interessante é como o ambiente de desenvolvimento Gitpod é configurado: com apenas alguns arquivos de configuração adicionados ao repositório GitHub, um desenvolvedor que trabalha neste projeto pela primeira vez pode ter tudo instalado e funcionando, incluindo o cluster MongoDB necessário para desenvolvimento semeado com dados de teste, em cerca 30 segundos!
Vamos dar uma olhada em como isso é possível.
Começaremos com o Dockerfile. O Gitpod fornece uma imagem Docker pronta para uso para o ambiente de desenvolvimento que contém utilitários e suporte para as linguagens de programação mais comuns. No nosso caso, preferimos começar com uma imagem mínima e adicionar apenas o que precisamos: o Atlas CLI (e o MongoDB Shell que vem com ele) para gerenciar recursos em Atlas e Node.js.
1 FROM gitpod/workspace-base:2022-09-07-02-19-02 2 3 # Install MongoDB Tooling 4 RUN sudo apt-get install gnupg 5 RUN wget -qO - https://pgp.mongodb.com/server-5.0.asc | sudo apt-key add - 6 RUN echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/5.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list 7 RUN sudo apt-get update 8 RUN sudo apt-get install -y mongodb-atlas 9 10 # Install Node 18 11 RUN curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - 12 RUN sudo apt-get install -y nodejs 13 14 # Copy Atlas script 15 COPY mongodb-utils.sh /home/gitpod/.mongodb-utils.sh 16 RUN echo "source ~/.mongodb-utils.sh" >> .bash_aliases
Para tornar as coisas um pouco mais fáceis e limpas, também adicionaremos ao contêiner um arquivomongodb-utils.sh e carregá-lo-emos em bash_aliases. É um script bash que contém funções de conveniência que envolvem alguns dos comandos do Atlas CLI para facilitar o uso no ambiente Gitpod.
A segunda metade da configuração está contida em .gitpod.yml. Este arquivo pode parecer um pouco detalhado, mas o que ele faz é relativamente simples. Vamos dar uma olhada nesses detalhes de configuração nas seções a seguir deste artigo.
Nosso aplicativo API de citações usa o MongoDB para armazenar dados: Todas as citações com seus metadados estão em uma collection MongoDB. OAtlas é a melhor maneira de executar o MongoDB, então usaremos isso. Além disso, como estamos usando o Atlas, também podemos aproveitar o Atlas Search para oferecer recursos de pesquisa de texto completo aos usuários da API.
Como queremos que nosso ambiente de desenvolvimento tenha características compatíveis com o que teremos na produção, usaremos o Atlas também para nossas necessidades de desenvolvimento. Em particular, queremos garantir que toda vez que um desenvolvedor iniciar um ambiente Gitpod, um cluster efêmero correspondente seja criado no Atlas e semeado com dados de teste.
Com algumas configurações simples, o Gitpod toma conta de tudo isso de forma totalmente automatizada. O script
atlas_up
cria um cluster com o mesmo nome que o espaço de trabalho Gitpod. Dessa forma, é fácil ver quais clusters estão sendo usados para desenvolvimento.1 if [ ! -n "${MONGODB_ATLAS_PROJECT_ID+1}" ]; then 2 echo "\$MONGODB_ATLAS_PROJECT_ID is not set. Lets try to login." 3 if ! atlas auth whoami &> /dev/null ; then 4 atlas auth login --noBrowser 5 fi 6 fi 7 MONGODB_CONNECTION_STRING=$(atlas_up)
O script acima é um pouco sofisticado, pois ele se encarrega de abrir o navegador e fazer o login com sua conta Atlas se for a primeira vez que você configura o Gitpod com esse projeto. Depois de configurar a primeira vez, você pode optar por gerar credenciais de API e pular a etapa de login no futuro. As instruções sobre como fazer isso estão no arquivo README incluído no repositório.
Ao desenvolver um aplicativo, é conveniente ter dados de teste prontamente disponíveis. Em nosso exemplo, o repositório contém um conjunto de dados compactado no formato JSON. Durante a inicialização do espaço de trabalho, assim que o cluster é implantado, nos conectamos a ele com o MongoDB Shell (mongosh) e executamos um script que carrega o conjunto de dados descompactado no cluster.
1 unzip data/quotes.zip -d data 2 mongosh $MONGODB_CONNECTION_STRING data/_load.js
Como parte de nossa API de citações, fornecemos um endpoint para pesquisar citações com base em seu conteúdo ou autor. Com o Atlas Search e a API de query do MongoDB, é extremamente fácil configurar a pesquisa de texto completo para uma determinada collection, e usaremos isso em nosso aplicativo.
Como queremos que o ambiente esteja pronto para codificar, como parte da inicialização, também criamos um índice de pesquisa. Para maior conveniência, incluímos o script
data/_create-search-index.sh
que trata disso chamando o atlas cluster search index create command
e passando os parâmetros certos para ele.Para tornar o cluster realmente efêmero e começar com um estado limpo toda vez que iniciarmos um novo workspace, queremos ter certeza de encerrá-lo quando ele não for mais necessário.
Para este exemplo, usamos um cluster gratuito, que é ideal para a maioria dos casos de uso de desenvolvimento. No entanto, se você precisar de melhor desempenho, sempre poderá configurar seu ambiente para usar um cluster pago (consulte a opção
--tier
da Atlas CLI). Se você optar por fazer isso, é ainda mais importante encerrar o cluster quando ele não for mais necessário, para evitar custos desnecessários.Para fazer isso, aguardamos o encerramento do ambiente Gitpod. É isso que esta seção do arquivo de configuração faz:
1 tasks: 2 - name: Cleanup Atlas Cluster 3 command: | 4 atlas_cleanup_when_done
O script
atlas_cleanup_when_done
aguarda o SIGTERM enviado para o contêiner Gitpod e, assim que o recebe, envia um comando para o Atlas CLI para encerrar o cluster.Durante o desenvolvimento, geralmente é útil observar os dados armazenados no MongoDB. Como o Gitpod se integra muito bem ao VS Code, podemos configurá-lo para que a extensão MongoDB for VS Code seja incluída na configuração.
Dessa forma, quem inicia o ambiente tem a opção de se conectar ao Atlas diretamente de dentro do VS Code para explorar seus dados e testar suas queries. O MongoDB for VS Code também é uma ferramenta útil para inserir e editar dados em seu banco de dados de teste: com a funcionalidade Playground, é muito fácil executar qualquer CRUD, incluindo o script da inserção de dados de teste falsos.
Como esse é um aplicativo JavaScript, também incluímos a extensão Standard VS Code para linting e formatação de código.
1 vscode: 2 extensions: 3 - mongodb.mongodb-vscode 4 - standard.vscode-standard
MongoDB Atlas é a plataforma de dados ideal em todo o ciclo de vida de desenvolvimento. Com o Atlas, os desenvolvedores obtêm uma plataforma 100% compatível com a produção, incluindo serviços como o Atlas Search, executado próximo ao banco de dados principal. E à medida que os desenvolvedores mudam para ambientes de desenvolvimento em cloud como o Gitpod, eles podem obter uma experiência ainda mais sofisticada de desenvolvimento em cloud com o Atlas e estar sempre prontos para codificar. Confira o código-fonte fornecido neste artigo e experimente o MongoDB Atlas com o Gitpod.