Explore o novo chatbot do Developer Center! O MongoDB AI chatbot pode ser acessado na parte superior da sua navegação para responder a todas as suas perguntas sobre o MongoDB .

Desenvolvedor do MongoDB
Central de desenvolvedor do MongoDBchevron-right
Produtoschevron-right
Atlaschevron-right

Criando de um pipeline de entrega contínua em vários ambientes para o MongoDB Atlas

Johannes Brännström, Pierre Petersson8 min read • Published Feb 10, 2022 • Updated Jan 23, 2024
AWSDockerAtlas
Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Tutorial
star-empty
star-empty
star-empty
star-empty
star-empty

Por que CI/CD?

Para aumentar a velocidade e a qualidade do desenvolvimento, você pode usar estratégias de entrega contínua para gerenciar e implantar as alterações no código do aplicativo. No entanto, a entrega contínua para bancos de dados geralmente é um processo manual.
A adoção da integração contínua e da entrega contínua (CI/CD) para gerenciar o ciclo de vida de um banco de dados traz os seguintes benefícios:
  • Uma configuração automatizada de vários ambientes permite que você se mova mais rapidamente e se concentre no que realmente importa.
  • O nível de confiança das alterações aplicadas aumenta.
  • O processo é mais fácil de reproduzir.
  • Todas as alterações na configuração do banco de dados serão rastreáveis.

Por que CI/CD para o MongoDB Atlas?

OMongoDB Atlas é uma plataforma de dados para desenvolvedores multinuvem que fornece um conjunto integrado de banco de dados e serviços de dados na nuvem para acelerar e simplificar a forma como você cria com dados. O MongoDB Atlas também fornece uma APIabrangente, tornando possível a CI/CD para a plataforma de dados real.
Neste blog, demonstraremos como configurar o CI/CD para o MongoDB Atlas em uma configuração típica de produção. O público pretendido são desenvolvedores, arquitetura de soluções e administradores de banco de dados com conhecimento do MongoDB Atlas, AWS e Terraform.

Requisitos da nossa solução CI/CD

  • Garanta que cada ambiente (desenvolvimento, teste, produção) esteja isolado para minimizar o raio de explosão em caso de erro humano ou do ponto de vista da segurança. Os projetos do MongoDB Atlas e as chaves de API serão utilizados para permitir o isolamento do ambiente.
  • Todos os serviços usados nesta solução usarão serviços gerenciados. Isso para minimizar o tempo necessário para gastar no gerenciamento da infraestrutura.
  • Minimizar os acordos comerciais necessários. Use o máximo possível da AWS e do ecossistema Atlas para que não haja necessidade de comprar ferramentas externas, como o HashiCorp Vault.
  • Minimize o tempo gasto na instalação de ferramentas de desenvolvimento local, como git e Terraform. A solução fornecerá uma imagem docker, com todas as ferramentas necessárias para executar o provisionamento de modelos Terraform. A mesma imagem será usada para também executar o pipeline no AWS CodeBuild.

Implementação

Basta de conversa — vamos para a ação. Como desenvolvedores, adoramos exemplos de trabalho como uma forma de entender como as coisas funcionam. Então, aqui está como fizemos isso.

Pré-requisitos

Em primeiro lugar, precisamos ter pelo menos uma conta do Atlas para provisionar o Atlas e, em seguida, algum lugar para executar nossa automação. Você pode obter uma conta Atlas gratuitamente em mongodb.com. Se você quiser levar esta demonstração para dar uma volta, crie sua conta Atlas agora. Em seguida, você precisará criar uma chave de API em nível de organização. Se você ou a sua organização já tiverem uma conta do Atlas que gostaria de usar, precisará que o proprietário da organização crie a chave de API no nível da organização.
Em segundo lugar, você precisará de uma conta AWS. Para obter mais informações sobre como criar uma conta AWS, consulte Como crio uma conta AWS? Para esta demonstração, usaremos alguns serviços pagos, como o S3, mas você terá 12 meses grátis.
Você também precisará ter o Docker instalado, pois estamos usando um container Docker para executar todo o provisionamento. Para obter mais informações sobre como instalar o Docker, consulte Introdução ao Docker. Estamos usando o Docker porque será mais fácil para você começar, pois todas as ferramentas estão empacotadas no container — como AWS cli, mongosh e Terraform.

