A automação é um dos pilares do DevOps. Ela não se resume a escrever scripts ou configurar pipelines; é, antes de tudo, uma mentalidade. Automatizar significa buscar consistentemente eliminar o trabalho manual repetitivo, reduzir erros humanos, acelerar entregas e liberar tempo para atividades de maior valor. Nesta aula, vamos explorar o que significa adotar essa mentalidade, como identificar o que deve ser automatizado (e o que não deve), como avaliar o retorno sobre o investimento (ROI) e por onde começar a implementar essa cultura na sua rotina ou na sua equipe.

O DevOps, em sua essência, busca quebrar silos entre desenvolvimento e operações, promovendo colaboração e eficiência. A automação é a ferramenta que permite alcançar essa eficiência de forma sustentável. Sem ela, as equipes ficam presas a tarefas manuais, propensas a falhas e lentas para responder às mudanças. Portanto, entender a mentalidade de automação é o primeiro passo para se tornar um profissional de DevOps mais eficaz.

Automatize o repetitivo

A regra de ouro da automação é: se você faz algo mais de duas vezes, automatize. Tarefas repetitivas são as principais candidatas à automação, pois consomem tempo sem agregar valor cognitivo. Exemplos comuns incluem: provisionamento de ambientes, configuração de servidores, execução de testes, criação de relatórios, deploy de aplicações, entre outros.

Ao automatizar o repetitivo, você não apenas economiza tempo, mas também reduz a probabilidade de erros. Um processo manual executado 50 vezes por semana tem alta chance de falhar em algum momento, seja por fadiga, distração ou esquecimento. A automação garante consistência: o mesmo passo é executado da mesma forma toda vez, com os mesmos parâmetros e na mesma ordem.

Um exemplo clássico é a configuração de servidores. Em vez de acessar cada servidor via SSH e executar comandos manualmente, você pode usar ferramentas como Ansible, Puppet ou Chef para definir a configuração desejada em código e aplicá-la de forma idempotente. Isso não só acelera o processo, mas também garante que todos os servidores estejam em conformidade com o padrão definido.

# Exemplo de um playbook Ansible para instalar o Nginx em um servidor Ubuntu
---
- name: Instalar e configurar Nginx
  hosts: webservers
  become: yes
  tasks:
    - name: Atualizar apt cache
      apt:
        update_cache: yes
    - name: Instalar Nginx
      apt:
        name: nginx
        state: present
    - name: Iniciar e habilitar o serviço Nginx
      service:
        name: nginx
        state: started
        enabled: yes

Nesse playbook, a automação garante que Nginx seja instalado e iniciado em todos os servidores do grupo 'webservers', sem intervenção manual. Isso é repetitivo, mas automatizado.

Toil

Toil é um termo usado no site reliability engineering (SRE) para descrever o trabalho manual, repetitivo, automatizável e sem valor duradouro. O toil é o oposto do trabalho de engenharia: ele não produz melhorias permanentes, apenas mantém o sistema funcionando. Exemplos de toil incluem: reiniciar serviços manualmente, ajustar configurações à mão, responder a alertas repetitivos que não exigem ação real, e realizar releases manuais.

O toil é prejudicial porque consome tempo que poderia ser usado para melhorar a infraestrutura, desenvolver novas funcionalidades ou automatizar ainda mais. Além disso, o toil tende a aumentar com o tempo, à medida que os sistemas crescem e se tornam mais complexos. Se não for controlado, o toil pode levar ao burnout da equipe e à degradação da qualidade do serviço.

A mentalidade de automação envolve identificar o toil e eliminá-lo. Uma prática comum é medir o toil: quanto tempo a equipe gasta em tarefas manuais e repetitivas? Se esse tempo for significativo (por exemplo, mais de 20% da carga de trabalho), é um sinal de que a automação deve ser priorizada. Ferramentas como o Google SRE Book sugerem que o toil deve ser limitado a um máximo de 50% do trabalho da equipe, idealmente menos.

Uma forma de reduzir o toil é criar runbooks automatizados. Em vez de seguir um documento passo a passo para resolver um incidente, você pode criar um script que execute essas etapas automaticamente, ou até mesmo um bot que responda a alertas comuns. Por exemplo, se um serviço fica sem espaço em disco, um script pode limpar arquivos temporários automaticamente, sem intervenção humana.

#!/bin/bash
# Script para limpar arquivos temporários com mais de 7 dias
find /tmp -type f -mtime +7 -exec rm -f {} \;
echo "Arquivos temporários antigos removidos."

Esse script pode ser agendado via cron para rodar diariamente, eliminando a necessidade de um operador executar manualmente a limpeza.

ROI da automação

Automatizar nem sempre é a melhor escolha. É preciso avaliar o retorno sobre o investimento (ROI) de cada automação. O ROI é calculado comparando os benefícios (tempo economizado, redução de erros, aumento de velocidade) com os custos (tempo de desenvolvimento, manutenção, ferramentas). Uma automação só vale a pena se os benefícios superarem os custos em um período razoável.

Para calcular o ROI, você pode usar a seguinte fórmula simples:

ROI = (Benefício Total - Custo Total) / Custo Total * 100

O benefício pode ser medido em horas economizadas por mês, multiplicado pelo custo da hora da equipe. O custo inclui o tempo gasto para desenvolver a automação, testá-la e mantê-la. Por exemplo, se uma tarefa manual leva 2 horas por semana e você a automatiza, economizando 8 horas por mês, e o custo da hora é R$ 100, o benefício mensal é R$ 800. Se o script levou 10 horas para ser criado (custo de R$ 1.000), o ROI após um mês seria:

