Simplificar o gerenciamento de registros para o Amazon S3 usando exportações de registros baseadas em Atlas Push com o HashiCorp Terraform
Avalie esse Tutorial
À medida que os volumes de dados gerenciados pelas organizações crescem exponencialmente, o gerenciamento eficaz de logs torna-se fundamental para manter o desempenho e a segurança das plataformas de banco de dados.
A automação e a configuração do gerenciamento de registros por meio de ferramentas de infraestrutura como código (IaC) podem permitir que os usuários enviem automaticamente os registros mongod, mongos e de auditoria diretamente para seus buckets S3, em vez de baixar manualmente os arquivos de log compactados ou criar soluções personalizadas para extrair continuamente os registros do Atlas.
Para aumentar a agilidade do desenvolvedor, estamos introduzindo um novo recurso que permite às equipes de desenvolvedores enviar registros para um bucket Amazon S3, fornecendo uma solução contínua, escalável e econômica para armazenamento e análise de registros.
Este guia mostrará como configurar o registro baseado em push para o Amazon S3 no Atlas por meio de nosso provedorHashiCorp Terraform MongoDB Atlas. Vamos começar!
- Instale o HashiCorp Terraform em seu terminal ou cadastre-se para obter uma conta Terraform Cloud gratuita.
- Configure suas credenciais AWS para serem utilizados com Terraform.
Você pode ativar o recursode exportação de log baseado em push em nível de projeto em sua organização Atlas depois de autorizar seu projeto Atlas a acessar o bucket S3 em sua conta da AWS. Isso significa que todos os clusters em seu projeto Atlas serão configurados automaticamente para enviar logs para o bucket S3 .
Então, para começar, vamos dar ao Atlas o que ele precisa para obter as permissões apropriadas!
Observe que, se preferir gerenciar funções e permissões do IAM por meio da interface do usuário ou de outras ferramentas, você pode fazer isso seguindo as etapas apropriadas descritas em Configurar o acesso unificado à AWS, ignorando Etapa #2e configurar as funções apropriadas em sua configuração do Terraform.*
Neste tutorial, usaremos o Terraform para gerenciar todas as operações, para que você não precise se preocupar em alternar entre o Console de gerenciamento da AWS, a conta do MongoDB Atlas e os arquivos de configuração do Terraform. Isso exige que você primeiro especifique o provedor HashiCorp Terraform MongoDB Atlas , bem como as versões do provedor HashiCorp Terraform AWS em um arquivo version.tf , conforme abaixo:
1 terraform { 2 required_providers { 3 mongodbatlas = { 4 source = "mongodb/mongodbatlas" 5 version = ">= 1.16.0" 6 } 7 aws = { 8 source = "hashicorp/aws" 9 version = ">= 5.0" 10 } 11 } 12 required_version = ">= 1.0" 13 }
Observação: antes de implementar qualquer coisa, armazene as chaves da API programáticas do MongoDB Atlas que você criou como parte dos pré-requisitos como variáveis de ambientee, além disso, certifique-se de ter configurado suas credenciais para o provedor da AWS.
Vamos agora criar um arquivovariáveis.tf para declarar variáveis Terraform e um arquivocampoform.tfvars para definir valores de variável. Esses arquivos são normalmente criados dentro do diretório raiz do seu projeto Terraform.
Em variáveis.tf, definiremos o identificador da sua organização Atlas, o nome do seu novo projeto Atlas e o nome do novo bucket S3 para o qual os registros serão enviados:
1 # Atlas Organization ID 2 variable "atlas_org_id" { 3 type = string 4 description = "Atlas Organization ID" 5 } 6 7 # Atlas Project Name 8 variable "atlas_project_name" { 9 type = string 10 description = "Atlas Organization ID" 11 } 12 13 # Unique AWS S3 Bucket Name 14 variable "s3_bucket_name" { 15 type = string 16 description = "AWS S3 Bucket Name for logs" 17 }
No arquivoterraform.tfvars, configuraremos os valores para as variáveis acima:
1 atlas_org_id = "<UPDATE WITH YOUR ORG ID>" 2 atlas_project_name = "<UPDATE WITH A NAME FOR PROJECT>" 3 s3_bucket_name = "<UPDATE WITH A UNIQUE NAME FOR YOUR S3 BUCKET>"
Agora podemos executar
terraform init
no terminal. Isso inicializará o Terraform e baixará os provedores Terraform MongoDB Atlas e AWS.Para configurar o acesso unificado da AWS, você deve dar acesso deProprietário da organização ou Proprietário do projeto ao projeto Atlas.
A partir daqui, configure o acesso do fornecedor de nuvem no MongoDB Atlas. Você pode fazer isso com o recurso
mongodbatlas_cloud_provider_access_setup
que retorna um atlas_aws_account_arn
e atlas_assumed_role_external_id
.Nesse ponto, seu arquivo de configuração *.tf deve ser semelhante a este:
1 resource "mongodbatlas_project" "exampleProject" { 2 name = var.atlas_project_name 3 org_id = var.atlas_org_id 4 } 5 6 resource "mongodbatlas_cloud_provider_access_setup" "setupOnly" { 7 project_id = mongodbatlas_project.exampleProject.id 8 provider_name = "AWS" 9 }
Se você estiver interessado em saber mais sobre esse mecanismo de autorização, visite a Amazon Web Services Docs.
Em seguida, crie uma função IAM com o
assume_role_policy
no Atlas configurado com a conta Atlas AWS da etapa anterior como o principal.1 resource "aws_iam_role" "atlasRole" { 2 name = "atlas-role" 3 max_session_duration = 43200 4 5 assume_role_policy = jsonencode({ 6 "Version" : "2012-10-17", 7 "Statement" : [ 8 { 9 "Effect" : "Allow", 10 "Principal" : { 11 "AWS" : "${mongodbatlas_cloud_provider_access_setup.setupOnly.aws_config[0].atlas_aws_account_arn}" 12 }, 13 "Action" : "sts:AssumeRole", 14 "Condition" : { 15 "StringEquals" : { 16 "sts:ExternalId" : "${mongodbatlas_cloud_provider_access_setup.setupOnly.aws_config[0].atlas_assumed_role_external_id}" 17 } 18 } 19 } 20 ] 21 }) 22 } 23 24 resource "aws_iam_role_policy" "atlasRolePolicy" { 25 name = "atlas-role-policy" 26 role = aws_iam_role.atlasRole.id 27 28 policy = jsonencode({ 29 "Version" : "2012-10-17", 30 "Statement" : [ 31 { 32 "Effect" : "Allow", 33 "Action" : "s3:*", 34 "Resource" : "*" 35 } 36 ] 37 }) 38 }
Por fim, use o recurso
mongodbatlas_cloud_provider_access_authorization
para autorizar e configurar o novo ARN de função assumida do IAM.Dica: por enquanto, autorizamos essa role apenas para ações S3 , mas, depois de bem-sucedido, você pode expandir a política e usar o valor role_id ao configurar outros serviços Atlas que usam a AWS, como Atlas Data Federation e encryption at rest.
1 resource "mongodbatlas_cloud_provider_access_authorization" "authRole" { 2 project_id = mongodbatlas_project.exampleProject.id 3 role_id = mongodbatlas_cloud_provider_access_setup.setupOnly.role_id 4 5 aws { 6 iam_assumed_role_arn = aws_iam_role.atlasRole.arn 7 } 8 }
Agora que você concedeu ao Atlas a autorização para o serviço Amazon S3 , criaremos um novo S3 bucket (ou usaremos um bucket existente) e configuraremos um recurso
aws_iam_role_policy
para permitir que o atlasRole
criado anteriormente seja executado operações necessárias para enviar os registros para este bucket:1 resource "aws_s3_bucket" "atlasLogBucket" { 2 bucket = var.s3_bucket_name 3 force_destroy = true // required for destroying as Atlas creates a test folder in the bucket when push-based log export is initially created 4 } 5 6 resource "aws_iam_role_policy" "atlasLogBucketPolicy" { 7 name = "atlas-log-bucket-policy" 8 role = aws_iam_role.atlasRole.id 9 10 policy = jsonencode({ 11 "Version" : "2012-10-17", 12 "Statement" : [ 13 { 14 "Effect" : "Allow", 15 "Action" : [ 16 "s3:ListBucket", 17 "s3:PutObject", 18 "s3:GetObject", 19 "s3:GetBucketLocation" 20 ], 21 "Resource" : [ 22 "${aws_s3_bucket.atlasLogBucket.arn}", 23 "${aws_s3_bucket.atlasLogBucket.arn}/*" 24 ] 25 } 26 ] 27 }) 28 }
Vamos implementar tudo até agora executando os comandos abaixo no terminal:
1 terraform plan 2 terraform apply
Com isso, você configurou seu bucket S3!
Voltar para onde tudo começou, agora você pode habilitar muito facilmente a configuração de exportação de log baseada em push para seu projeto Atlas. Você só precisa do nome do bucket S3 e do
role_id
do recursomongodbatlas_cloud_provider_access_authorization
. Adicione o seguinte ao seu arquivo *.tf:1 resource "mongodbatlas_push_based_log_export" "logExport" { 2 project_id = mongodbatlas_project.exampleProject.id 3 bucket_name = aws_s3_bucket.atlasLogBucket.bucket 4 iam_role_id = mongodbatlas_cloud_provider_access_authorization.authRole.role_id 5 prefix_path = "push-based-log-test" 6 }
Para implantar novamente, execute a partir do terminal:
1 terraform plan 2 terraform apply
Se sua implementação foi bem-sucedida, você será recebido com "Apply complete! "
Você pode verificar a configuração buscando objetos no bucket S3 . Você pode fazer isso atualizando sua configuração do Terraform para incluir a fonte de dados
aws_s3_objects
e especificar o nome do bucket e o caminho do prefixo da seguinte forma:1 data "aws_s3_objects" "atlasLogObjects" { 2 bucket = aws_s3_bucket.atlasLogBucket.bucket 3 prefix = mongodbatlas_push_based_log_export.logExport.prefix_path 4 }
Liste os objetos no bucket criando um arquivooutputs.tf e referenciando o parâmetro
keys
como abaixo:1 output "log_bucket_keys" { 2 value = data.aws_s3_objects.atlasLogObjects.keys 3 }
Execute
terraform plan
seguido de terraform apply
no terminal. Agora você deve ver um objeto "atlas-test " criado em seu bucket S3 nas saídas:O Atlas cria esse objeto de teste para verificar se a função do IAM configurada tem acesso de gravação a esse bucket S3 para fins de exportação de registros baseada em push. É seguro excluir esse arquivo quando a configuração da exportação do log for bem-sucedida.
Agora que você configurou com êxito a exportação de registros baseada em push para seu bucket S3, assim que um cluster for implantado em seu projeto Atlas, você deverá ver os logs em seu bucket S3 configurado. Feliz registro!
Parabéns! Agora você tem tudo de que precisa para começar a enviar os registros do banco de dados do MongoDB Atlas para o bucket do Amazon S3 .
O provedor HashiCorp Terraform Atlas é de código aberto sob a Licença Pública do Mozilla v2.0 e agradecemos as contribuições da comunidade. Para saber mais, consulte nossas diretrizes de contribuição.
A maneira mais rápida de começar é criar uma conta MongoDB Atlas a partir do AWS Marketplace. Para saber mais sobre o fornecedor Terraform, consulte nossa documentação, tutoriais, resumo da soluçãoou comece diretamente.
Go construir com o MongoDB Atlas e o provedor HashiCorp Terraform Atlas hoje!
Principais comentários nos fóruns
Ainda não há comentários sobre este artigo.
Relacionado
Tutorial
Conecte com segurança o MongoDB aos clusters Kubernetes oferecidos na nuvem
Sep 09, 2024 | 4 min read
Notícias e Anúncios
Desbloqueie o valor dos dados no MongoDB Atlas com a análise inteligente do Microsoft Fabric
Nov 17, 2023 | 6 min read