Como não apagar a sua empresa em um comando

Standard

Circulou pela internet nos últimos dias uma notícia sobre um empresário que supostamente “apagou” sua empresa com aproximadamente 1500 clientes com apenas um comando. Isso teria sido feito através de um comando de automatização de infraestrutura que ao invés de apagar alguns arquivos indesejados acabou deletando todo sistema, motivado por um erro na criação dos parâmetros de automação. Um pequeno deslize que pela notícia teria causado grandes danos, pois até mesmo o backup se encontrava no mesmo servidor.

Já temos a confirmação que se tratou de um boato, mas acho que podemos aproveitar todo interesse com relação a possível desgraça de um desavisado, e atentar que um código de automação de infraestrutura mal feito pode de fato causar grandes danos no seu ambiente.

É bom lembrar que automação é a replicação de uma determinada operação, ou seja, ela por si só não garante que o que foi solicitado para ser feito de fato está correto, isso quer dizer que caso você solicite, por engano, a remoção de um arquivo que não deveria ser apagado, essa deleção será replicada por todos os ativos que estão no parque gerenciado, com base nisso, como podemos fazer para evitar que esse tipo de desastre aconteça? Teste!

Como a infraestrutura está virando código, começamos a adotar algumas boas práticas da engenharia de software, uma delas é teste automatizado de código, que é a ideia de escrever instruções que são responsáveis de garantir que o que foi solicitado de fato foi feito, ou seja, com teste automatizado é possível se criar um ambiente de teste onde será aplicado a sua modificação de ambiente e em seguida será executado uma bateria de teste, afim de verificar se o que você solicitou de fato foi feito, caso você tenha errado na remoção dos arquivos, você terá estragado apenas um ambiente irrelevante de teste que foi criado com esse objetivo. Vamos para um exemplo prático:

Imagine que você gerencia 50 servidores web e foi informado que exista uma falha de segurança causada pelo simples fato da existência de um determinado arquivo e a sua remoção resolveria rapidamente o problema nos 50 servidores, ou seja, caso você não remova esse arquivo rapidamente todos os seus servidores web estarão vulneráveis. Com essa situação você prepara a modificação no seu ambiente e envia rapidamente, certo? Não tão rápido.

A melhor coisa a fazer na montagem de um ambiente de automação de infraestrutura é entender qual comportamento esperado do mesmo, ou seja, no caso de um servidor web o básico seria esperar que o serviço web esteja executando (pode ser um nginx ou apache, por exemplo) e que as portas 80 e 443 estejam acessíveis. Com isso eu configuro meu teste para verificar se o serviço em questão está em execução e as portas 80 e 443 estão funcionando corretamente. Com isso eu garanto que o mínimo esperado do meu ambiente foi realizado.

No exemplo utilizado, um servidor seria criado com sistema operacional básico. Logo em seguida a ferramenta de automação de infraestrutura aplicaria as regras que configura o ambiente web “do zero”, assim como a sua nova modificação no código que apaga um determinado arquivo e em seguida seu código de automação de infraestrutura solicita que o serviço web seja iniciado. Após o provisionamento desse ambiente o teste entra em cena e verifica se o serviço está de fato funcionando, ou seja, caso a sua remoção afetasse o serviço, você teria maiores chances de pegar o problema antes de aplicá-lo em sua infraestrutura.

Uma ótima ferramenta para teste de infraestrutura é o ServerSpec. Que tem uma linguagem bem simples e fácil, até mesmo quem não estão muito acostumado com desenvolvimento de software.  Vamos a um exemplo de verificar se uma determinada porta está de fato escutando:

describe port(80) do 
  it { should be_listening } 
end

Uma outra dica, não menos importante, é o fato de você manter o backup em local seguro. Ter em uma pasta local /var/backups com toda a retenção dos seus dados antigos é praticamente o mesmo que não ter backup, ou seja, se você não mantém backup remoto dos seus dados, considere, pois em algum momento seu teste pode falhar e então você poderá “destruir sua empresa”.