Prevendo Custo de Arquitetura Terraform
Published: 2024-05-10 11:13:13

Estes dias estava navegando pelo Twitter, e acabei vendo uma recomendação de um Dev para uma ferramenta que prometia prever o custo de uma **infra** levantada com **Terraform**. Achei muito incrível principalmente para projetos **Open Source** que muitas das vezes trabalha com pouco capital ou com ajuda da comunidade, saber o que custara cada parte da infra de previsão muito importante.


Segue a ferramenta discutida neste artigo: [InfraCost](https://www.infracost.io)

Eu sou o The Mark e hoje vamos nos aprofundar um pouco mais nesta ferramenta DevOps.

## Terraform?
O intuito do Terraform é trazer a montagem de sua infra para o código (infraestrutura como código), assim facilitaria na hora de instanciar projetos novos, sem precisar de ficar criando a mesma em Dashboard. 
	Assim com o terraform é possível criar uma estrutura inteira na AWS, Google Cloud, Azure entre outros, usando apenas o código. E esta aqui o problema, como você só vê o código, muitas as vezes é complexo usar calculadoras para chegar aos custos destes serviços.

## O InfraCost
A grande motivação do InfraCost é facilitar a manutenção dos custos de uma infra, ele consegue prever o custo ha partir das informações inseridas no terraform.

### CLI do InfraCost
A CLI do InfraCost é muito simples e completa ao mesmo tempo, para instalar ele é só seguir a documentação: [Guia de Iniciação](https://www.infracost.io/docs/).

Quando já tiver a CLI instalada e autenticada, para começar prever o custo de sua infra é só executar o comando:
`infracost breakdown --path .`
* Neste caso estou prevendo que você tenha navegado até a raiz da sua infra!

![Exemplo do uso da CLI](https://i.imgur.com/eVgELo5.png)

Assim esta ferramenta consegue calcular sem configurações extras recursos com custos mensais.

### Custo por Uso
Quando falamos de recursos que o custo é baseado no uso, ai normalmente é mais complexo de se chegar a um valor gasto, porem para isso o Terraform tem suporte a um arquivo yml com a previsão de uso deste recurso, e com estas informações ele conseguira calcular e prever o custo final.

Neste exemplo inclui um novo S3 Bucket na infra do TabNews, e previ para ele um Storage mensal de 1000GB, um total de 10.000 PUB, COPY, POST, e 100.000 GET e SELECT mensais para o mesmo.
```yml
# See https://infracost.io/usage-file/ for docs
version: 0.1
resource_usage:
  aws_s3_bucket.test:
    standard: # Usages of S3 Standard:
      storage_gb: 1000 # Total storage in GB.
      monthly_tier_1_requests: 10000 # Monthly PUT, COPY, POST, LIST requests (Tier 1).
      monthly_tier_2_requests: 100000 # Monthly GET, SELECT, and all other requests (Tier 2).
```

Assim o InfraCost foi capas de prever um custo extra por este Bucket quando eu passo como parâmetro o caminho deste arquivo .yml de custo.

![Exemplo de uso de arquivo de uso](https://i.imgur.com/HNIMSzd.png)

Caso precise de um exemplo de quais parâmetros são possível, basta dar uma olhadinha no exemplo completo de uso [infracost-usage-example.yml](https://github.com/infracost/infracost/blob/master/infracost-usage-example.yml)

### GitHub Actions
Alem disso o InfraCost tem support aos GitHub Actions, desta forma ao ser criado um PR, ele fará um comentário com o custo da infra atual, e o futuro, como no exemplo que peguei no site deles abaixo!
![Exemplo GitHub Actions e InfraCost](https://i.imgur.com/s4om6BM.png)

### Extensão VSCode
Alem de tudo isso, a ferramenta também tem uma versão para o VSCode, a mesma mostra em tempo real o custo da infra como no gif abaixo!
![GIF Uso do infra cost no VSCode](https://i.imgur.com/hf1fZqJ.gif)

## Conclusão
O InfraCost é super poderoso e tem outras funcionalidades que acabei não falando por aqui, porem sua utilidade ao criarmos uma infra é surreal, podendo ter a previsão de custo a qualquer momento. 

Espero que tenham gostado, comentem caso tenha qualquer duvida e estou bolando um PR para caso acham interessante, incluirmos o mesmo no projeto do Tabnews para podermos ter sempre o custo da nossa infra em cada PR quando o mesmo tiver alguma alteração!



## Saiba mais
Documentação InfraCost: [https://www.infracost.io/docs/](https://www.infracost.io/docs/)
Alguns casos de uso do InfraCost: [https://www.infracost.io/use-cases/](https://www.infracost.io/use-cases/)