O que você construirá

  • Projetos MongoDB Atlas para ambientes de desenvolvimento, teste e produção, para minimizar o raio de ação em caso de erro humano e de uma perspectiva de segurança.
  • Cluster do MongoDB Atlas em cada projeto do Atlas (dev, test, prod). O MongoDB Atlas é uma plataforma de dados totalmente gerenciada para aplicativos modernos. Armazenar dados da forma como eles são acessados como documentos torna os desenvolvedores mais produtivos. Ele fornece um banco de dados baseado em documentos econômico e redimensionável, ao mesmo tempo em que automatiza tarefas de administração demoradas, como provisionamento de hardware, configuração de banco de dados, aplicação de patches e backups. Ele permite que você se concentre em seus aplicativos, fornecendo a base para o alto desempenho, a alta disponibilidade, a segurança e a compatibilidade de que eles precisam. ✅ Já tem uma conta AWS? O Atlas oferece suporte ao pagamento por uso por meio do AWS Marketplace (AWS MP) sem qualquer compromisso inicial - simplesmente
    Inscreva-se no MongoDB Atlas por meio do AWS Marketplace.
  • CodePipeline orquestra os estágios de migração do banco de dados CI/CD.
  • As funções e políticas do IAM permitem o acesso entre contas aos recursos aplicáveis da AWS.
  • O CodeCommit cria um repositório para armazenar as declarações SQL usadas ao executar a migração do banco de dados.
  • O Amazon S3 cria um bucket para armazenar artefatos do pipeline.
  • O CodeBuild cria um projeto nas contas de destino usando o Snapshot para aplicar alterações no banco de dados.
  • Amazon Web Services Parameter Store armazena segredos de forma segura e centralizada, como as Atlas API chaves da do e o nome de usuário e senha do banco de dados.
  • O Amazon SNS notifica você por e-mail quando um desenvolvedor envia alterações ao repositório CodeCommit.

Etapa 1: Bootstrap AWS Resources

Em seguida, dispararemos o script para inicializar nosso ambiente Amazon Web Services e a conta do Atlas , conforme mostrado no Diagrama 1, usando o Terraform.
Você precisará usar chaves de acesso programáticas para sua conta da AWS e a chave da API no nível da organização do Atlas que você criou conforme descrito nos pré-requisitos.Esta também é a única vez que você precisará lidar com as chaves manualmente.
1# Set your environment variables
2
3# You'll find this in your Atlas console as described in prerequisites
4export ATLAS_ORG_ID=60388113131271beaed5
5
6# The public part of the Atlas Org key you created previously
7export ATLAS_ORG_PUBLIC_KEY=l3drHtms
8
9# The private part of the Atlas Org key you created previously
10export ATLAS_ORG_PRIVATE_KEY=ab02313b-e4f1-23ad-89c9-4b6cbfa1ed4d
11
12
13# Pick a username, the script will create this database user in Atlas
14export DB_USER_NAME=demouser
15
16# Pick a project base name, the script will appended -dev, -test, -prod depending on environment
17export ATLAS_PROJECT_NAME=blogcicd6
18
19
20# The AWS region you want to deploy into
21export AWS_DEFAULT_REGION=eu-west-1
22
23
24# The AWS public programmatic access key
25export AWS_ACCESS_KEY_ID=AKIAZDDBLALOZWA3WWQ
26
27
28# The AWS private programmatic access key
29export AWS_SECRET_ACCESS_KEY=nmarrRZAIsAAsCwx5DtNrzIgThBA1t5fEfw4uJA
Quando todos os parâmetros forem definidos, você estará pronto para executar o script que criará seu pipeline de CI/CD.
1# Clone solution code repository
2$ git clone https://github.com/mongodb-developer/atlas-cicd-aws
3$ cd atlas-cicd
4
5# Start docker container, which contains all the tooling e.g terraform, mongosh, and other,
6$ docker container run -it --rm -e AWS_ACCESS_KEY_ID -e AWS_SECRET_ACCESS_KEY -e AWS_DEFAULT_REGION -e ATLAS_ORG_ID -e ATLAS_ORG_PUBLIC_KEY -e ATLAS_ORG_PRIVATE_KEY -e DB_USER_NAME -e ATLAS_PROJECT_NAME -v ${PWD}/terraform:/terraform piepet/cicd-mongodb:46
7
8
9$ cd terraform
10
11# Bootstrap AWS account and Atlas Account
12$ ./deploy_baseline.sh $AWS_DEFAULT_REGION $ATLAS_ORG_ID $ATLAS_ORG_PUBLIC_KEY $ATLAS_ORG_PRIVATE_KEY $DB_USER_NAME $ATLAS_PROJECT_NAME base apply
Quando o deployment.sh é invocado, o provisionamento dos recursos da AWS é iniciado, usando modelos Terraform. Os recursos criados são mostrados no Diagrama 1.
A partir daqui, você poderá operar sua infraestrutura Atlas sem usar sua instância local docker. No entanto, se você quiser seguir à risca este guia, incluindo a limpeza de tudo, é melhor manter o container em funcionamento. A etapa final da destruição da infraestrutura da AWS requer um ponto externo, como sua instância docker local.
Até que você tenha confirmado algo, o pipeline terá um estágio de origem com falha. Isso ocorre porque ele tenta fazer check-out de uma ramificação que não existe no repositório de código. Depois de confirmar o código Terraform que deseja executar, você verá que o estágio Source será reiniciado e prosseguirá conforme o esperado. Você pode encontrar o pipeline no console da AWS neste url: https://eu-west-1.console.aws.amazon.com/codesuite/codepipeline/pipelines?region=eu-west-1

