infracost

Infracost shows hourly and monthly cost estimates for a Terraform project. This helps developers, DevOps et al. quickly see the cost breakdown and compare different deployment options upfront.

Installation

  1. Download and install the latest Infracost release

    Linux:

    curl -s -L https://github.com/infracost/infracost/releases/latest/download/infracost-linux-amd64.tar.gz | tar xz -C /tmp && \
    sudo mv /tmp/infracost-linux-amd64 /usr/local/bin/infracost
    

    macOS (Homebrew):

    brew install infracost
    

    macOS (manual):

    curl -s -L https://github.com/infracost/infracost/releases/latest/download/infracost-darwin-amd64.tar.gz | tar xz -C /tmp && \
    sudo mv /tmp/infracost-darwin-amd64 /usr/local/bin/infracost
    

    Docker:

    docker pull infracost/infracost
    docker run --rm \
      -e INFRACOST_API_KEY=see_following_step_on_how_to_get_this \
      -e AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID \
      -e AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY \
      -v $PWD/:/code/ infracost/infracost --tfdir /code/
      # add other required flags for infracost or envs for Terraform
    
  2. Use our free hosted API for cloud prices by registering for an API key:

    infracost register
    

    The INFRACOST_API_KEY environment variable can be used to set the API key in CI systems.
    If you prefer, you can run your own pricing API.

  3. Run infracost using our example Terraform project to see how it works. You can also play with the main.tf file in the example:

    git clone https://github.com/infracost/example-terraform.git
    infracost --tfdir example-terraform/aws
    

Basic usage

There are 4 usage methods for Infracost depending on your use-case. The following is the default method. Point to the Terraform directory using --tfdir and pass any required Terraform flags using --tfflags. Internally Infracost runs Terraform init, plan and show; init requires cloud credentials to be set, e.g. via the usual AWS_ACCESS_KEY_ID environment variables. This method works with remote state too.

infracost --tfdir /path/to/code --tfflags "-var-file=myvars.tfvars"

The Infracost GitHub Action or GitLab CI template can be used to automatically add a PR comment showing the cost estimate diff between a pull/merge request and the master branch.

Example infracost diff usage

Development

Install Go dependencies:

make deps

Install latest version of terraform-provider-infracost. If you want to use a local development version, see this

make install_provider

Get an API key.

make run ARGS="register"

Alternatively checkout and run the cloud-pricing-api and set the INFRACOST_PRICING_API_ENDPOINT environment variable to point to it.

Add the API key to your .env.local file:

cat <<EOF >> .env.local
INFRACOST_API_KEY=XXX
EOF

Run the code:

make run ARGS="--tfdir examples/terraform"

Run all tests:

make test

Exclude integration tests:

make test ARGS="-v -short"

Build:

make build

Using a local version of terraform-provider-infracost

To use a local development version of terraform-provider-infracost

  1. Fork/clone the terraform-provider-infracost repository

  2. Inside the directory that you cloned the repository run the following to install the local version in your ~/.terraform.d/plugins directory:

make install

GitHub