Budget
Budget configuration for a billing account. To get more information about Budget, see:
How-to Guides
Warning: If you are using User ADCs (Application Default Credentials) with this resource, you must specify a
billing_project
and setuser_project_override
to true in the provider configuration. Otherwise the Billing Budgets API will return a 403 error. Your account must have theserviceusage.services.use
permission on thebilling_project
you defined.
Example Usage
Billing Budget Basic
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.organizations.OrganizationsFunctions;
import com.pulumi.gcp.organizations.inputs.GetBillingAccountArgs;
import com.pulumi.gcp.billing.Budget;
import com.pulumi.gcp.billing.BudgetArgs;
import com.pulumi.gcp.billing.inputs.BudgetAmountArgs;
import com.pulumi.gcp.billing.inputs.BudgetAmountSpecifiedAmountArgs;
import com.pulumi.gcp.billing.inputs.BudgetThresholdRuleArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
final var account = OrganizationsFunctions.getBillingAccount(GetBillingAccountArgs.builder()
.billingAccount("000000-0000000-0000000-000000")
.build());
var budget = new Budget("budget", BudgetArgs.builder()
.billingAccount(account.applyValue(getBillingAccountResult -> getBillingAccountResult.id()))
.displayName("Example Billing Budget")
.amount(BudgetAmountArgs.builder()
.specifiedAmount(BudgetAmountSpecifiedAmountArgs.builder()
.currencyCode("USD")
.units("100000")
.build())
.build())
.thresholdRules(BudgetThresholdRuleArgs.builder()
.thresholdPercent(0.5)
.build())
.build());
}
}
Content copied to clipboard
Billing Budget Lastperiod
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.organizations.OrganizationsFunctions;
import com.pulumi.gcp.organizations.inputs.GetBillingAccountArgs;
import com.pulumi.gcp.organizations.inputs.GetProjectArgs;
import com.pulumi.gcp.billing.Budget;
import com.pulumi.gcp.billing.BudgetArgs;
import com.pulumi.gcp.billing.inputs.BudgetBudgetFilterArgs;
import com.pulumi.gcp.billing.inputs.BudgetAmountArgs;
import com.pulumi.gcp.billing.inputs.BudgetThresholdRuleArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
final var account = OrganizationsFunctions.getBillingAccount(GetBillingAccountArgs.builder()
.billingAccount("000000-0000000-0000000-000000")
.build());
final var project = OrganizationsFunctions.getProject();
var budget = new Budget("budget", BudgetArgs.builder()
.billingAccount(account.applyValue(getBillingAccountResult -> getBillingAccountResult.id()))
.displayName("Example Billing Budget")
.budgetFilter(BudgetBudgetFilterArgs.builder()
.projects(String.format("projects/%s", project.applyValue(getProjectResult -> getProjectResult.number())))
.build())
.amount(BudgetAmountArgs.builder()
.lastPeriodAmount(true)
.build())
.thresholdRules(BudgetThresholdRuleArgs.builder()
.thresholdPercent(10)
.build())
.build());
}
}
Content copied to clipboard
Billing Budget Filter
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.organizations.OrganizationsFunctions;
import com.pulumi.gcp.organizations.inputs.GetBillingAccountArgs;
import com.pulumi.gcp.organizations.inputs.GetProjectArgs;
import com.pulumi.gcp.billing.Budget;
import com.pulumi.gcp.billing.BudgetArgs;
import com.pulumi.gcp.billing.inputs.BudgetBudgetFilterArgs;
import com.pulumi.gcp.billing.inputs.BudgetAmountArgs;
import com.pulumi.gcp.billing.inputs.BudgetAmountSpecifiedAmountArgs;
import com.pulumi.gcp.billing.inputs.BudgetThresholdRuleArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
final var account = OrganizationsFunctions.getBillingAccount(GetBillingAccountArgs.builder()
.billingAccount("000000-0000000-0000000-000000")
.build());
final var project = OrganizationsFunctions.getProject();
var budget = new Budget("budget", BudgetArgs.builder()
.billingAccount(account.applyValue(getBillingAccountResult -> getBillingAccountResult.id()))
.displayName("Example Billing Budget")
.budgetFilter(BudgetBudgetFilterArgs.builder()
.projects(String.format("projects/%s", project.applyValue(getProjectResult -> getProjectResult.number())))
.creditTypesTreatment("INCLUDE_SPECIFIED_CREDITS")
.services("services/24E6-581D-38E5")
.creditTypes(
"PROMOTION",
"FREE_TIER")
.resourceAncestors("organizations/123456789")
.build())
.amount(BudgetAmountArgs.builder()
.specifiedAmount(BudgetAmountSpecifiedAmountArgs.builder()
.currencyCode("USD")
.units("100000")
.build())
.build())
.thresholdRules(
BudgetThresholdRuleArgs.builder()
.thresholdPercent(0.5)
.build(),
BudgetThresholdRuleArgs.builder()
.thresholdPercent(0.9)
.spendBasis("FORECASTED_SPEND")
.build())
.build());
}
}
Content copied to clipboard
Billing Budget Notify
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.organizations.OrganizationsFunctions;
import com.pulumi.gcp.organizations.inputs.GetBillingAccountArgs;
import com.pulumi.gcp.organizations.inputs.GetProjectArgs;
import com.pulumi.gcp.monitoring.NotificationChannel;
import com.pulumi.gcp.monitoring.NotificationChannelArgs;
import com.pulumi.gcp.billing.Budget;
import com.pulumi.gcp.billing.BudgetArgs;
import com.pulumi.gcp.billing.inputs.BudgetBudgetFilterArgs;
import com.pulumi.gcp.billing.inputs.BudgetAmountArgs;
import com.pulumi.gcp.billing.inputs.BudgetAmountSpecifiedAmountArgs;
import com.pulumi.gcp.billing.inputs.BudgetThresholdRuleArgs;
import com.pulumi.gcp.billing.inputs.BudgetAllUpdatesRuleArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
final var account = OrganizationsFunctions.getBillingAccount(GetBillingAccountArgs.builder()
.billingAccount("000000-0000000-0000000-000000")
.build());
final var project = OrganizationsFunctions.getProject();
var notificationChannel = new NotificationChannel("notificationChannel", NotificationChannelArgs.builder()
.displayName("Example Notification Channel")
.type("email")
.labels(Map.of("email_address", "address@example.com"))
.build());
var budget = new Budget("budget", BudgetArgs.builder()
.billingAccount(account.applyValue(getBillingAccountResult -> getBillingAccountResult.id()))
.displayName("Example Billing Budget")
.budgetFilter(BudgetBudgetFilterArgs.builder()
.projects(String.format("projects/%s", project.applyValue(getProjectResult -> getProjectResult.number())))
.build())
.amount(BudgetAmountArgs.builder()
.specifiedAmount(BudgetAmountSpecifiedAmountArgs.builder()
.currencyCode("USD")
.units("100000")
.build())
.build())
.thresholdRules(
BudgetThresholdRuleArgs.builder()
.thresholdPercent(1)
.build(),
BudgetThresholdRuleArgs.builder()
.thresholdPercent(1)
.spendBasis("FORECASTED_SPEND")
.build())
.allUpdatesRule(BudgetAllUpdatesRuleArgs.builder()
.monitoringNotificationChannels(notificationChannel.id())
.disableDefaultIamRecipients(true)
.build())
.build());
}
}
Content copied to clipboard
Billing Budget Customperiod
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import com.pulumi.gcp.organizations.OrganizationsFunctions;
import com.pulumi.gcp.organizations.inputs.GetBillingAccountArgs;
import com.pulumi.gcp.organizations.inputs.GetProjectArgs;
import com.pulumi.gcp.billing.Budget;
import com.pulumi.gcp.billing.BudgetArgs;
import com.pulumi.gcp.billing.inputs.BudgetBudgetFilterArgs;
import com.pulumi.gcp.billing.inputs.BudgetBudgetFilterCustomPeriodArgs;
import com.pulumi.gcp.billing.inputs.BudgetBudgetFilterCustomPeriodStartDateArgs;
import com.pulumi.gcp.billing.inputs.BudgetBudgetFilterCustomPeriodEndDateArgs;
import com.pulumi.gcp.billing.inputs.BudgetAmountArgs;
import com.pulumi.gcp.billing.inputs.BudgetAmountSpecifiedAmountArgs;
import com.pulumi.gcp.billing.inputs.BudgetThresholdRuleArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
final var account = OrganizationsFunctions.getBillingAccount(GetBillingAccountArgs.builder()
.billingAccount("000000-0000000-0000000-000000")
.build());
final var project = OrganizationsFunctions.getProject();
var budget = new Budget("budget", BudgetArgs.builder()
.billingAccount(account.applyValue(getBillingAccountResult -> getBillingAccountResult.id()))
.displayName("Example Billing Budget")
.budgetFilter(BudgetBudgetFilterArgs.builder()
.projects(String.format("projects/%s", project.applyValue(getProjectResult -> getProjectResult.number())))
.creditTypesTreatment("EXCLUDE_ALL_CREDITS")
.services("services/24E6-581D-38E5")
.customPeriod(BudgetBudgetFilterCustomPeriodArgs.builder()
.startDate(BudgetBudgetFilterCustomPeriodStartDateArgs.builder()
.year(2022)
.month(1)
.day(1)
.build())
.endDate(BudgetBudgetFilterCustomPeriodEndDateArgs.builder()
.year(2023)
.month(12)
.day(31)
.build())
.build())
.build())
.amount(BudgetAmountArgs.builder()
.specifiedAmount(BudgetAmountSpecifiedAmountArgs.builder()
.currencyCode("USD")
.units("100000")
.build())
.build())
.thresholdRules(
BudgetThresholdRuleArgs.builder()
.thresholdPercent(0.5)
.build(),
BudgetThresholdRuleArgs.builder()
.thresholdPercent(0.9)
.build())
.build());
}
}
Content copied to clipboard
Import
Budget can be imported using any of these accepted formats
$ pulumi import gcp:billing/budget:Budget default billingAccounts/{{billing_account}}/budgets/{{name}}
Content copied to clipboard
$ pulumi import gcp:billing/budget:Budget default {{billing_account}}/{{name}}
Content copied to clipboard
$ pulumi import gcp:billing/budget:Budget default {{name}}
Content copied to clipboard