blob: d42b7516c7de375901f6ad7968a741692b2df538 [file] [log] [blame] [edit]
---
# ----------------------------------------------------------------------------
#
# *** AUTO GENERATED CODE *** Type: MMv1 ***
#
# ----------------------------------------------------------------------------
#
# This file is automatically generated by Magic Modules and manual
# changes will be clobbered when the file is regenerated.
#
# Please read more about how to change this file in
# .github/CONTRIBUTING.md.
#
# ----------------------------------------------------------------------------
subcategory: "Cloud Billing"
description: |-
Budget configuration for a billing account.
---
# google\_billing\_budget
Budget configuration for a billing account.
To get more information about Budget, see:
* [API documentation](https://cloud.google.com/billing/docs/reference/budget/rest/v1/billingAccounts.budgets)
* How-to Guides
* [Creating a budget](https://cloud.google.com/billing/docs/how-to/budgets)
~> **Warning:** If you are using User ADCs (Application Default Credentials) with this resource,
you must specify a `billing_project` and set `user_project_override` to true
in the provider configuration. Otherwise the Billing Budgets API will return a 403 error.
Your account must have the `serviceusage.services.use` permission on the
`billing_project` you defined.
## Example Usage - Billing Budget Basic
```hcl
data "google_billing_account" "account" {
billing_account = "000000-0000000-0000000-000000"
}
resource "google_billing_budget" "budget" {
billing_account = data.google_billing_account.account.id
display_name = "Example Billing Budget"
amount {
specified_amount {
currency_code = "USD"
units = "100000"
}
}
threshold_rules {
threshold_percent = 0.5
}
}
```
## Example Usage - Billing Budget Lastperiod
```hcl
data "google_billing_account" "account" {
billing_account = "000000-0000000-0000000-000000"
}
data "google_project" "project" {
}
resource "google_billing_budget" "budget" {
billing_account = data.google_billing_account.account.id
display_name = "Example Billing Budget"
budget_filter {
projects = ["projects/${data.google_project.project.number}"]
}
amount {
last_period_amount = true
}
threshold_rules {
threshold_percent = 10.0
# Typically threshold_percent would be set closer to 1.0 (100%).
# It has been purposely set high (10.0 / 1000%) in this example
# so it does not trigger alerts during automated testing.
}
}
```
## Example Usage - Billing Budget Filter
```hcl
data "google_billing_account" "account" {
billing_account = "000000-0000000-0000000-000000"
}
data "google_project" "project" {
}
resource "google_billing_budget" "budget" {
billing_account = data.google_billing_account.account.id
display_name = "Example Billing Budget"
budget_filter {
projects = ["projects/${data.google_project.project.number}"]
credit_types_treatment = "INCLUDE_SPECIFIED_CREDITS"
services = ["services/24E6-581D-38E5"] # Bigquery
credit_types = ["PROMOTION", "FREE_TIER"]
resource_ancestors = ["organizations/123456789"]
}
amount {
specified_amount {
currency_code = "USD"
units = "100000"
}
}
threshold_rules {
threshold_percent = 0.5
}
threshold_rules {
threshold_percent = 0.9
spend_basis = "FORECASTED_SPEND"
}
}
```
## Example Usage - Billing Budget Notify
```hcl
data "google_billing_account" "account" {
billing_account = "000000-0000000-0000000-000000"
}
data "google_project" "project" {
}
resource "google_billing_budget" "budget" {
billing_account = data.google_billing_account.account.id
display_name = "Example Billing Budget"
budget_filter {
projects = ["projects/${data.google_project.project.number}"]
}
amount {
specified_amount {
currency_code = "USD"
units = "100000"
}
}
threshold_rules {
threshold_percent = 1.0
}
threshold_rules {
threshold_percent = 1.0
spend_basis = "FORECASTED_SPEND"
}
all_updates_rule {
monitoring_notification_channels = [
google_monitoring_notification_channel.notification_channel.id,
]
disable_default_iam_recipients = true
}
}
resource "google_monitoring_notification_channel" "notification_channel" {
display_name = "Example Notification Channel"
type = "email"
labels = {
email_address = "address@example.com"
}
}
```
## Example Usage - Billing Budget Customperiod
```hcl
data "google_billing_account" "account" {
billing_account = "000000-0000000-0000000-000000"
}
data "google_project" "project" {
}
resource "google_billing_budget" "budget" {
billing_account = data.google_billing_account.account.id
display_name = "Example Billing Budget"
budget_filter {
projects = ["projects/${data.google_project.project.number}"]
credit_types_treatment = "EXCLUDE_ALL_CREDITS"
services = ["services/24E6-581D-38E5"] # Bigquery
custom_period {
start_date {
year = 2022
month = 1
day = 1
}
end_date {
year = 2023
month = 12
day = 31
}
}
}
amount {
specified_amount {
currency_code = "USD"
units = "100000"
}
}
threshold_rules {
threshold_percent = 0.5
}
threshold_rules {
threshold_percent = 0.9
}
}
```
## Argument Reference
The following arguments are supported:
* `amount` -
(Required)
The budgeted amount for each usage period.
Structure is [documented below](#nested_amount).
* `billing_account` -
(Required)
ID of the billing account to set a budget on.
<a name="nested_amount"></a>The `amount` block supports:
* `specified_amount` -
(Optional)
A specified amount to use as the budget. currencyCode is
optional. If specified, it must match the currency of the
billing account. The currencyCode is provided on output.
Structure is [documented below](#nested_specified_amount).
* `last_period_amount` -
(Optional)
Configures a budget amount that is automatically set to 100% of
last period's spend.
Boolean. Set value to true to use. Do not set to false, instead
use the `specified_amount` block.
<a name="nested_specified_amount"></a>The `specified_amount` block supports:
* `currency_code` -
(Optional)
The 3-letter currency code defined in ISO 4217.
* `units` -
(Optional)
The whole units of the amount. For example if currencyCode
is "USD", then 1 unit is one US dollar.
* `nanos` -
(Optional)
Number of nano (10^-9) units of the amount.
The value must be between -999,999,999 and +999,999,999
inclusive. If units is positive, nanos must be positive or
zero. If units is zero, nanos can be positive, zero, or
negative. If units is negative, nanos must be negative or
zero. For example $-1.75 is represented as units=-1 and
nanos=-750,000,000.
- - -
* `display_name` -
(Optional)
User data for display name in UI. Must be <= 60 chars.
* `budget_filter` -
(Optional)
Filters that define which resources are used to compute the actual
spend against the budget.
Structure is [documented below](#nested_budget_filter).
* `threshold_rules` -
(Optional)
Rules that trigger alerts (notifications of thresholds being
crossed) when spend exceeds the specified percentages of the
budget.
Structure is [documented below](#nested_threshold_rules).
* `all_updates_rule` -
(Optional)
Defines notifications that are sent on every update to the
billing account's spend, regardless of the thresholds defined
using threshold rules.
Structure is [documented below](#nested_all_updates_rule).
<a name="nested_budget_filter"></a>The `budget_filter` block supports:
* `projects` -
(Optional)
A set of projects of the form projects/{project_number},
specifying that usage from only this set of projects should be
included in the budget. If omitted, the report will include
all usage for the billing account, regardless of which project
the usage occurred on.
* `resource_ancestors` -
(Optional)
A set of folder and organization names of the form folders/{folderId} or organizations/{organizationId},
specifying that usage from only this set of folders and organizations should be included in the budget.
If omitted, the budget includes all usage that the billing account pays for. If the folder or organization
contains projects that are paid for by a different Cloud Billing account, the budget doesn't apply to those projects.
* `credit_types_treatment` -
(Optional)
Specifies how credits should be treated when determining spend
for threshold calculations.
Default value is `INCLUDE_ALL_CREDITS`.
Possible values are: `INCLUDE_ALL_CREDITS`, `EXCLUDE_ALL_CREDITS`, `INCLUDE_SPECIFIED_CREDITS`.
* `services` -
(Optional)
A set of services of the form services/{service_id},
specifying that usage from only this set of services should be
included in the budget. If omitted, the report will include
usage for all the services. The service names are available
through the Catalog API:
https://cloud.google.com/billing/v1/how-tos/catalog-api.
* `credit_types` -
(Optional)
Optional. If creditTypesTreatment is INCLUDE_SPECIFIED_CREDITS,
this is a list of credit types to be subtracted from gross cost to determine the spend for threshold calculations. See a list of acceptable credit type values.
If creditTypesTreatment is not INCLUDE_SPECIFIED_CREDITS, this field must be empty.
**Note:** If the field has a value in the config and needs to be removed, the field has to be an emtpy array in the config.
* `subaccounts` -
(Optional)
A set of subaccounts of the form billingAccounts/{account_id},
specifying that usage from only this set of subaccounts should
be included in the budget. If a subaccount is set to the name of
the parent account, usage from the parent account will be included.
If the field is omitted, the report will include usage from the parent
account and all subaccounts, if they exist.
**Note:** If the field has a value in the config and needs to be removed, the field has to be an emtpy array in the config.
* `labels` -
(Optional)
A single label and value pair specifying that usage from only
this set of labeled resources should be included in the budget.
* `calendar_period` -
(Optional)
A CalendarPeriod represents the abstract concept of a recurring time period that has a
canonical start. Grammatically, "the start of the current CalendarPeriod".
All calendar times begin at 12 AM US and Canadian Pacific Time (UTC-8).
Exactly one of `calendar_period`, `custom_period` must be provided.
Possible values are: `MONTH`, `QUARTER`, `YEAR`, `CALENDAR_PERIOD_UNSPECIFIED`.
* `custom_period` -
(Optional)
Specifies to track usage from any start date (required) to any end date (optional).
This time period is static, it does not recur.
Exactly one of `calendar_period`, `custom_period` must be provided.
Structure is [documented below](#nested_custom_period).
<a name="nested_custom_period"></a>The `custom_period` block supports:
* `start_date` -
(Required)
A start date is required. The start date must be after January 1, 2017.
Structure is [documented below](#nested_start_date).
* `end_date` -
(Optional)
Optional. The end date of the time period. Budgets with elapsed end date won't be processed.
If unset, specifies to track all usage incurred since the startDate.
Structure is [documented below](#nested_end_date).
<a name="nested_start_date"></a>The `start_date` block supports:
* `year` -
(Required)
Year of the date. Must be from 1 to 9999.
* `month` -
(Required)
Month of a year. Must be from 1 to 12.
* `day` -
(Required)
Day of a month. Must be from 1 to 31 and valid for the year and month.
<a name="nested_end_date"></a>The `end_date` block supports:
* `year` -
(Required)
Year of the date. Must be from 1 to 9999.
* `month` -
(Required)
Month of a year. Must be from 1 to 12.
* `day` -
(Required)
Day of a month. Must be from 1 to 31 and valid for the year and month.
<a name="nested_threshold_rules"></a>The `threshold_rules` block supports:
* `threshold_percent` -
(Required)
Send an alert when this threshold is exceeded. This is a
1.0-based percentage, so 0.5 = 50%. Must be >= 0.
* `spend_basis` -
(Optional)
The type of basis used to determine if spend has passed
the threshold.
Default value is `CURRENT_SPEND`.
Possible values are: `CURRENT_SPEND`, `FORECASTED_SPEND`.
<a name="nested_all_updates_rule"></a>The `all_updates_rule` block supports:
* `pubsub_topic` -
(Optional)
The name of the Cloud Pub/Sub topic where budget related
messages will be published, in the form
projects/{project_id}/topics/{topic_id}. Updates are sent
at regular intervals to the topic.
* `schema_version` -
(Optional)
The schema version of the notification. Only "1.0" is
accepted. It represents the JSON schema as defined in
https://cloud.google.com/billing/docs/how-to/budgets#notification_format.
* `monitoring_notification_channels` -
(Optional)
The full resource name of a monitoring notification
channel in the form
projects/{project_id}/notificationChannels/{channel_id}.
A maximum of 5 channels are allowed.
* `disable_default_iam_recipients` -
(Optional)
Boolean. When set to true, disables default notifications sent
when a threshold is exceeded. Default recipients are
those with Billing Account Administrators and Billing
Account Users IAM roles for the target account.
## Attributes Reference
In addition to the arguments listed above, the following computed attributes are exported:
* `id` - an identifier for the resource with format `billingAccounts/{{billing_account}}/budgets/{{name}}`
* `name` -
Resource name of the budget. The resource name
implies the scope of a budget. Values are of the form
billingAccounts/{billingAccountId}/budgets/{budgetId}.
## Timeouts
This resource provides the following
[Timeouts](https://developer.hashicorp.com/terraform/plugin/sdkv2/resources/retries-and-customizable-timeouts) configuration options:
- `create` - Default is 20 minutes.
- `update` - Default is 20 minutes.
- `delete` - Default is 20 minutes.
## Import
Budget can be imported using any of these accepted formats:
* `billingAccounts/{{billing_account}}/budgets/{{name}}`
* `{{billing_account}}/{{name}}`
* `{{name}}`
In Terraform v1.5.0 and later, use an [`import` block](https://developer.hashicorp.com/terraform/language/import) to import Budget using one of the formats above. For example:
```tf
import {
id = "billingAccounts/{{billing_account}}/budgets/{{name}}"
to = google_billing_budget.default
}
```
When using the [`terraform import` command](https://developer.hashicorp.com/terraform/cli/commands/import), Budget can be imported using one of the formats above. For example:
```
$ terraform import google_billing_budget.default billingAccounts/{{billing_account}}/budgets/{{name}}
$ terraform import google_billing_budget.default {{billing_account}}/{{name}}
$ terraform import google_billing_budget.default {{name}}
```