Skip to main content
Todos os posts
Atualizado em

Estimativa de custo do Terraform em cada pull request

O bot de PR da LevelFour calcula o custo de cada mudança de Terraform e CloudFormation no GitHub e no GitLab, sugere configurações mais baratas e faz o commit delas quando você responde.

Gabriel Nielsen
Read in EnglishTerraform Cost Estimates in Every Pull Request

Boa parte da fatura de cloud se decide no code review. Alguém escolhe o tamanho da instância por costume, copia o tipo de disco de outro módulo ou sobe o número de réplicas para um teste de carga e nunca mais baixa. Quando isso aparece na fatura, a mudança já está rodando há semanas.

O bot de PR da LevelFour traz essa conta para dentro do pull request. Ele lê cada pull request no GitHub e cada merge request no GitLab que mexe em Terraform ou CloudFormation, calcula o custo da mudança e propõe configurações mais baratas quando encontra alguma.

O que o bot publica

  • Um comentário com quanto os recursos alterados custam antes e depois da mudança, e o gasto mensal. A cada push, o bot edita esse mesmo comentário, e a conversa continua legível.
  • Um status da LevelFour no painel de checks do GitHub e no status do pipeline do GitLab, com o resumo da análise. Esse status só falha quando a própria análise não conseguiu rodar.
  • Sugestões inline nas linhas do diff, cada uma com uma mudança concreta num recurso, prontas para commit.

No CloudFormation, o bot lê templates em YAML e JSON, templates SAM e nested stacks cujo template está no repositório. Antes de calcular o custo, ele resolve parâmetros, condições e mapeamentos, e lista em Assumptions, no comentário de custo, tudo o que precisou supor.

Faça o commit da correção com um comentário

Responda ao bot e ele atende o pedido. O apply grava as sugestões num único commit na branch e responde com o SHA curto desse commit. No GitLab, ele também resolve as threads cujas sugestões aplicou. No GitHub, se a branch andou depois da última análise do bot, ele se recusa a aplicar para não sobrescrever trabalho mais novo.

Comentário no pull request
@levelfourai apply all
@levelfourai apply aws_instance.batch
@levelfourai ignore AWS::EC2::Volume.Logs
@levelfourai snooze waiting for the load test
@levelfourai dismiss sized for the holiday peak

Quem pode comentar também pode rodar o help. Os comandos que mudam alguma coisa exigem acesso de escrita ao repositório no GitHub, ou o papel Developer ou superior no GitLab. dismiss e snooze pedem um motivo, e o comentário de custo mostra quem decidiu e por quê. Assim o próximo revisor vê a decisão.

Ajuste por repositório

Um arquivo .levelfour/config.yml na raiz do repositório desliga o bot, mantém o comentário de custo sem as sugestões inline, ignora caminhos e tipos de recurso ou liga um template de CloudFormation ao arquivo de parâmetros usado no deploy dele:

.levelfour/config.yml
code_suggestions_enabled: false
excluded_paths:
  - tests/fixtures/**
  - examples/**
excluded_resource_types:
  - aws_iam_role_policy_attachment
  - AWS::Logs::*
cloudformation:
  parameter_files:
    stacks/app.yaml: stacks/params/prod.json

O enabled: false desliga o bot, o max_code_suggestions limita as sugestões inline a um número entre 0 e 25, e o region_override fixa todas as estimativas numa região da AWS. O bot descarta o campo que não reconhece e avisa no fim do comentário dele, então um erro de digitação como enabld: false deixa o bot ligado.

A mesma estimativa no CI

A CLI l4 calcula o custo do mesmo Terraform e do mesmo CloudFormation no terminal ou num pipeline. Com --fail-above, o l4 estimate sai com código 2 quando o total mensal passa do limite que você definiu, e o pipeline pode decidir o que fazer com esse código antes de qualquer deploy. O l4 diff usa como critério o que a mudança acrescenta ao custo, em vez do total.

Terminal
l4 estimate --fail-above 500 -q ./infra/

Por padrão, o l4 diff compara com o merge-base do git em relação à main ou à master, então o job precisa do histórico completo do git: fetch-depth: 0 no GitHub Actions e GIT_DEPTH: 0 no GitLab CI. O guia de CI/CD traz os dois jobs completos.

Como começar

Conecte o GitHub ou o GitLab pelo dashboard da LevelFour, e o bot começa a trabalhar no próximo pull request que mexer em Terraform ou CloudFormation. No GitHub, quem instala o app da LevelFour é um Owner da organização. No GitLab, você precisa do papel Maintainer ou Owner em cada projeto, seja no GitLab.com ou numa instância self-managed. A checagem de custo em pull requests vem em todos os planos.

A documentação do bot de PR lista todos os comandos, e a referência de configuração traz todos os campos.

Comece com a LevelFour e veja o custo do seu próximo pull request antes do merge.

Perguntas frequentes

Que tipo de Infrastructure as Code o bot de PR da LevelFour lê?

Terraform e CloudFormation, em pull requests do GitHub e merge requests do GitLab. No CloudFormation, ele lê templates em YAML e JSON, templates SAM e nested stacks cujo template está no repositório. O que é Shift-Left FinOps?.

Quem pode usar os comandos do bot?

Quem pode comentar pode rodar o help. dismiss, snooze, ignore e apply exigem acesso de escrita ao repositório no GitHub, ou o papel Developer ou superior no GitLab.

O bot faz commit num pull request que vem de um fork?

O apply pula pull requests e merge requests de forks, porque a branch do fork é de quem criou o fork.

Como manter o comentário de custo sem as sugestões inline?

Defina code_suggestions_enabled como false no .levelfour/config.yml. O bot continua publicando o comentário de custo e o status.

Mais posts

See what LevelFour can save you