Automação: a mentalidade
LidoEsta aula explora a mentalidade de automação no DevOps, destacando a importância de automatizar tarefas repetitivas, reduzir o toil, calcular o ROI da automação e fornecer um guia prático de como começar. O objetivo é capacitar o aluno a pensar de forma automatizada, priorizando investimentos que gerem mais valor.
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
- SRE Book - Eliminating Toil
- Atlassian - What is Toil?
- Ansible Documentation
- Terraform Documentation
- Docker - What is a Container?
- Return on Investment - Wikipedia
Exercícios
- 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.
- Defina toil e dê três exemplos de tarefas que podem ser consideradas toil em um ambiente de TI.
- 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.
- 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.
- 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%.
#!/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