Etapa 2: Implementar o Atlas Cluster

O próximo é implantar o cluster do Atlas (projetos, usuários, chaves de API, etc.). Isso é feito enviando uma configuração para o novo repositório do AWS CodeCommit.
Se você é como eu e quer ver como o provisionamento do Atlas cluster funciona antes de configurar o IAM corretamente, envie o repositório original do Github para o AWS CodeCommit diretamente dentro do container docker (dentro da pasta Terraform) usando um pouco de mac . Ao enviar para o repositório CodeCommit, o AWS CodePipeline será acionado e o provisionamento do Atlas cluster será iniciado.
1cd /terraform
2# Push default settings to AWS Codecommit
3./git_push_terraform.sh
Para configurar o acesso ao repositório CodeCommit corretamente, para uso que sobrevive à interrupção do container docker, você precisará de um usuário git CodeCommit adequado. Siga as etapas na documentação da AWS para criar e configurar seu usuário git do CodeCommit no AWS IAM. Em seguida, clone o repositório do AWS CodeCommit que foi criado na inicialização, fora do contêiner docker, talvez em outra guia do shell, usando suas credenciais do IAM. Se você não usou o "hack " para inicializá-lo, ele estará vazio, então copie a pasta Terraform fornecida nesta solução para a raiz do repositório CodeCommit clonado e, em seguida, confirme e envie para iniciar o pipeline. Agora você pode usar este repositório para controlar sua configuração! Agora você deve ver no console do AWS CodePipeline que o pipeline foi acionado. O pipeline criará Atlas clusters em cada um dos Projetos Atlas e configurará o AWS PrivateLink.
Vamos nos aprofundar nos estágios definidos neste arquivo de pipeline do Terraform.
Deploy-Base Isso é basicamente reaplicar o que fizemos no bootstrapping. Esse estágio garante que possamos melhorar a própria infraestrutura de pipeline da AWS ao longo do tempo.
Este estágio cria os projetos no Atlas, incluindo as chaves de API do projeto Atlas, os usuários do projeto Atlas e os usuários do banco de dados.
Deploy-Dev
Este estágio cria o link privado correspondente e o cluster MongoDB.
Distribuir-Teste
Este estágio cria o link privado correspondente e o cluster MongoDB.
Deploy-Prod
Este estágio cria o link privado correspondente e o cluster MongoDB.
Portão
Aprovar significa que achamos que tudo parece bom. Talvez contraintuitivo, mas ótimo para demos, ele prossegue com a desmontagem. Este pode ser um dos primeiros comportamentos que você mudará. :)
Desmontagem
Isso descomissiona os recursos de desenvolvimento, teste e produção que criamos acima. Para desativar os recursos básicos, incluindo o próprio pipeline, recomendamos que você os execute externamente, por exemplo, a partir do Docker container em seu laptop. Veremos isso mais tarde.
À medida que você avançar em direção ao estágio do Gate, verá os clusters do Atlas se desenvolverem. Abaixo está um exemplo em que o estágio de teste está criando um cluster. A aprovação do Gate desimplantará os recursos criados nos estágios de desenvolvimento, teste e produção, mas manterá os projetos e os usuários.

