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

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

  • 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

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 .

  • 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

Publique su clave, recupérela usando

infracost configure get api_key

y luego haga clic en Agregar secreto.

image.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

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

y verán los resultados

image.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