O gerenciamento de configuração é o processamento de alterações em um sistema para garantir a integridade ao longo do tempo, envolvendo geralmente ferramentas e processos que facilitam a automação e a observabilidade. Embora este conceito não tenha se originado na indústria de TI, o termo é largamente usado para se referir ao gerenciamento de configuração de servidor.
No contexto de servidores, o gerenciamento de configuração também é geralmente referido como Automação de TI ou Orquestração de Servidor. Ambos os termos destacam os aspectos práticos do gerenciamento de configuração e a capacidade de controlar vários sistemas a partir de um servidor central.
Este guia lhe apresentará os benefícios do uso de uma ferramenta de gerenciamento de configuração para automatizar a configuração de sua infraestrutura de servidor, e como uma dessas ferramentas, o Ansible, pode ajudá-lo com isto.
Existem várias ferramentas de gerenciamento de configuração disponíveis no mercado, com diferentes níveis de complexidade e estilos diferentes de arquitetura. Embora cada uma destas ferramentas tenha suas próprias características e trabalhe de maneira ligeiramente diferente, todas elas fornecem a mesma função: garantir que o estado de um sistema corresponda ao estado descrito por um conjunto de scripts de provisionamento.
Muitos dos benefícios do gerenciamento de configuração para os servidores vêm da capacidade de definir sua infraestrutura como código. Isso habilita você a:
Além disso, as ferramentas de gerenciamento de configuração oferecem a você uma maneira de controlar de um a centenas de servidores a partir de um local centralizado, o que pode melhorar drasticamente a eficiência e a integridade da sua infraestrutura de servidor.
O Ansible é uma ferramenta de gerenciamento de configuração moderna que facilita a tarefa de configurar e manter servidores remotos, com um projeto minimalista destinado a colocar os usuários em operação rapidamente.
Os usuários escrevem scripts de provisionamento do Ansible em YAML, um padrão de serialização de dados mais fácil de usar que não é vinculado a nenhuma linguagem de programação em particular. Isso habilita os usuários a criar scripts de provisionamento sofisticados mais intuitivamente em comparação com ferramentas semelhantes na mesma categoria.
O Ansible não requer nenhum software especial a ser instalado nos nós que serão gerenciados com esta ferramenta. Uma máquina de controle é configurada com o software do Ansible, que então se comunica com os nós através do SSH padrão.
Com uma ferramenta de gerenciamento de configuração e um framework de automação, o Ansible encapsula todas as funcionalidades comuns presentes em outras ferramentas da mesma categoria, enquanto ainda mantém um forte foco em simplicidade e desempenho:
O Ansible acompanha o estado de recursos em sistemas gerenciados, para evitar a repetição de tarefas que foram executadas antes. Se um pacote já foi instalado, ele não tentará instalá-lo novamente. O objetivo é que após cada execução de provisionamento o sistema atinja (ou mantenha) o estado desejado, mesmo se você executá-lo várias vezes. Isso é o que caracteriza o Ansible e outras ferramentas de gerenciamento de configuração como tendo um comportamento idempotente. Ao executar um playbook, você verá o status de cada tarefa sendo executada e se a tarefa executou ou não uma alteração no sistema.
Ao escrever scripts de automação do Ansible, você pode usar variáveis, condicionais e loops para tornar sua automação mais versátil e eficiente.
O Ansible coleta uma série de informações detalhadas sobre os nós gerenciados, como interfaces de rede e sistema operacional, e as fornece como variáveis globais chamadas de fatos do sistema. Fatos podem ser usados dentro de playbooks para tornar sua automação mais versátil e adaptável, comportando-se de maneira diferente dependendo do sistema que estiver sendo provisionado.
O Ansible utiliza o sistema de modelos Jinja2 para Python para permitir expressões dinâmicas e acesso a variáveis. Os modelos podem ser usados para facilitar a definição de arquivos de configuração e serviços. Por exemplo, você pode usar um modelo para configurar um novo host virtual no Apache, enquanto reutiliza o mesmo modelo para várias instalações de servidor.
O Ansible vem com centenas de módulos embutidos para facilitar a escrita da automação para tarefas de gerenciamento comuns de sistemas, como instalar pacotes com o apt
e sincronizar arquivos com o rsync
, e também para lidar com softwares populares como os sistemas de banco de dados (como MySQL, PostgreSQL, MongoDB, e outros) e ferramentas de gerenciamento de dependências (como o composer
do PHP, o gem
do Ruby, o npm
, do Node e outros). Além disso, existem várias maneiras pelas quais você pode estender o Ansible: plugins e módulos são boas opções quando você precisa de uma funcionalidade personalizada que não está presente por padrão.
Você também pode encontrar módulos e plugins de terceiros no portal Ansible Galaxy.
Agora, vamos dar uma olhada na terminologia e conceitos do Ansible para ajudar você a familiarizar-se com esses termos à medida que aparecem ao longo da série.
Um nó de controle é um sistema onde o Ansible está instalado e configurado para se conectar ao seu servidor. Você pode ter vários nós de controle, e qualquer sistema que seja capaz de executar o Ansible pode ser configurado como um nó de controle, incluindo computadores pessoais ou notebooks executando Linux ou um sistema operacional baseado em Unix. Por enquanto, o Ansible não pode ser instalado em hosts Windows, mas você pode contornar esta limitação, configurando uma máquina virtual que execute o Linux e executando o Ansible a partir daí.
Os sistemas que você controla usando o Ansible são chamados de nós gerenciados. O Ansible requer que os nós gerenciados sejam alcançáveis via SSH e que tenham Python 2 (versão 2.6 ou superior) ou Python 3 (versão 3.5 ou superior) instalado.
O Ansible suporta uma variedade de sistemas operacionais, incluindo servidores Windows como nós gerenciados.
Um arquivo de inventário contém uma lista dos hosts que você gerenciará usando o Ansible. Embora o Ansible geralmente crie um arquivo de inventário padrão quando instalado, você pode usar inventários por projeto para ter uma melhor separação de sua infraestrutura e evitar executar comandos ou playbooks no servidor errado por engano. Inventários estáticos são geralmente criados como arquivos .ini
, mas você também pode usar inventários gerados dinamicamente, escritos em qualquer linguagem de programação que possa retornar JSON.
No Ansible, uma tarefa (task) é uma unidade individual de trabalho a ser executada em um nó gerenciado. Cada ação a executar é definida como uma tarefa. As tarefas podem ser executadas como uma ação única através de comandos ad-hoc ou incluídas em um playbook como parte de um script de automação.
Um playbook contém uma lista ordenada de tarefas, e algumas outras diretivas para indicar quais hosts são o alvo dessa automação, se irá ou não usar um sistema de escalação de privilégios para executar essas tarefas, e seções opcionais para definir variáveis ou incluir arquivos. O Ansible executa tarefas sequencialmente, e uma execução completa do playbook é chamada de play (reprodução). Os playbooks são escritos no formato YAML.
Os handlers são usados para executar ações em um serviço, como reinicialização ou parada de um serviço que esteja funcionando ativamente no sistema do nó gerenciado. O handlers são geralmente ativados pelas tarefas, e sua execução acontece no final de uma reprodução, depois que todas as tarefas estiverem concluídas. Desta forma, se mais de uma tarefa dispara uma reinicialização para um serviço, por exemplo, o serviço será reiniciado apenas uma vez e depois de todas as tarefas serem executadas. Embora o comportamento padrão do handler seja mais eficiente e, no geral, uma melhor prática, também é possível forçar a execução imediata do handler, se isso for exigido por uma tarefa.
Uma função (role) é um conjunto de playbooks e arquivos relacionados, organizados em uma estrutura pré-definida que é conhecida pelo Ansible. As funções facilitam a reutilização e a redefinição de objetivos dos playbooks em pacotes compartilháveis de automação granular para objetivos específicos, como instalar um servidor Web, instalar um ambiente PHP, ou configurar um servidor MySQL.
O Ansible é uma ferramenta de automação de TI minimalista que tem uma curva de aprendizagem suave, graças em parte ao uso do YAML para scripts de provisionamento. Ela tem um grande número de módulos embutidos que podem ser usados para abstrair tarefas, como instalar pacotes e trabalhar com modelos. Suas exigências simplificadas de infraestrutura e sintaxe acessível podem ser uma boa opção para quem está iniciando no gerenciamento de configuração.
Na próxima parte desta série, veremos como instalar e começar com o Ansible em um servidor Ubuntu 20.04.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!