Etapa 3: Faça uma alteração!

Supondo que você tenha dedicado algum tempo para configurar o IAM corretamente, agora você pode trabalhar com a infraestrutura como código diretamente do seu laptop fora do container. Se você acabou de implantar usando o esquema dentro do container, pode continuar interagindo usando o repositório criado dentro do container do Docker, mas, em algum momento, o container parará e esse repositório desaparecerá. Então, cuidado.
Navegue até a raiz do clone do repositório CodeCommit. Por exemplo, se você usasse o script no container, também executaria no container:
1cd /${ATLAS_PROJECT_NAME}-base-repo/
Depois você pode editar, por exemplo, a versão do MongoDB alterando 4.4 a 5.0 em terraform/environment/dev/variables.tf.
1variable "cluster_mongodbversion" {
2 description = "The Major MongoDB Version"
3 default = "5.0"
4}
Em seguida, pressione (git add, commit, push) e você verá uma nova execução iniciada no CodePipeline.

Etapa 4: Limpar a infraestrutura de base

Agora, isso foi interessante. Hora de limpar! Para desativar o ambiente completo, primeiro você deve aprovar o estágio do Gate para executar o trabalho de desmontagem. Quando isso é feito, apenas a infraestrutura de base permanece. Inicie o contêiner novamente como na etapa 1 se ele não estiver em execução e, em seguida, execute deployment_baseline.sh, substituindo a palavra aplicar por destruir:
1# inside the /terraform folder of the container
2
3# Clean up AWS and Atlas Account
4./deploy_baseline.sh $AWS_DEFAULT_REGION $ATLAS_ORG_ID $ATLAS_ORG_PUBLIC_KEY $ATLAS_ORG_PRIVATE_KEY $DB_USER_NAME $ATLAS_PROJECT_NAME base destroy

Lições aprendidas

Nesta solução, separamos a criação de recursos da AWS e do cluster do Atlas, pois as alterações no cluster do Atlas serão mais frequentes do que as alterações nos recursos da AWS.
Ao implementar a infraestrutura como código para um cluster MongoDB Atlas, você precisa considerar não apenas a criação do cluster, mas também uma estratégia de como separar os ambientes de desenvolvimento, controle de qualidade e produção e como armazenar segredos. Isso para minimizar o raio da explosão.
Também notamos como a marcação de recursos é útil para tornar os scripts do Terraform portáteis. Ao definir tags em recursos da AWS, o script não precisa saber os nomes dos recursos, mas pode procurá-los por tag.

Conclusão

Ao usar a automação de CI/CD para Atlas clusters, você pode acelerar as implantações e aumentar a agilidade de suas equipes de software.
O MongoDB Atlas oferece uma API poderosa que, em combinação com os serviços da AWS CI/CD e o Terraform, pode oferecer suporte à entrega contínua de clusters do MongoDB Atlas e ao controle de versão do ciclo de vida do banco de dados. Você pode aplicar o mesmo padrão com outras ferramentas CI/CD que não são específicas para AWS.
Neste blog, oferecemos um processo de implantação exaustivo, reproduzível e reutilizável para o MongoDB Atlas, incluindo rastreabilidade. Uma equipe de devops pode usar nossa demonstração como exemplos para saber como implantar rapidamente o MongoDB Atlas, incorporando automaticamente as melhores práticas da organização.

Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Tutorial
star-empty
star-empty
star-empty
star-empty
star-empty
Relacionado
Tutorial

Indexe qualquer coisa, pesquise tudo: Vector Search escalável com IA replicada, MongoDB e Hookdeck


Dec 16, 2024 | 20 min read
Notícias e Anúncios

Análise analítica quase em tempo real alimentada por espelhamento no Microsoft Fabric para o MongoDB Atlas


Dec 10, 2024 | 4 min read
Tutorial

Criação de aplicativos de IA generativa usando o MongoDB: aproveitando o poder do Atlas Vector Search e dos modelos de código aberto


Sep 18, 2024 | 10 min read
Tutorial

Gerenciando uma arquitetura de metadados de catálogo de produtos inteligentes com MongoDB Atlas e Google Cloud Platform Google Cloud Platform


Dec 16, 2024 | 9 min read
Sumário