| --- |
| # ---------------------------------------------------------------------------- |
| # |
| # *** 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 Notify Project Recipient |
| |
| |
| ```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" |
| } |
| } |
| |
| all_updates_rule { |
| monitoring_notification_channels = [] |
| enable_project_level_recipients = true |
| } |
| } |
| ``` |
| ## 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). |
| |
| * `ownership_scope` - |
| (Optional) |
| The ownership scope of the budget. The ownership scope and users' |
| IAM permissions determine who has full access to the budget's data. |
| Possible values are: `OWNERSHIP_SCOPE_UNSPECIFIED`, `ALL_USERS`, `BILLING_ACCOUNT`. |
| |
| |
| <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. |
| |
| * `enable_project_level_recipients` - |
| (Optional) |
| When set to true, and when the budget has a single project configured, |
| notifications will be sent to project level recipients of that project. |
| This field will be ignored if the budget has multiple or no project configured. |
| Currently, project level recipients are the users with Owner role on a cloud project. |
| |
| ## 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}} |
| ``` |