Terraform Cost Estimator
See what your Terraform changes could cost on AWS, Google Cloud or Azure before you deploy.
Before you start: what to have readyShow
- Plan JSON. Run
terraform plan -out tfplan, thenterraform show -json tfplan > plan.json. A plan resolves more than source, but some values stay unknown until deployment. - Variables. From files, type a value for each variable without a default. A .tfvars file is never read.
- Modules. Local modules are read when their folders are included. Public registry and GitHub modules are read from GitHub; a private module is named as not read. A plan includes them all.
- GitHub. Paste a public folder's link; your browser reads it and its modules. GitHub allows 60 anonymous requests an hour per network.
- Infracost. Paste
infracost breakdown --format json; lines it cannot re-price keep Infracost's figure.
Paste Terraform code, plan JSON, Infracost JSON or a public GitHub folder link. We'll detect the format.
Need help preparing your input?
- Terraform plan JSON gives before, after and the change. Run
terraform plan -out tfplan, thenterraform show -json tfplan > plan.json, and paste or add plan.json. The summaryterraform planprints on screen cannot be estimated. - Terraform code gives the monthly cost of what it configures, without running Terraform. Paste a .tf file, or add .tf and .tf.json files or a whole folder; local modules in subfolders are read, and public modules can be read from GitHub. A .tfvars file is never read: type variable values in the field that appears.
- Infracost JSON: paste the output of
infracost breakdown --path . --format json. - A public GitHub folder: paste its link. Your browser reads it from GitHub, not Finitizer, with its local modules (up to 6 folders) and the public modules it uses. GitHub allows 60 anonymous requests an hour per network: one per folder, one or two per module repository. A branch with a slash in its name will not resolve: download the folder and add it instead.
Budget checkoptional: set a monthly limit or required tagsShow
Estimates use public list prices. Usage, discounts, credits and unsupported resources can change the final bill. Your plan and files are processed in your browser, not uploaded to Finitizer unless you choose Share for a review. Plan files can contain sensitive information.
Want this done on your real bill?
Cloud Cost Audit: We go through your real AWS or Google Cloud bill and hand you a ranked list of what to cut first. From $1,500, fixed. Nothing paid upfront.
How the estimate is worked out
Each resource is priced from its own arguments, such as an instance type, a disk size or a node count, at public on-demand list prices in US dollars. A plan shows before, after and the change: a delete removes cost, an update prices the difference, and a replacement counts the old and new resource once each. Usage the input cannot state, such as traffic through a NAT gateway, takes a small stated default you can change, and the headline shows how much of the total rests on it. Anything not priced is listed with the reason, never counted as zero.
What common Terraform setups cost
Worked out by this estimator at public list prices. Each one opens here, priced, so you can see every line.
- Add a 100 GiB data disk
One AWS gp3 volume in us-east-1, as a .tf file. Small enough to check the arithmetic by hand.
$8.00 a month
- AWS web app
Two web servers behind a load balancer, PostgreSQL and NAT. The load balancer capacity units need a usage figure.
+$470.13 a monthpriced so far; the full figure is higher
- AWS Kubernetes
An EKS cluster, three worker nodes, a NAT gateway per zone and private ECR endpoints: the costs around the nodes.
+$694.18 a monthpriced so far; the full figure is higher
- Google Cloud web app
Two VMs, a regional Cloud SQL database, an SSD and a bucket. Sustained use discounts show on the VM lines.
+$504.11 a month
- Google Cloud GKE
A regional GKE cluster whose node pool runs in three zones: two nodes per zone is six nodes, not two.
+$1,307.84 a month
- Azure web app
Two VMs in a scale set behind a load balancer, PostgreSQL with a standby, NAT and storage. Disks bill by tier.
+$653.88 a monthpriced so far; the full figure is higher
- Azure AKS
AKS on the Standard tier, a pool that autoscales, a geo-replicated registry and a WAF gateway: the costs around the nodes.
+$2,274.66 a monthpriced so far; the full figure is higher
Terraform resources it prices (106)
Free resources such as IAM roles and security groups are recognized too, and count as $0. Any other type is named in the result as not priced, never counted as zero.
AWS (43)
aws_acmpca_certificate_authority, aws_alb, aws_autoscaling_group, aws_cloudfront_distribution, aws_cloudwatch_log_group, aws_cloudwatch_metric_alarm, aws_db_instance, aws_docdb_cluster, aws_docdb_cluster_instance, aws_dynamodb_table, aws_ebs_snapshot, aws_ebs_volume, aws_ec2_transit_gateway_peering_attachment, aws_ec2_transit_gateway_vpc_attachment, aws_ecs_service, aws_efs_file_system, aws_eip, aws_eks_cluster, aws_eks_node_group, aws_elasticache_cluster, aws_elasticache_replication_group, aws_elasticsearch_domain, aws_elb, aws_instance, aws_kinesis_stream, aws_kms_key, aws_lambda_function, aws_lb, aws_msk_cluster, aws_nat_gateway, aws_networkfirewall_firewall, aws_opensearch_domain, aws_rds_cluster, aws_rds_cluster_instance, aws_redshift_cluster, aws_route53_resolver_endpoint, aws_route53_zone, aws_s3_bucket, aws_sagemaker_endpoint, aws_secretsmanager_secret, aws_vpc_endpoint, aws_vpc_endpoint_subnet_association, aws_wafv2_web_acl
Google Cloud (28)
google_alloydb_cluster, google_alloydb_instance, google_bigquery_capacity_commitment, google_bigquery_reservation, google_bigquery_table, google_bigtable_instance, google_cloud_run_service, google_cloud_run_v2_service, google_compute_address, google_compute_disk, google_compute_forwarding_rule, google_compute_global_forwarding_rule, google_compute_instance, google_compute_instance_group_manager, google_compute_region_instance_group_manager, google_compute_router_nat, google_compute_snapshot, google_compute_vpn_tunnel, google_container_cluster, google_container_node_pool, google_dns_managed_zone, google_filestore_instance, google_kms_crypto_key, google_redis_instance, google_spanner_instance, google_sql_database_instance, google_storage_bucket, google_vpc_access_connector
Azure (35)
azurerm_api_management, azurerm_app_service_plan, azurerm_application_gateway, azurerm_bastion_host, azurerm_cdn_frontdoor_profile, azurerm_container_group, azurerm_container_registry, azurerm_cosmosdb_mongo_collection, azurerm_cosmosdb_mongo_database, azurerm_cosmosdb_sql_container, azurerm_cosmosdb_sql_database, azurerm_eventhub_namespace, azurerm_firewall, azurerm_kubernetes_cluster, azurerm_kubernetes_cluster_node_pool, azurerm_lb, azurerm_linux_virtual_machine, azurerm_linux_virtual_machine_scale_set, azurerm_managed_disk, azurerm_mssql_database, azurerm_mssql_elastic_pool, azurerm_mysql_flexible_server, azurerm_nat_gateway, azurerm_orchestrated_virtual_machine_scale_set, azurerm_postgresql_flexible_server, azurerm_private_endpoint, azurerm_public_ip, azurerm_public_ip_prefix, azurerm_redis_cache, azurerm_service_plan, azurerm_storage_account, azurerm_virtual_machine, azurerm_virtual_network_gateway, azurerm_windows_virtual_machine, azurerm_windows_virtual_machine_scale_set
Use it from a script or an AI agent
With a link. Add ?github= and a public folder's link to this page's address, and it prices the folder on arrival, in any browser that runs scripts. ?sample=aws-web opens a sample.
With the API. No account or key. Send plan JSON, Infracost JSON or .tf files, and get back the same JSON as Download JSON above.
curl -s https://tools.finitizer.com/terraform-cost-estimator/api \
-H 'content-type: application/json' \
-d "{\"plan\": $(terraform show -json tfplan)}"Unlike this page, the API receives what you send. It prices it in memory and drops it with the response; nothing is stored or logged. It does not fetch modules, so send a plan for a configuration built on them. OpenAPI description.
As data. data.json holds the method, the inputs, the resource types priced and the worked examples.
Questions
How do I estimate the cost of a Terraform change?
Give this page the plan, the .tf files, or a public GitHub folder. For a plan, run terraform plan -out tfplan, then terraform show -json tfplan > plan.json, and paste or drop plan.json. Each resource the change creates, updates or destroys is priced from its own arguments: an instance type, a volume size, a node count. A destroy counts as a saving, an update prices only the difference, and a replacement counts the old and the new resource once each.
Is this an Infracost alternative?
It answers the same question with no CLI, API key or sign-up, and it reads Infracost output too. Paste infracost breakdown --format json and every resource whose components state what its price depends on is re-priced here; the rest keep Infracost's own figure, marked as such. On top you get a budget check, and cheaper machine and region options on AWS and Google Cloud.
Does it upload my plan or my code?
No. Your plan and files are processed in this browser tab, not uploaded to Finitizer. The one exception is Share for a review, which sends them only if you tick its consent box, with the values Terraform marks sensitive removed from a plan. A .tfvars file is never read, and secret-looking values are kept out of the downloads, but no check catches every secret, so treat plan files as sensitive. A GitHub folder and any public modules are fetched by your browser straight from GitHub.
Can it estimate a GitHub repository?
Yes, a public one. Paste the link to the folder you run terraform plan in, such as github.com/owner/repo/tree/main/infra. Your browser reads the .tf files from GitHub, with the local modules and the public modules they use, then prices the lot. GitHub allows 60 anonymous requests an hour per network: one per folder and one or two per module repository. If you hit that, the page says when it resets, or you can price a plan instead.
Does it handle modules and variables?
Yes. A plan includes the resources of every module. From source, local modules are read when their folders are included, and public registry and GitHub modules such as terraform-aws-modules/vpc/aws are read from GitHub at the version the block asks for. A private module cannot be read, so it is named in the result rather than counted as $0. Variables without a default are listed so you can type a value, and the estimate updates as you do. A .tfvars file is never read.
Why does it say "partial"?
Because part of the input could not be priced: a resource type not priced yet, a usage it has no rate basis for, or a module it could not read. Each one is listed by name, never counted as zero. When everything missing can only add cost, the page says the full figure is higher; when a missing piece could be a saving, such as a delete it could not price, it says the figure could be higher or lower. If nothing at all could be priced it shows no figure rather than $0.00.
Does the total include traffic and other usage?
Only where it says so. A configuration cannot state how much traffic a NAT gateway carries or how much data a log group takes in, so a small stated default is used for those lines, and the headline shows how much of the total rests on it. Change any figure under Usage assumptions, or pick a low, medium or high profile, and the estimate updates as you do.
Which clouds and regions does it price?
AWS, Google Cloud and Azure: compute, storage, databases, networking, Kubernetes and serverless, in 32 AWS regions, 44 Google Cloud regions and 38 Azure regions. An AWS or Google Cloud resource takes the region its provider block states, and an Azure resource its own location; the fallback region applies only where the input names none. Anything not covered is listed, never priced as zero.
Are these the prices I will pay?
They are public on-demand list prices in US dollars. Google Cloud VMs include the sustained use discount a full month earns, because Google applies it without being asked. Negotiated discounts, Savings Plans, Reserved Instances, committed use discounts, Azure reservations and Azure Hybrid Benefit lower the real figure; usage, data transfer and charges not covered here raise it. Figures are steady-state monthly: one-time charges and a partial first month are not included. The Finitizer platform prices the same change at your own rates, per account, on every pull request.
Can a script or an AI agent use it?
Yes. Add ?github= and a public folder's link to this page's address and it prices the folder on arrival, in any browser that runs scripts. With no browser, POST plan JSON, Infracost JSON or .tf files to https://tools.finitizer.com/terraform-cost-estimator/api, with no account or key, and get the same JSON as Download JSON. The API receives what you send, prices it in memory and drops it with the response.
Related tools
EC2 Idle & Rightsizing Calculator
What idle instances cost, and what stopping them actually saves.
OpenGCP Sustained & Committed Use Discount Calculator
A commitment replaces your sustained-use discount. It does not add to it.
OpenAzure VM Cost Calculator
Linux or Windows, Spot, reservations and savings plans, in 13 regions.
OpenMore tools for: Compute and utilization, Storage and lifecycle, Network and data transfer, Databases and caching
List price is the start. Your rate is the answer.
Finitizer prices every Terraform change at your own negotiated rates, per account, shows what commitments and cheaper machines would change, checks it against your cost policy, and posts it on the pull request before anyone applies it.
See how Finitizer works