EventoObtenha 50% de desconto no seu ingresso para MongoDB.local Londres em outubro 2. Use o código WEB50Saiba mais >>
Desenvolvedor MongoDB
Central de desenvolvedor do MongoDBchevron-right
Produtoschevron-right
Atlaschevron-right

Pausar automaticamente clusters inativos

Brian Leonard10 min read • Published Jan 19, 2022 • Updated Sep 09, 2024
Atlas
Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Artigo
star-empty
star-empty
star-empty
star-empty
star-empty
Some features mentioned below will be deprecated on Sep. 30, 2025. Learn more.
A couple of years ago I wrote an article on how to pause and/or scale clusters using scheduled triggers. This article represents a twist on that concept, adding a wrinkle that will pause clusters across an entire organization based on inactivity. Specifically, I’m looking at the Database Access History to determine activity.
É importante observar esta limitação de registro:
Se um cluster experimentar um pico de atividade e gerar uma quantidade extremamente grande de mensagens de log, o Atlas poderá parar de coletar e armazenar novos logs por um período de tempo.
Portanto, esse script pode dar um falso positivo de que um cluster está inativo quando, na verdade, acontece exatamente o oposto. Dado, no entanto, que a intenção desse script é gerenciar ambientes inferiores, que não são de produção, não vejo os falsos positivos como uma grande preocupação.

Arquitetura

A implementação usa um trigger. O trigger chama uma série de Atlas App Services, que usam as Atlas API para iterar sobre os projetos da organização e seus clusters associados, testando a inatividade do cluster (conforme explicado na introdução) e, finalmente, pausando o cluster se ele estiver realmente inativo.
Arquitetura

Chaves de API

Para chamar as API Administrativas do Atlas, primeiro você precisará de uma API Key com o roleProprietário da Organização. As API Keys são criadas no Access Manager, que você encontrará no menu Organização à esquerda:
Access Manager
ou na barra de menu na parte superior:
Access Manager
Organization Access Manager
Clique em Criar chave de API. Dê uma descrição à chave e certifique-se de definir as permissões para Proprietário da organização:
Criar chave API
Ao clicar em Avançar, você verá suas chaves Públicas e Privadas. Salve sua chave privada , pois o Atlas nunca mais a mostrará a você.
Como uma camada adicional de segurança, você também tem a opção de definir uma lista de acesso IP para essas chaves. Estou pulando esta etapa, para que minha chave funcione de qualquer lugar.
Criar chave API

Implantação

Crie um projeto para automação

Como essa solução funciona em toda a sua organização do Atlas, eu gosto de hospedá-la em seu próprio projeto do Atlas dedicado.
Criar projeto

Criar um aplicativo do App Services.

O Atlas App Services fornece um poderoso backend de desenvolvimento de aplicativos como serviço. Para começar a usá-lo, basta clicar na aba App Services.
Serviços de App
Você verá que o App Services oferece vários modelos para você começar. Para esse caso de uso, basta selecionar a primeira opção para Criar seu próprio aplicativo:
Bem-vindo ao Atlas App Services
Em seguida, você verá opções para vincular uma fonte de dados, nomear seu aplicativo e escolher um modelo de implantação. A iteração atual desse utilitário não usa uma fonte de dados, então você pode ignorar essa etapa (o App Services criará um cluster gratuito para você). Você também pode deixar o modelo de implantação como padrão (Global), a menos que queira limitar o aplicativo a uma região específica.
Dei o nome de Atlas Cluster Automation ao aplicativo:
Bem-vindo ao Atlas App Services
Nessa situação, você tem duas opções:
  1. Basta importar o aplicativo App Services e ajustar qualquer uma das funções para atender às suas necessidades.
  2. Crie o aplicativo do zero (pule para a próxima seção).

Importar opção

Etapa 1: armazene a chave secreta da API.

A extração depende da chave secreta da API, portanto, a importação falhará se ela não for configurada previamente.
Use o menuValues à esquerda para Criar um Segredo chamado AtlasPrivateKeySecret contendo a chave privada que você criou anteriormente (o segredo não está entre aspas):
Valor secreto

Etapa 1: Instale a CLI do Atlas App Services (realm-cli)

O Realm CLI está disponível em npm. Para instalar a versão 2 da Realm CLI no seu sistema, verifique se o Node.jsestá instalado e execute o seguinte comando no shell:
npm install -g mongodb-realm-cli

Etapa 2: extraia o arquivo do aplicativo

Baixe e extraia o AtlasClusterAutomation.zip.

Etapa 3: faça login no Atlas

Para configurar seu aplicativo com o realm-cli, você deve se conectar ao Atlas usando suas chaves de API:

Etapa 4: Obtenha a IDdo aplicativo Atlas App Services

Selecione o App Settings e copie o ID do seu aplicativo:
ID do aplicativo
ID do aplicativo

Etapa 5: importe o aplicativo

