python - 无法在 Python API 中为新的 Google Cloud Platform 项目启用计费
问题描述
该项目是由 Python 使用 google_application_defaults 创建的,计费 API 已成功激活并在命令行上检查
os.system(gcloud services enable cloudbilling.googleapis.com)
os.system(gcloud services list --enabled)
然后,运行时:
from googleapiclient import discovery, errors, logging
CB = discovery.build("cloudbilling", "v1", credentials = default_creds, cache_discovery = False)
billing_body = {"projectID": projectID, "name": "projects/"+projectID+"/billingInfo", "billingEnabled": True, "billingAccountName": "billingAccounts/"+billingAccount}
billingUP = CB.projects().updateBillingInfo(name = projectID, body = billing_body )
try:
billing_resp = billingUP.execute()
print("Billing succesfully enabled")
except errors.HttpError as err:
billing_resp = None
print("request voided")
logging.error("There was an error creating the project. Check:")
logging.error(err._get_reason())
我收到以下错误:
Cloud Billing API has not been used in project XXXXXXXXXX before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/cloudbilling.googleapis.com/overview?project=XXXXXXXXXXX then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.
我还尝试在 python 脚本之外的命令行上直接激活它,但错误仍然存在。我在 billingUp 请求的“projectID”部分中使用了不同的格式:projectName、projects/projectName、projectID、projects/projectID,但没有任何效果。任何可能的解决方案?
解决方案
请使用下面的代码,这些 GCP 文档非常不清楚,难以理解和实现
from googleapiclient import discovery
from oauth2client.client import GoogleCredentials
projectID="<project id>"
biling_account_id = "<billing account id>"
credentials = GoogleCredentials.get_application_default()
from googleapiclient import discovery, errors, logging
CB = discovery.build("cloudbilling", "v1", credentials = credentials)
billing_body = {
"name": "projects/"+ projectID+"/billingInfo",
"projectId": projectID,
"billingEnabled": True,
"billingAccountName": "billingAccounts/"+biling_account_id
}
print(billing_body)
billingUP = CB.projects().updateBillingInfo(name = "projects/"+ projectID,body=billing_body)
try:
billing_resp = billingUP.execute()
print("Billing succesfully enabled")
except errors.HttpError as err:
billing_resp = None
print("request voided")
logging.error("There was an error enabling billing for the project. Check:")
logging.error(err._get_reason())
推荐阅读
- conditional - How do you conditionally show fields in "Show" component in react-admin?
- node.js - Node.js Bytecode Constant Pool Output
- linux - 同一个 git 提交的几个作者?
- javascript - Changing multiple props const to class
- eclipse - 由于包超时,Eclipse 内容辅助的问题花费了太长时间
- linux - 将参数传递给具有开关的 shell 脚本
- r - 在 write.table () r 中为 row.names 指定一个字符向量
- java - 如何解决 Log4J 无此类属性警告/错误?
- sql - 如何在 C# 后端打开与本地数据库的连接
- api - 如何通过读取文件来构造 POST url