• Stars
    star
    116
  • Rank 303,894 (Top 6 %)
  • Language
    Go
  • License
    MIT License
  • Created almost 8 years ago
  • Updated over 2 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Designed to analyze terraform template files and return a cost estimate of running the infrastructure, assuming AWS is the target cloud. Perhaps other clouds can be supported going forward?

terraform_cashier

Go Report Card Build Status codecov Maintainability

This uses https://github.com/Bjorn248/graphql_aws_pricing_api to get pricing data

Designed to analyze terraform template files and return a cost estimate of running the infrastructure, assuming AWS is the target cloud. Perhaps other clouds can be supported going forward?

NOTE: This only calculates the cost of EC2 and RDS resources right now. To add support for more resources, open a PR or leave a comment. I'm always looking for feedback.

This is very much in a prototype state right now. Any advice or assistance is appreciated.

Plan File

This relies on terraform plan files generated using terraform plan -out=<filename>. It is recommended that you plan against an empty state so that all of your resources are present in the plan file.

Empty/Blank state plan

If you are using remote state, you will need to disable this. I accomplish this by renaming the file that defines my remote state, appending the extension .off. Then, I have to run terraform init again to initialize a blank local state. Then I can generate a plan that contains all my resources using the following command terraform plan -out=<filename> -refresh=false.

Environment Variables

Variable Name Description
AWS_REGION The Region for which you want to create a price estimation (e.g. us-east-1)
TERRAFORM_PLANFILE Where cashier should find your terraform plan output.
RUNNING_HOURS (Optional) The number of running hours normally used in a month for your resources, on average. Defaults to 730 assuming 24/7 operation.
GRAPHQL_API_URL (Optional) Change the API URL that cashier uses. Defaults to live API Gateway URL.
PRINT_VERSION (Optional) If true will print current version of cashier and exit

Installation and usage

Simply download the latest release from the releases page here: https://github.com/Bjorn248/terraform_cashier/releases Make sure that the binary is set executable Set your environment variables appropriately

export TERRAFORM_PLANFILE="./terraform.plan"
export AWS_REGION="us-west-1"

And then run the cashier binary

If you wish to see the current version of cashier, use the following environment variable

PRINT_VERSION=true

Docker

The Docker image is not published on Docker Hub or any other registry provider, although you can build and use it locally.

Build

$ docker build -t local/cashier:0.0.1 .

Run

$ docker run -v $(pwd):/data local/cashier:0.0.1

Run using custom ENV_VARs

$ docker run --env AWS_REGION=us-east-1 --env TERRAFORM_PLANFILE=/data/terraform.plan -v $(pwd):/data local/cashier:0.0.1

Local Development

This project uses Go Modules for dependency management. go build should just work if your Go version supports modules.