O gerenciamento de configuração da nuvem pode ser um desafio. Pode parecer haver opções de configuração em todos os lugares.
- As conexões de rede do seu sistema são descritas na configuração, que inclui diretivas de roteamento e bloqueio de portas.
- Seus balanceadores de carga podem ser configurados para especificar onde entregar o tráfego direcionado ao seu serviço.
- Para bancos de dados, caches, servidores, aplicativos de terceiros e outros sistemas, as permissões de segurança devem ser configuradas.
- Ele descreve conexões de banco de dados, conexões de serviço, vários segredos e outras variáveis de configuração. A configuração também está disponível para o seu aplicativo.
O problema de gerenciamento de configuração da nuvem é multiplicado em um aplicativo nativo de nuvem com um design baseado em microsserviços. Existem configurações em todos os lugares.
Um sistema de controle de revisão pode ser usado para gerenciar algumas configurações que são bem conhecidas e usadas com frequência. O sistema ou componente que necessita da informação, entretanto, pode manter algumas dessas configurações. Além disso, alguns deles podem ser totalmente mal administrados e desconhecidos.
Há configuração em todos os lugares, vamos enfrentá-lo. Além disso, adiciona complexidade desnecessária à infraestrutura que suporta seu aplicativo.
Em um ambiente nativo de nuvem, como você pode obter controle e diminuir a complexidade trazida por essa quantidade significativa de dados de configuração? Cinco melhores práticas estão listadas abaixo para ajudá-lo a organizar sua confusão de configuração.
1. Mantenha uma Fonte Única de Verdade (Single Source of Truth) para toda configuração
Ocasionalmente, as configurações são duplicadas em todos os lugares. A configuração de um servidor é replicada para outro, depois para outro e assim por diante. Eventualmente, pode haver centenas de configurações idênticas ou muito semelhantes. Uma alteração feita em uma cópia tem uma probabilidade significativa de não ser refletida nas outras cópias. As configurações irão se deteriorar com o tempo, resultando em erros de configuração, problemas de aplicativos e possíveis falhas de segurança.
Mantenha uma única cópia principal da configuração para cada tipo de informação de configuração (como um tipo específico de arquivo de configuração). Todas as modificações de configuração devem ser executadas nesta cópia mestra solitária. Automatize um processo para distribuir a configuração para esses locais adicionais se for necessário em vários (talvez centenas de) sites distintos.
Essa prática recomendada garante que as alterações necessárias feitas em uma configuração também sejam feitas em todas as cópias das mesmas configurações (ou semelhantes).
2. Automatize o processo para fazer alterações
As configurações de alguns arquivos de configuração na prática recomendada anterior são quase idênticas em todos os dispositivos. Em alguns casos, pequenos ajustes devem ser feitos em cada cópia de configuração.
Use uma única cópia da configuração e automatize as alterações para cada componente usando macros e variáveis em vez de manter uma cópia separada e exclusiva para cada componente.
Considere, por exemplo, uma regra de segurança de nuvem específica que exige a inclusão do endereço IP de um servidor na regra. Em vários cenários de uso, a configuração é essencialmente a mesma. No entanto, a regra inclui um endereço IP que varia dependendo do caso de uso. Crie uma única configuração com uma variável contendo o endereço IP em vez de vários. Altere a variável na implementação da política de segurança para o endereço IP apropriado para cada caso de uso.
Ao automatizar o processo, será possível evitar desvios de alteração entre usos de configuração e manter arquivos de configuração idênticos exatamente da mesma maneira.
3. Utilizar o Controle de Revisão
No final, quase todas as configurações são gerenciáveis como arquivos de texto simples. Adicione esses arquivos de texto ao seu sistema de gerenciamento de revisão (Git, por exemplo). Obtenha a versão adequada do sistema de controle de revisão quando for o momento de implantar a modificação de configuração.
Este procedimento preservará um histórico de execução de todas as modificações de configuração; sempre que uma alteração for feita, ele acompanhará quem a fez e por quê (como em um tíquete de suporte ou plano de projeto).
Quando surge um problema, isso pode ser benéfico. Uma verificação rápida do sistema de controle de revisão pode revelar quaisquer modificações recentes na configuração se uma máquina começar a funcionar estranhamente do nada. Se erros foram cometidos, eles podem ser corrigidos rapidamente revertendo as alterações ou investigando a raiz do problema.
4. Mantenha suas configurações centralizadas
Centralize todas as suas configurações em uma única área bem conhecida como uma continuação da melhor prática anterior. Isso é simplificado usando um sistema de controle de revisão para acompanhar suas configurações. Você nunca terá que arriscar um palpite sobre onde a configuração “mestre” para um determinado componente está localizada centralizando suas configurações. Eles serão simples de avaliar em situações de crise e, se o site for conhecido, usá-los e expandi-los será mais natural. Se as outras configurações estiverem todas na mesma área, será mais simples aderir às melhores práticas indicadas acima se surgir um novo requisito de arquivo de configuração. Isso reduz a possibilidade de que configurações não rastreadas sejam usadas por conveniência e garante que todos mantenham a responsabilidade e sigam as práticas aceitáveis.
5. Distribuir dados de configuração usando métodos automatizados
Os mesmos sistemas automatizados usados para distribuir seu software também devem ser usados para implantar suas personalizações. Os aplicativos modernos nativos da nuvem devem implantar todas as configurações junto com todo o código usando um pipeline de CI/CD, o que é uma prática normal. Isso permite aplicar variáveis e modificações em macros de forma consistente conforme explicado anteriormente e garante que todas as modificações sejam aplicadas a todos os componentes que precisam ser configurados. Ao lidar com muitas configurações, a automação fornece responsabilidade e uniformidade.
Configurações são recursos
As configurações são tão vitais para o seu aplicativo quanto o código, e modificações erradas podem ser igualmente prejudiciais. O mesmo nível de rigor que você usa para tratar seu código-fonte também deve ser usado ao lidar com suas configurações.
Você pode diminuir a complexidade de gerenciamento de configuração da nuvem utilizando configurações compartilhadas, centralizadas e padronizadas que são monitoradas pelo controle de versão e entregues automaticamente.