AzureStatic-verified

A Budget Somebody Actually Hears About

Azure requires a notification block, which makes the problem look solved: a notification can be created disabled, and contact_roles = Owner emails whoever holds the role, which is often a service principal with no mailbox. Insists on an enabled notification with a real address or action group, and on a Forecasted threshold so the first message arrives while there is still a month to act.

terraformAzureazure

Compare Budgets & Cost Alerts across clouds →

azure-budgetvizier v1.2.0

Verification

Static-verified

Passed: validated and lint-clean (provider-schema-validated for AWS/Azure/GCP; Terraform-language lint elsewhere).

Conformance

  • Static validation (fmt · validate · tflint)
  • No applicable security policies for this provider
  • Plan tests (mocked: validation rules · outputs)

Provenance

  • SHA-256 checksum
  • Signature (pending)

Functional

  • Live test pending (no cloud run yet)

Last verified 2026-09-14 · how we verify

Use it from the registry

terraform · opentofu
module "budget" {
  source  = "www.iac-bazaar.com/iac-bazaar/azure-budget/azure"
  version = "1.0.0"
}

Needs a registry token from /account/tokens. The module itself is free; the account is what identifies you. Full setup: registry docs.

Inputs & outputs

Create a free account to read this module's contract

The declared contract - every input name, type, default and description, plus every output - is shown to signed-in accounts, not to anonymous visitors.

A free account sees the contract of every module in the catalogue. There is no subscription and nothing to buy - the modules are free to download, and they run under Vizier.

Documentation

azure-budget

A budget somebody actually hears about. Works with Terraform and OpenTofu (>= 1.6), azurerm provider >= 4.0, < 5.0.

A budget with a notification that reaches nobody is a number nobody sees. Azure requires at least one notification block, which makes the problem look solved. It is not: a notification can be created enabled = false, and contact_roles = ["Owner"] - the most common choice - emails whoever holds the Owner role, which in a well-run subscription is a service principal with no mailbox and a break-glass account nobody reads. This module insists on at least one enabled notification with a real address or an action group, and refuses otherwise without accept_silent_budget.

An Actual-only notification arrives after the money is spent. Forecasted fires while there is still a month left to do something. Refused without accept_actual_only.

The name and start date are immutable, and the start date must be the first of a month. A validation checks the date shape before Azure rejects it.

Scope it to a resource group with resource_group_id; otherwise it covers the subscription. Azure budgets measure amortised cost in the billing currency; credits on the invoice do not change what the budget sees.

Verification

Static validation runs tofu fmt, init, validate, tflint and checkov. This module has not yet had a live test, so it is published as statically validated with its live test pending and does not carry the live-tested mark.

Usage code & full reference need an account

The complete copy-paste usage, the full input/output reference, and operational notes are free with an account - shown here and bundled in the download. Sign in and this section fills in.

  • Usage

Related modules

Static validatedLive test pending

azure-policy

enforce = false is Azure DoNotEnforce: the assignment appears, resources are evaluated, a compliance percentage is charted - and every violating resource is created anyway. From the portal compliance view that is indistinguishable from an enforced policy. Also refuses a silent not_scopes exclusion and an unexplained denial.

View module
Live-tested

azure-landing-zone-core

Management-group hierarchy, policy baseline (ALZ-aligned), centralized logging and RBAC scaffolding - the flagship enterprise starter.

View module
Static validatedLive test pending

gcp-billing-budget

The API accepts a budget with default recipients disabled and no channel, topic or threshold rule - a number that is tracked and never sent anywhere. Refuses that, insists on a FORECASTED_SPEND rule, and defaults credit_types_treatment to EXCLUDE_ALL_CREDITS, because a budget that counts credits measures your runway, not your spend, and looks healthy until the month they run out.

View module
Static validatedLive test pending

oci-budget

The budget and its alert rules are separate resources, and recipients on a rule is optional: a budget created with no rule, or a rule with no address, computes actual and forecast spend and tells nobody but the console list. Refuses a budget no rule of which reaches an address, and insists on a FORECAST rule so the first alert is a warning rather than a receipt.

View module
Static validatedLive test pending

aws-budgets

A budget with no notification tracks correctly and tells nobody, so the invoice is the first notice; ACTUAL-only alerts arrive after the money is gone. And include_credit defaults true, so a budget on a credited account reports runway rather than spend - until the credits end and nothing crosses a threshold.

View module