Implantando o MongoDB Atlas com o Terraform com o Azure
Avalie esse Artigo
MongoDB Atlas é um banco de dados de nuvem totalmente gerenciado. Ele lida com as partes difíceis de configurar, gerenciar e corrigir seus bancos de dados MongoDB em qualquer plataforma de nuvem principal (como AWS, Azure ou GCP). É a maneira mais fácil de começar, executar e expandir seus bancos de dados MongoDB na nuvem.
O Terraform é uma ferramenta de infraestrutura como código (IaC) open source usada para gerenciar e provisionar a infraestrutura em várias plataformas, incluindo provedores de nuvem e data centers locais. O Terraform automatiza a criação, modificação e destruição da sua infraestrutura, garantindo consistência e repetibilidade. O Terraform tem um provedor MongoDB Atlas que interage com os recursos suportados pelo MongoDB Atlas.
Neste tutorial, orientaremos você a configurar o MongoDB Atlas na plataforma Azure e utilizar o Terraform para implantação. O código-fonte usado neste artigo pode ser encontrado no repositório doGithub .
Antes de começarmos, você precisará configurar as seguintes contas/ferramentas:
Para configurar o ambiente, primeiro geraremos a chave de acesso da API do MongoDB Atlas e, em seguida, configuraremos um método de cobrança.
Depois de estabelecer uma conta no MongoDB Atlas e fazer login, a próxima etapa é gerar uma chave de API para verificar o Terraform MongoDB Atlas Provider. Para fazer isso, selecione o gerenciador de acesso da organização e crie a chave de acesso. Siga a documentação para saber mais sobre como criar uma chave de API.
Capturar onde criar uma chave de API (captura de tela da UI do Atlas representando a seção Organization Access Manager)
Dê à sua chave de API um nome claro que reflita sua finalidade, como "Terraform Deployment API Key. " Em seguida, escolheremos as permissões necessárias para suas tarefas do Terraform. As funções " Proprietário daorganização" e "Criador do projeto da organização" permitem acesso suficiente para concluir isso, mas a função"Criador do projeto da organização" deve ser escolhida seguindo o princípio do menor privilégio. Para saber mais sobre as roles do usuário, siga as Roles daorganização e Roles do projeto.
Copie sua chave privada e sua chave pública e, em seguida, configure as variáveis de ambiente:
1 export MONGODB_ATLAS_PUBLIC_KEY="<insert your public key here>" 2 export MONGODB_ATLAS_PRIVATE_KEY="<insert your private key here>"
Captura para adicionar IP atual à entrada da lista de acesso (captura de tela da UI do Atlas representando a adição da seção de entrada da lista de acesso)
Em seguida, adicionaremos uma entrada de lista de acesso de chave de API para garantir que as chamadas de API originadas de IPs ou intervalos CIDR possam dar acesso. Usamos nosso endereço IP atual e salvamos.
O MongoDB permite uma camada de cluster M0 gratuita pela qual você não precisa pagar. No entanto, se você quiser implantar qualquer outro cluster, teremos que configurar um método de cobrança. Siga a documentação sobre como configurar um método decobrança.
Agora vamos criar um arquivo
variables.tf
para declarar variáveis do Terraform, um arquivoterraform.tfvars
para definir valores e segredos de variáveis e um main.tf
para a configuração principal do Terraform. No Terraform, estes arquivos de configuração (variables.tf
, terraform.tfvars
e main.tf
) são normalmente criados dentro do diretório raiz do seu projeto Terraform. Você pode encontrar o código-fonte no repositório GitHub.Primeiro, definimos o MongoDB Atlas e o Azure em
main.tf
:1 # Define the MongoDB Atlas and Azure Providers 2 terraform { 3 required_providers { 4 mongodbatlas = { 5 source = "mongodb/mongodbatlas" 6 version = "=1.16.0" 7 } 8 azurerm = { 9 source = "hashicorp/azurerm" 10 version = "=3.0.0" 11 } 12 } 13 } 14 Then, we start defining all the variables our configuration will use in the variables.tf file.
O bloco de código abaixo define as variáveis utilizadas. As variáveis incluem identificadores para o projeto e o ambiente, o tamanho dos recursos de computação alocados, a plataforma de nuvem a ser usada (AWS, GCP, Azure), a região específica dentro dessa plataforma, a versão desejada do MongoDB e o(s) endereço(s) IP permissão para acessar o cluster de banco de dados.
1 # Atlas Organization ID 2 variable "atlas_org_id" { 3 type = string 4 description = "Atlas Organization ID" 5 } 6 # Atlas Project Name 7 variable "atlas_project_name" { 8 type = string 9 description = "Atlas Project Name" 10 } 11 # Atlas Project Environment 12 variable "environment" { 13 type = string 14 description = "The environment to be built" 15 } 16 # Cluster Instance Size Name 17 variable "cluster_instance_size_name" { 18 type = string 19 description = "Cluster instance size name" 20 } 21 # Cloud Provider to Host Atlas Cluster 22 variable "cloud_provider" { 23 type = string 24 description = "AWS or GCP or Azure" 25 } 26 # Atlas Region 27 variable "atlas_region" { 28 type = string 29 description = "Atlas region where resources will be created" 30 } 31 # MongoDB Version 32 variable "mongodb_version" { 33 type = string 34 description = "MongoDB Version" 35 } 36 # IP Address Access 37 variable "ip_address" { 38 type = string 39 description = "IP address used to access Atlas cluster" 40 }
No arquivo
terraform.tfvars
, especificamos o uso da versão 7 do MongoDB.0, um cluster de tamanho M10na região US_EAST_2 no Azure. Se você estiver fora da América do Norte, poderá consultar as regiões suportadas seguindo a documentação do Microsoft Azure.Observe que o Atlas oferece suporte a regiões e zonas de disponibilidade específicas do Azure, e algumas regiões não oferecem suporte a clusters gratuitos (M0) e clusters compartilhados (M2/M5).
1 atlas_org_id = "<UPDATE WITH YOUR ORG ID>" 2 atlas_project_name = "yourProjectName" 3 environment = "dev" 4 cluster_instance_size_name = "M10" 5 cloud_provider = "Azure" 6 atlas_region = "US_EAST_2" 7 mongodb_version = "7.0" 8 ip_address = "<UPDATE WITH YOUR IP>"
Para criar um projeto usando o Terraform, precisaremos do ID da organização do MongoDB Atlas com pelo menos a função Organization Project Creator. Para obter essas informações, podemos acessar Configurações na barra de menu do lado esquerdo da interface do usuário e podemos encontrar Configuraçõesda organização com o IDda organização. Consulte a documentação sobre Organizações para obter referência adicional.
Então, em seguida, em nosso arquivo
main.tf
, usaremos o recurso mongodbotlas_project do Terraform MongoDB Atlas Provider para criar nosso projeto. Adicionamos isso a main.tf
:1 # Create a Project 2 resource "mongodbatlas_project" "atlas-project" { 3 org_id = var.atlas_org_id 4 name = var.atlas_project_name 5 }
Devemos adicionar um usuário de banco de dados correspondente ao nosso projeto MongoDB Atlas. Consulte a documentação das funções de usuário disponíveis caso queira personalizar o Controle de acesso baseado em funções do usuário.
O bloco de código abaixo cria um usuário do banco de dados com uma senha aleatória e, para revisar a senha, você precisará colocar o comando
terraform output -json user_password
no seu terminal.1 # Create a Database User 2 resource "mongodbatlas_database_user" "db-user" { 3 username = "user-1" 4 password = random_password.db-user-password.result 5 project_id = mongodbatlas_project.atlas-project.id 6 auth_database_name = "admin" 7 roles { 8 role_name = "readWrite" 9 database_name = "${var.atlas_project_name}-db" 10 } 11 } 12 # Create a Database Password 13 resource "random_password" "db-user-password" { 14 length = 16 15 special = true 16 override_special = "_%@" 17 } 18 Next, we need to create the IP access list. 19 20 # Create Database IP Access List 21 resource "mongodbatlas_project_ip_access_list" "ip" { 22 project_id = mongodbatlas_project.atlas-project.id 23 ip_address = var.ip_address 24 } 25 We will need to put the IP address that we are connecting to the MongoDB Atlas cluster into the terraform.tfvars file.
Agora usaremos o
mongodbatlas_cluster
recurso para criar um cluster MongoDB Atlas. O recurso permite criar, editar e excluir clusters.1 resource "mongodbatlas_cluster" "test" { 2 project_id = mongodbatlas_project.atlas-project.id 3 name = "${var.atlas_project_name}-${var.environment}-cluster" 4 cluster_type = "REPLICASET" 5 replication_specs { 6 num_shards = 1 7 regions_config { 8 region_name = var.atlas_region 9 electable_nodes = 3 10 priority = 7 11 read_only_nodes = 0 12 } 13 } 14 cloud_backup = true 15 auto_scaling_disk_gb_enabled = true 16 mongo_db_major_version = "7.0" 17 # Provider Settings "block" 18 provider_name = var.cloud_provider 19 provider_disk_type_name = "P6" 20 provider_instance_size_name = var.cluster_instance_size_name 21 }
O bloco de código mostrado acima especifica um cluster chamado “test” com um tipo de implantação de conjunto de réplicas, ideal para aplicativos que exigem alta disponibilidade e redundância de dados.
O cluster é configurado com um único shard e está configurado para dimensionar automaticamente seu armazenamento em disco conforme necessário. A convenção de nomenclatura do cluster incorpora variáveis que permitem a personalização específica do ambiente, como
${var.atlas_project_name}-${var.environment}-cluster
.A configuração também especifica um conjunto de réplicas com três nós eletivos em uma região configurável, garantindo que o nó primário possa ser efetivamente eleito. A versão principal do MongoDB está definida como "7.0," alinhando o cluster com a versão estável mais recente.
Você pode exibir informações da configuração do Terraform diretamente no terminal ao executar comandos do Terraform. Esse recurso é particularmente útil para obter valores que são determinados somente após a criação dos recursos, como uma senha de usuário do banco de dados gerada aleatoriamente ou a connection string necessária para o Atlas cluster. O código a seguir está em seu arquivo
main.tf
e garantirá que esses valores sejam mostrados no terminal assim que o Terraform terminar de executar.1 output "cluster_name" { 2 value = mongodbatlas_cluster.test.name 3 description = "Name of the MongoDB Atlas cluster" 4 } 5 output "cluster_uri" { 6 value = "mongodb://user-1:${random_password.db-user-password.result}@${mongodbatlas_cluster.test.name}.mongodb.net:27017/?authSource=admin&replicaSet=test-replicaSet" 7 description = "Connection URI for the MongoDB Atlas cluster" 8 sensitive = true 9 } 10 output "project_id" { 11 value = mongodbatlas_cluster.test.project_id 12 description = "ID of the MongoDB Atlas project where the cluster resides" 13 } 14 Initializing Terraform
Agora estamos prontos para executar
terraform init
. Este comando inicializará o Terraform e baixará os provedores Terraform Azure e MongoDB Atlas.A captura de tela acima mostra que o Terraform foi inicializado com sucesso.
Em seguida, usaremos
terraform plan
para analisar as alterações propostas.A captura de tela acima mostra que o Terraform executará as seguintes atualizações.
Ele mostra que o Terraform criará os seguintes cinco recursos: incluindo mongodbotlas_cluster.test, mongodmatlas_database_user.db-user, mongodbotlas_project.atlas-project, mongodbotlas_project_ip_access_list.ip e random_password.db-user-password.
Agora, executaremos o comando
terraform apply
para iniciar a implantação da infraestrutura. Ao revisar e confirmar que tudo parece correto, responda com "yes " para dar ao Terraform o sinal verde para prosseguir com a construção.Pode levar cerca de 10 minutos para o cluster ser implementado. Depois que ele for implementado com sucesso, você poderá visualizá-lo na UI do Atlas. Abaixo, podemos ver que um cluster do10 M foi implantado no Azure na região 2 Leste dos EUA.
Parabéns! Você agora distribuiu com êxito um cluster M10 no Azure.
Quando estiver pronto para destruir a infraestrutura criada, podemos usar
terraform destroy
para desmontá-la com segurança. Digite "yes " para destruir todos os recursos implantados. Tenha muito cuidado, porém, se estiver tentando destruir recursos no ambiente de produção.Neste tutorial, aprenderam como implantar um cluster do MongoDB Atlas no Azure. A integração do MongoDB Atlas com Terraform no Azure oferece uma abordagem poderosa e flexível para o gerenciamento de banco de dados na nuvem. Ao aproveitar a infraestrutura do Terraform como recursos de código, simplificamos o processo de implantação do MongoDB Atlas, garantindo que nossa infraestrutura seja reproduzível e facilmente gerenciável.