# Infracost: la solución de la administración de costos de la nube para Terraform💰📉

## ¿Que opinas de configurar en tu IAC, los costos de los mismos #BillingTime? 

### Te presento **infracost.io **

El costo de la infraestructura es un tema crítico, especialmente cuando se trata del costo de la nube. Simplemente porque la mayoría de los gastos no son fijos, y es fácil complicar todo eligiendo las herramientas incorrectas. Sin embargo, siempre hay un ingeniero con superpower detrás de cada problema. El equipo de @infracost ha desarrollado una herramienta excepcional que escanea los cambios en el código de Terraform y crea una estimación de costos simple y comprensible antes de lanzar cualquier recurso. 

## **¿Cómo funciona Infracost y cómo podemos integrarlo en CI/CD?**

Me gustaría compartir mi experiencia en la integración de la API de Infracost con  Terraform. Se requiere experiencia técnica junto con algún conocimiento práctico de las acciones de GitHub, Terraform e Infracost API.

## **API de Infracost:**

La API es una herramienta increíble para calcular el impacto de los costos en los proyectos de terraform. permite a DevOps, SRE y desarrolladores ver un desglose de costos y comprender los costos antes de realizar cambios, ya sea en la terminal o en los cambios mediante PR (pull request).  También se puede usar para agregar automáticamente un comentario que muestre las diferencias de estimación de costos.

## La previa

Repositorio [Github](https://github.com/infracost/infracost)

- Instalación:

```
brew install infracost 
infracost --version
```

```
$ infracost --version
Infracost v0.9.21
```

- Busquemos la clave API:

Para Registrarse

```
infracost register
```

Utiliza la CLI, La clave se puede recuperar con: 
```
infracost configure get api_key
```


# Manos a la Obra desde la terminal 

Ejecute Infracost usando nuestro proyecto Terraform de ejemplo para ver cómo funciona.

[github](https://github.com/roxsross/terraform-infracost) 

```
git clone https://github.com/roxsross/terraform-infracost.git

cd terraform-infracost/example-aws

#Dado que este Terraform no se ha aplicado, la línea de base es de $0, por lo que la diferencia es de $680

infracost diff --path .

# Actualiza el tipo de instance type to m5.8xlarge.
vi main.tf

# Vuelve aplicar y veras los nuevos cambios? Costing over $1100/month! 

infracost diff --path .
```

```
rossanasuarez@ubuntu:~/295devops/terraform-infracost/example-aws$ infracost diff --path .
Detected Terraform directory at .
  ✔ Checking for cached plan... found
  ✔ Extracting only cost-related params from terraform 
  ✔ Retrieving cloud prices to calculate costs 

Project: infracost/example-terraform/example-aws

+ aws_instance.web_app
  +$680

    + Instance usage (Linux/UNIX, on-demand, m5.4xlarge)
      +$561

    + root_block_device
    
        + Storage (general purpose SSD, gp2)
          +$5.00

    + ebs_block_device[0]
    
        + Storage (provisioned IOPS SSD, io1)
          +$62.50
    
        + Provisioned IOPS
          +$52.00

+ aws_lambda_function.hello_world
  Monthly cost depends on usage

    + Requests
      Monthly cost depends on usage
        +$0.20 per 1M requests

    + Duration
      Monthly cost depends on usage
        +$0.0000166667 per GB-seconds

Monthly cost change for infracost/example-terraform/example-aws
Amount:  +$680 ($0.00 → $680)

──────────────────────────────────
Key: ~ changed, + added, - removed

2 cloud resources were detected:
∙ 2 were estimated, all of which include usage-based costs, see https://infracost.io/usage-file
```

## - Configurar CI/CD:

> Hay múltiples CI/CD para integrar la API de Infracost.

Pero para esta entrada del blog nos centraremos solo en las acciones de GitHub. 
para obtener más información, consulte la documentación de [infracost.io](https://github.com/infracost/infracost) .

- Gestion de secretos de GitHub:

Dado que la clave se usará en las acciones de GitHub, debemos almacenarla en los secretos de acciones. Para hacerlo, vaya a Configuración-> secretos-> Acciones. 
Luego haga clic en Nuevo secreto de repositorio.

![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1649694318602/L9ZM29U4m.png)

Publique su clave, recupérela usando 
```
infracost configure get api_key
```
y luego haga clic en Agregar secreto. 

![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1649697150457/g9FB8GpS8.png)


## Integre Infracost con Github Action:

En la documentación, hay una plantilla para integrar la infraestructura con la acción de GitHub.

```
on: [pull_request]
jobs:
  infracost:
    runs-on: ubuntu-latest
    env:
      AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
      AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}    
    name: Run Infracost
    steps:
      - name: Check out repository
        uses: actions/checkout@v2

      - name: Install terraform
        uses: hashicorp/setup-terraform@v1
        with:
          terraform_wrapper: false 

      - name: Setup Infracost
        uses: infracost/actions/setup@v1

        with:
          api-key: ${{ secrets.INFRACOST_API_KEY }}
          
      - name: Generate Infracost JSON
        run: infracost breakdown --path=aws-example --format=json --out-file=/tmp/infracost.json
        
      - name: Post Infracost comment
        uses: infracost/actions/comment@v1
        with:
          path: /tmp/infracost.json
          behavior: update    
```

![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1649853959254/4SRBC7vx0.png)

Luego aplican con PR o la configuración que le asignen en "on"

y verán los resultados

![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1649853905213/jtRFHLlWQ.png)


Para resumir , en esta publicación de blog echamos un vistazo a la funcionalidad de Infracost y las acciones de GitHub 


Espero que hayas disfrutado leyendo este artículo, si es así, aplaude, comenta y comparte.



![infracost.gif](https://cdn.hashnode.com/res/hashnode/image/upload/v1649857177331/bCqDXFeYG.gif)