ROI = (800 - 1000) / 1000 * 100 = -20%

Isso indica que em um mês o ROI é negativo, mas após dois meses ele se torna positivo. Portanto, é importante considerar o ponto de equilíbrio (break-even) e a vida útil da automação.

Além do tempo, considere outros benefícios intangíveis: redução de erros (que podem causar incidentes caros), melhoria da moral da equipe (menos tarefas tediosas) e maior consistência. Esses fatores podem justificar automações que, em termos puramente de tempo, parecem não compensar.

Uma boa prática é manter um backlog de automação, onde cada candidata é avaliada com base no ROI estimado. Priorize automações com alto ROI e baixo esforço, conhecidas como 'quick wins'.

Onde começar

Começar a adotar a mentalidade de automação pode ser desafiador, especialmente em ambientes legados ou com resistência à mudança. Aqui estão algumas diretrizes para começar:

  • Identifique tarefas repetitivas: Liste as tarefas que você e sua equipe executam manualmente com frequência. Priorize aquelas que são demoradas, propensas a erros ou que não exigem raciocínio.
  • Comece pequeno: Escolha uma tarefa simples e automatize-a. Pode ser um script para criar backups, um alias para comandos frequentes, ou um pipeline de CI para testes. O sucesso inicial gera confiança e impulso.
  • Use ferramentas existentes: Aproveite ferramentas como cron, systemd timers, scripts em bash, ou ferramentas de IaC como Terraform e Ansible. Não reinvente a roda.
  • Documente e compartilhe: Ao automatizar, documente o processo e compartilhe com a equipe. Isso incentiva outros a fazerem o mesmo e cria uma cultura de automação.
  • Meça o impacto: Acompanhe as horas economizadas e a redução de erros. Isso ajuda a justificar futuros investimentos em automação.

Um exemplo prático de começar pequeno: se você costuma criar ambientes de desenvolvimento manualmente, pode usar um script ou um Docker Compose para subir todos os serviços com um único comando. Isso reduz o tempo de configuração de horas para minutos.

# Exemplo de um script para criar um ambiente de desenvolvimento com Docker
docker-compose up -d

Ao adotar essa prática, você não só acelera o desenvolvimento, mas também garante que todos na equipe tenham o mesmo ambiente, eliminando problemas de 'funciona na minha máquina'.

Boas práticas e observações finais

A mentalidade de automação não é um destino, mas um processo contínuo. Sempre esteja atento a novas tarefas repetitivas que surgem e busque automatizá-las. Mantenha suas automações simples e modulares, para que sejam fáceis de manter e evoluir. Teste suas automações regularmente para garantir que continuam funcionando. E, acima de tudo, lembre-se de que a automação deve servir às pessoas, não o contrário: se uma automação está causando mais problemas do que resolve, revise-a ou descarte-a.

Referências

Exercícios

  1. Liste três tarefas repetitivas que você realiza no seu dia a dia de trabalho ou estudo e que poderiam ser automatizadas. Para cada uma, descreva brevemente como você automatizaria.
  2. ✓ Resposta: Exemplo: 1) Backup manual de arquivos - criar um script que compacta e copia para um diretório remoto via cron. 2) Criação de ambientes de desenvolvimento - usar Docker Compose para subir todos os serviços. 3) Relatórios de status - gerar automaticamente com um script que coleta dados e envia por e-mail.
  3. Defina toil e dê três exemplos de tarefas que podem ser consideradas toil em um ambiente de TI.
  4. ✓ Resposta: Toil é o trabalho manual, repetitivo, automatizável e sem valor duradouro. Exemplos: reiniciar serviços manualmente, responder a alertas falsos, ajustar tamanhos de disco manualmente, realizar deploys manuais.
  5. Calcule o ROI de uma automação que economiza 5 horas por semana, considerando que o custo da hora é R$ 50 e o desenvolvimento da automação levou 20 horas. Considere um mês de 4 semanas.
  6. ✓ Resposta: Benefício mensal = 5 horas/semana * 4 semanas = 20 horas/mês. Valor do benefício = 20 * R$ 50 = R$ 1.000. Custo de desenvolvimento = 20 horas * R$ 50 = R$ 1.000. ROI = (1000 - 1000) / 1000 * 100 = 0%. O ponto de equilíbrio é atingido no primeiro mês; a partir do segundo mês, o ROI é positivo.
  7. Descreva um plano para começar a automatizar em uma equipe que ainda não adota essa prática. Inclua pelo menos três passos concretos.
  8. ✓ Resposta: 1. Realizar um workshop para identificar tarefas repetitivas e toil com a equipe. 2. Escolher uma tarefa de alto impacto e baixo esforço para automatizar como piloto. 3. Criar um backlog de automação com prioridades baseadas em ROI. 4. Estabelecer um dia da semana dedicado a melhorias de automação (ex: 'Sexta de Automação').
  9. Escreva um script bash simples que automatize a verificação de espaço em disco e envie um alerta se o uso for superior a 80%.
  10. ✓ Resposta:
    #!/bin/bash
    THRESHOLD=80
    CURRENT=$(df -h / | awk 'NR==2 {print $5}' | sed 's/%//')
    if [ "$CURRENT" -gt "$THRESHOLD" ]; then
      echo "Alerta: Uso de disco em / está em ${CURRENT}% (limite: ${THRESHOLD}%)" | mail -s "Alerta de disco" admin@example.com
    fi