loader image
Infra360

Infracost.io Configuration

Infracost.io Configuration 

Introduction 

Getting Started 

Installation 

1. Install Infracost 

2. Get API key 

3. Run it 

Advanced usage 

Using Terraform plan file 

Using Terraform state 

Using Terraform state JSON file 

Generate reports 

Usage 

Config file 

Usage-based resources 

Infracost usage file 

CI/CD Integration 

1. Developer/DevOps proposes a change to the infrastructure 

2. Infracost calculates the cost of the change 

3. Team discusses the cost implication

Introduction 

Infracost is an open-source fin-ops tool that helps DevOps and developers continuously reduce their cloud costs. 

Infracost integrates with terraform (Infrastructure-as-a-code tool) to provide the breakdown of cost and difference in cost for any pull request that DevOps/Developers raised with shift-left approach. 

Infracost empowers to discuss costs before the actual resources are created, not after the resources are created. 

Getting Started 

Installation 

1. Install Infracost

Assuming Terraform is already installed, get the latest Infracost release on mac: 

brew install infracost 

2. Get API key 

Register for a free API key: 

infracost register 

The key is saved in  ~/.config/infracost/credentials.yml

3. Run it 

Run Infracost using our example Terraform project to see how it works: 

git clone [email protected]:org/terraform.git 

cd kong-terraform 

# Get breakdown of cost for one of the env 

infracost breakdown –path /dev/ 

# Show diff of monthly costs, edit the yaml file and re-run to compare costs infracost diff –path /dev/ –usage-file /dev/infracost-usage.yml 

Advanced usage 

The following advanced usage methods can be used in addition to the usage methods mentioned above. 

Using Terraform plan file 

Infracost can be run against a Terraform plan file. 

cd /dev/ 

terraform init 

terraform plan -out tfplan.binary 

infracost breakdown –path tfplan.binary 

infracost diff –path tfplan.binary 

Using Terraform state

The  infracost breakdown  command has a  –terraform-use-state  flag that is useful if you want to see the cost breakdown of the current Terraform state. This implies that you have already run Terraform  apply

infracost breakdown –path /dev/ –terraform-use-state 

Using Terraform state JSON file 

The  infracost breakdown  command can be run against a Terraform state JSON file. This implies that you have already run Terraform  apply , thus no cloud creds or  –terraform-plan-flags  is needed. 

cd /dev/ 

terraform show -json > tfstate.json 

infracost breakdown –path tfstate.json 

Generate reports 

The  infracost breakdown  command has a  –format json|table|html  flag that can be used to change the output format. The JSON option can be used to generate files from individual projects that can then be consumed by the  infracost output  command to generate a combined report. The output command has a  –format json|diff|table|html  flag that sets the report format. 

Usage 

Run  infracost output –help  to see the available options. Example usage: 

infracost breakdown –path /dev/ –format json > project1.json infracost breakdown –path /stage/ –format json > project2.json infracost output –path project*.json –format html > report.html 

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/94b48619-c82d-4a45-a9f4-350c0f59f1a0/report.html


Config file 

An Infracost config file can be created in each of your Terraform project repos to specify how Infracost should be run. 

1. Create an  infracost.yml  file in each of your Terraform project repos. Each project can have the parameters mentioned in the table below: 

version: 0.1 

projects: 

– path: /dev/tfplan.json 

usage_file:/dev/infracost-usage.yml 

– path: /test/tfplan.json 

usage_file: /test/infracost-usage.yml 

 2. Pass the file to the  infracost breakdown  or  infracost diff  using the  -config-file  option. 

infracost breakdown –config-file infracost.yml 

infracost diff –config-file infracost.yml 

Usage-based resources 

Infracost distinguishes the price of a resource from its cost. For example, an EC2 instance might be priced at $0.02 per hour, and if run for 100 hours (its usage), it’ll cost $2. Supported resources in Infracost will always show prices, but if a resource has a usage-based cost component, we can’t show its cost as we don’t know how much it’ll be used. For example, an AWS Lambda resource shows no monthly costs for requests and duration: 

Name Quantity Unit Monthly Cost aws_lambda_function.hi 

├─ Requests Cost depends on usage: $0.20 per 1M requests 

└─ Duration Cost depends on usage: $0.0000166667 per GB-seconds 

PROJECT TOTAL $0.00 


Infracost usage file

Infracost solves the above problem by enabling you to describe usage estimates in a file called  infracost-usage.yml , which can be passed to Infracost using the  –usage-file  option so it can calculate costs. An  infracost-usage.yml  file with Lambda function usage estimates: 

version: 0.1 

resource_usage: 

aws_lambda_function.hi: 

monthly_requests: 100000000 # Monthly requests to the Lambda function. 

request_duration_ms: 250 # Average duration of each request in milliseconds. 

Running  infracost breakdown –config-file infracost.yml –usage-file=infracost-usage.yml  now shows monthly cost estimates: 

Name Quantity Unit Monthly Cost 

aws_lambda_function.hi 

├─ Requests 100 1M requests $20.00 

└─ Duration 12,500,000 GB-seconds $208.33 

PROJECT TOTAL $228.33 

CI/CD Integration 

Use our to automatically add pull request comments showing cost estimate diffs. 

1. Developer/DevOps proposes a change to the infrastructure 

A Developer/DevOps makes changes to the infrastructure as code file, and creates a pull/merge request.

Infracost.io Configuration 5 

2. Infracost calculates the cost of the change 

Infracost looks at the changes made to the Terraform file and shows the pre and post-change costs as a comment in the pull request: “This change will increase your bill by 27%” 

3. Team discusses the cost implication 

This enables engineering teams to see how much each pull request costs, and to peer review costs alongside the code. 

Real example of how we have integrated infracost in our terraform repo:


0 Comments

Your email address will not be published. Required fields are marked *