Terraform
What is planned
A second reader behind the same commands. finowl breakdown, finowl diff and finowl guard keep their options and their exit codes; what changes is which file they parse.
# what it will look like
finowl breakdown --bundle main.tf --target prod
finowl guard --bundle main.tf --target prodResources to be priced, matching what the bundle reader covers today:
| TERRAFORM RESOURCE | PRICED FROM |
|---|---|
| databricks_job | job_cluster and per-task new_cluster blocks, plus schedule, trigger and continuous. |
| databricks_pipeline | Its cluster blocks, edition, photon and continuous. |
| databricks_sql_endpoint | Size and type, classic or serverless. Always 730 hours a month. |
What the design has to solve
Terraform is not a harder parse than YAML. It is a harder resolve, and these are the questions that decide whether the answer is a real cost or a plausible one.
What is an environment?
A bundle names its environments in one targets: block, which is what --target is checked against. Terraform has no equivalent: an environment might be a workspace, a .tfvars file, a directory, or a branch convention. Finowl will not guess, so --target has to map onto something declared. Terraform workspaces are the likeliest anchor, with an explicit mapping where they are not used.
Modules hide the cluster
A cluster shape passed into a module as a variable, or built inside one from a locals block, is not readable from the calling file. This is the real constraint on Terraform support, and the reason the plan output matters more here than it does for bundles: terraform plan -out resolves modules, variables and interpolation into concrete values.
Plan requires state
Reading the plan means reaching the backend that holds the state. That is fine in CI, where the pipeline already does it, and awkward on a laptop where finowl breakdown is expected to work from files alone. The likely outcome is two paths: a file-only read that prices what it can resolve statically, and a plan-based read for the complete answer.
What works today
Everything in Finowl except the reader is independent of your deployment tool. If you deploy with Terraform now:
- Estimation, budgets and commitment work unchanged. They are a conversation and a decision, not a file — see Estimate.
- Actual cost works unchanged. It reads Databricks system tables and Azure Cost Management, and attributes spend by a tag on the cluster — which Terraform sets as readily as a bundle does. See Actual cost.
- Policies and rules are authored the same way. What waits on this page is their evaluation against Terraform-declared resources in CI.
Tell us about your setup
The design decisions above turn on how real teams write Terraform for Databricks: whether clusters live in modules, whether workspaces map to environments, whether CI already has state access. If you are deploying Databricks with Terraform, get in touch — that is what the reader will be built against.