Execute o seguinte realm-cli push comando no diretório em que você extraiu a exportação:
Após a importação, substitua o `AtlasPublicKey' pelo valor da chave pública da sua API.
Valor da chave pública

Revise o aplicativo importado

O aplicativo importado inclui 5 Atlas Functions:
Funções
E o Trigger Agendado que chama a funçãopausaInactiveClusters:
Acionadores
O trigger está programado para disparar a cada 30 minutos. Observe que a funçãopausaClusters que o trigger chama atualmente apenas registra a atividade do cluster. Isso é para que você possa monitorar e verificar se a função se comporta conforme o desejado. Quando estiver pronto, descomente a linha que chama a funçãopausaCluster:
Além disso, a funçãopauseClusters pode ser configurada para excluir projetos (como os dedicados a cargas de trabalho de produção):
Agora que você revisou o rascunho, como etapa final, implante o aplicativo do App Services.
Revisar rascunho e implantar
Revisar rascunho e implantar

Opção "construa você mesmo"

Para entender o que está incluído no aplicativo, estas são as etapas para criá-lo do zero.

Etapa 1: armazene as chaves de API

As funções que precisamos criar chamarão a API de administração do Atlas, portanto, precisamos armazenar nossas chaves públicas e privadas de API, o que vamos fazer usando Valores e segredos. O código de amostra que forneço referência a esses valores como AtlasPublicKey e AtlasPrivateKey, portanto, use esses mesmos nomes, a menos que queira alterar o código em que eles são referenciados.
Você encontrará Values no menu Build:
Valores
Primeiro, crie um Valor, AtlasPublicKey, para sua chave pública (observe que a chave está entre aspas):
Valor da chave pública
Crie um Segredo, AtlasPrivateKeySecret, contendo sua chave privada (o segredo não está entre aspas):
Valor secreto
O Segredo não pode ser acessado diretamente, portanto, crie um segundo Valor, AtlasPrivateKey, que se vincule ao segredo:
Valor da chave privada
Revisar rascunho e implantar

Etapa 2: crie as funções

As quatro funções que precisam ser criadas são auto-explicativas, então não vamos fornecer um monte de explicações adicionais aqui.

getProjects

Essa função autônoma pode ser testada no console do App Services para ver a lista de todos os projetos da sua organização.

getProjectClusters

Depois quegetProjects é chamado, o trigger itera sobre os resultados, passando o projectId para essa funçãogetProjectClusters.
Para testar essa função, você precisa fornecer um projectId. Por padrão, o console fornece "Hello world!", portanto, testo essa entrada e forneço alguns valores padrão para facilitar o teste.

clusterIsActive

Essa função contém a lógica que determina se o cluster pode ser pausado.
A maior parte do trabalho nessa função é manipular o carimbo de data/hora no log de acesso ao banco de dados para que ele possa ser comparado com a hora atual e a janela de lookback.
Além de retornar verdadeiro (ativo) ou falso (inativo), a função registra suas descobertas, por exemplo:

Checking if cluster 'SA-SHARED-DEMO' has been active in the last 60 minutes
Como getClusterProjects, há um bloco que você pode usar para fornecer alguns ID de projeto de teste e nomes de cluster para facilitar o teste no console do App Services.

pauseCluster

Por fim, se o cluster estiver inativo, passamos o ID do projeto e o nome do cluster para pauseCluster. Essa função também pode retomar um cluster, embora esse recurso não seja utilizado neste caso de uso.

pauseInactiveClusters

Esta função será chamada por um trigger. Como não é possível passar um parâmetro para um gatilho agendado, ele usa uma janela de retrospectiva codificada de 60 minutos que você pode alterar para atender às suas necessidades. Você pode até armazenar o valor em um banco de dados do Atlas e construir uma interface do usuário para gerenciar sua configuração :-).
A função avaliará todos os projetos e clusters na organização em que está hospedada. Entendendo que há prováveis projetos ou clusters que você nunca quer pausado, a função também inclui uma array excludeProjects, onde você pode especificar uma lista de nomes de projetos a serem excluídos da avaliação.
Por fim, você notará que a chamada para pauseCluster foi comentada. Sugiro que você execute essa função por alguns dias e analise os logs do Trigger para verificar se ela se comporta como esperado.

Etapa 3: Criar o gatilho programado

Sim, ainda estamos usando um scheduled trigger, mas desta vez o trigger será executado periodicamente para verificar se há inatividade do cluster. Agora, seus desenvolvedores que trabalham tarde da noite não terão mais o cluster pausado abaixo deles.
ScheduledTrigger

Etapa 4: Implementar

Como uma etapa final, você precisa implantar o aplicativo Atlas App Services.
Revisar rascunho e implantar

Resumo

A gênese deste artigo foi que um cliente, quando apresentado meu artigo anterior sobre agendamento de pausas de cluster, perguntou se o mesmo poderia ser alcançado com base na inatividade. É minha confiança que, com as APIs do Atlas, tudo pode ser alcançado. A única questão era o que constitui inatividade? Dado o batimento cardíaco e a replicação que ocorrem naturalmente, sempre há algum "activity" no cluster. Por fim, decidi pelo acesso ao banco de dados como guia. Com o tempo, essa métrica pode ser combinada com algumas métricas adicionais ou alterada para algo completamente diferente, mas os ossos do processo estão aqui.

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

Série de automação de banco de dados – Índices automatizados


Sep 05, 2023 | 23 min
Início rápido

Começando com o Atlas e a API de consulta do MongoDB


Feb 13, 2023 | 11 min read
Tutorial

MongoDB Charts incorporando SDK com React


Sep 09, 2024 | 5 min read
Tutorial

Chamando a API de administração do MongoDB Atlas: como fazer isso usando Node, Python e Ruby


Jun 18, 2024 | 4 min read
Sumário