如何在Cloud Function中获取Google Cloud项目的Budget ID以删除预算?
解决方案
要获取指定项目关联的预算ID并完成删除操作,你需要先列出计费账号下的所有预算,再筛选出绑定目标项目的预算、提取其ID后执行删除。以下是完整实现代码:
from google.cloud.billing import budgets_v1 # 替换为你的实际值 BILLING_ACCOUNT_ID = "XXXXXXX" TARGET_PROJECT_ID = "your-target-project-id" client = budgets_v1.BudgetServiceClient() # 1. 列出当前计费账号下的所有预算 parent = f"BillingAccounts/{BILLING_ACCOUNT_ID}" list_request = budgets_v1.ListBudgetsRequest(parent=parent) budgets = client.list_budgets(request=list_request) # 2. 筛选出关联目标项目的预算,提取预算ID target_budget_id = None for budget in budgets: # 预算的项目关联规则存储在budget_filter.projects中,格式为"projects/{项目ID}" project_full_id = f"projects/{TARGET_PROJECT_ID}" if project_full_id in budget.budget_filter.projects: # 从预算的name字段中提取ID,name格式为"BillingAccounts/xxx/budgets/yyy" target_budget_id = budget.name.split("/")[-1] break if not target_budget_id: raise ValueError(f"未找到关联项目 {TARGET_PROJECT_ID} 的预算") # 3. 执行删除预算操作 delete_name = f"BillingAccounts/{BILLING_ACCOUNT_ID}/budgets/{target_budget_id}" delete_request = budgets_v1.DeleteBudgetRequest(name=delete_name) client.delete_budget(request=delete_request)
关键说明
- 权限要求:Cloud Function使用的服务账号需要拥有
billing.budgets.list和billing.budgets.delete权限,可直接赋予Billing Budget Editor角色,或创建包含这两个权限的自定义角色。 - 项目匹配逻辑:预算的项目关联信息存储在
budget.budget_filter.projects中,格式为projects/{项目ID},需与目标项目的完整格式匹配。 - 预算ID提取:每个预算的
name字段包含完整资源路径,通过分割字符串取最后一段即可得到预算ID。
内容的提问来源于stack exchange,提问作者zorroemoji
相关产品推荐
相关产品推荐

