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
Avalie esse Tutorial
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.
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.
- 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.
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.
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.
- 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.
- Os grupos de segurança da VPC garantem o fluxo seguro de tráfego entre um projeto do CodeBuild implantado em uma VPCe o MongoDB Atlas. O AWS Private Link também será provisionado.
- 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.
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 4 export ATLAS_ORG_ID=60388113131271beaed5 5 6 # The public part of the Atlas Org key you created previously 7 export ATLAS_ORG_PUBLIC_KEY=l3drHtms 8 9 # The private part of the Atlas Org key you created previously 10 export ATLAS_ORG_PRIVATE_KEY=ab02313b-e4f1-23ad-89c9-4b6cbfa1ed4d 11 12 13 # Pick a username, the script will create this database user in Atlas 14 export DB_USER_NAME=demouser 15 16 # Pick a project base name, the script will appended -dev, -test, -prod depending on environment 17 export ATLAS_PROJECT_NAME=blogcicd6 18 19 20 # The AWS region you want to deploy into 21 export AWS_DEFAULT_REGION=eu-west-1 22 23 24 # The AWS public programmatic access key 25 export AWS_ACCESS_KEY_ID=AKIAZDDBLALOZWA3WWQ 26 27 28 # The AWS private programmatic access key 29 export 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
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.
1 cd /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.
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.
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:
1 cd /${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
.1 variable "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.
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
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.
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.
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