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.
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.
Publique su clave, recupérela usando
infracost configure get api_key
y luego haga clic en Agregar secreto.
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
Luego aplican con PR o la configuración que le asignen en "on"
y verán los resultados
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.