Como atualizo o arquivo de configuração do Nginx em muitos servidores idênticos ao mesmo tempo?

12

Temos uma frota de servidores Nginx no Amazon EC2, onde ocasionalmente precisamos atualizar os arquivos de configuração para implementar novas configurações.

Atualmente, temos as configurações em uma AMI personalizada e, se precisarmos atualizar, precisamos reconstruir a AMI e, em seguida, as instâncias do EC2. Temos alguns scripts auxiliares, mas ainda é um grande esforço para fazer isso. Existe alguma maneira melhor?

Bububu
fonte
3
ansible, saltstack para citar alguns.
poige

Respostas:

26

Há vários conceitos que você pode aproveitar.

A chave do sucesso é a automação

A primeira opção é continuar fazendo o que você está fazendo agora, ou seja, reconstruir os EC2s a cada alteração na configuração . Apenas de uma maneira totalmente automatizada.

Agora que você está fazendo atualizações de configuração por meio de AMIs, você dá um passo adiante e cria um pipeline que, após uma alteração no arquivo de configuração em algum repositório, irá:

  1. Crie automaticamente uma nova AMI - uma das ferramentas mais populares para fazer isso é o Packer
  2. Reconstrua automaticamente sua frota Nginx - você já deve ter todos os servidores Nginx em um grupo de dimensionamento automático com um Application Load Balancer na frente. Se você não fizer isso você deve como ele vai fazer a atualização tão simples como atualizar a configuração de lançamento ASG e esperando para as instâncias para obter re-construído a partir do novo AMI.

A segunda opção é manter as instâncias no lugar e implantar apenas os arquivos de configuração , sem reconstruí-los. Geralmente, você pode tratar os arquivos de configuração como código e implantar suas alterações de configuração da mesma maneira que implementaria liberações de código. A AWS tem muitas ferramentas para ajudar nisso.

  • AWS Elastic Beanstalk que usa o Chef internamente e você pode criar um script de suas atualizações do Nginx dessa maneira.
  • AWS Code Deploy, que é uma ferramenta de implantação totalmente programável por script que se integra bem a outras partes do AWS Code Suite :
    • Confirmação de código onde você pode manter seus arquivos de configuração do Nginx no Git.
    • Code Pipeline que pode disparar automaticamente a implantação sempre que um arquivo de configuração é atualizado no Code Commit.
  • Ansible ou Puppet, que são ferramentas populares que não são da AWS, que podem ajudar a manter todos os servidores configurados da mesma maneira.

Depois de se familiarizar com a automação dessas atualizações de configuração do Nginx, convém estender a automação para o restante de sua infraestrutura.


Há um ótimo whitepaper Visão geral das opções de implantação na AWS que fornecerá uma boa visão geral.

Espero que ajude :)

MLu
fonte
Uma alternativa ao Ansible ou Puppet é o Salt, projetado para uma configuração do tipo mestre / lacaio e otimizado para implantações em larga escala.
Araho 16/01/19
5

Armazene suas configurações no EFS e monte o EFS no local em que as configurações do Nginx são esperadas. Em alternativa, coloque-os no Amazon S3 e execute uma sincronização ocasionalmente ou use s3fs (cuidado com o s3fs pode não ser bom o suficiente para uso em produção).

Quando você precisar alterar sua configuração, aumente o tamanho desejado do grupo de dimensionamento automático para dobrar o que você precisa para acionar novas instâncias com a nova configuração e, em seguida, volte para o que você precisa, o que removerá as instâncias antigas. Como alternativa, basta fazer uma reinicialização contínua dos servidores.

Outra opção é simplesmente enviar as novas configurações para o servidor usando uma ferramenta básica de automação, como a implantação de código da AWS.

As opções totalmente automatizadas acima são tecnicamente melhores e mais limpas, mas se você raramente alterar as configurações e desejar uma solução fácil, isso poderá ajudar.

Tim
fonte
1

Reconstruir as AMIs ou criar pipelines de implantação completos como os outros sugerem apenas para uma alteração no arquivo de configuração parece um exagero. Você deve usar o Ansible para enviar alterações e manter todos os seus nós sincronizados. Existem muitos módulos Ansible que podem ajudá-lo a automatizar as tarefas comuns.

IPX
fonte
Um benefício da infraestrutura imutável é que você sabe que não possui servidores "de estimação" que são frágeis e devem ser mantidos. Isso garante que você pode criar mais servidores em prod / DR / testing sem problemas.
Tim