通过 Cloud Functions 创建 Google Cloud Platform 预算
Create a Google Cloud Platform budget via a Cloud Function
我想利用测试版 BillingBudgets API via a Cloud Function written in Python. With the Billing API,使用 API 更新项目的账单非常简单...
from oauth2client.client import GoogleCredentials
credentials = GoogleCredentials.get_application_default()
from apiclient import discovery
service = discovery.build('cloudbilling', 'v1', credentials=credentials, cache_discovery=False)
billing_info = service.projects().updateBillingInfo(name='projects/{}'.format(projectID), body={'billingAccountName': 'billingAccounts/000000-AAAAAA-BBBBBB'}).execute()
但是,尝试使用 BillingBudgets API 创建预算,例如...
from oauth2client.client import GoogleCredentials
credentials = GoogleCredentials.get_application_default()
from apiclient import discovery
service = discovery.build('billingbudgets', 'v1beta1', credentials=credentials, cache_discovery=False)
budget_info = service.budgets().create('billingAccounts/000000-AAAAAA-BBBBBB/budgets', body={longJSONStringHere}).execute()
...失败并显示“'Resource' 对象没有属性 'billing'”。查看 API 并尝试使用对象语法和结构没有产生任何结果。从文档中可以看出,这个 API 还没有客户端库,所以我目前假设这将在未来的某个时间点起作用,我现在正在寻找一种替代方法来利用API.
我可以直接使用 REST 和 OAuth 成功地练习 API,但我正在努力制定如何在 Cloud Functions 中完成它。目前,我的 requirements.txt 中有以下内容,并且正在尝试研究如何将 Rest API 与 OAuth 结合使用。
google-api-python-client==1.7.4
oauth2client==4.1.3
google-auth-httplib2==0.0.3
欢迎任何代码片段、想法或建议。
我自己试过了,好像错误在这一行:
budget_info =
service.budgets().create('billingAccounts/000000-AAAAAA-BBBBBB/budgets',
body={longJSONStringHere}).execute()
您在此服务路径上缺少 billingAccounts
资源,您可以像这样添加它来修复它,它应该可以工作:
budget_info =
service.billingAccounts().budgets().create('billingAccounts/000000-AAAAAA-BBBBBB/budgets',
body={longJSONStringHere}).execute()
我注意到的另一件事是,您正在使用 oauth2client
库来检索应用程序默认凭据,但是这个库已被弃用。
相反,您应该为此使用 google-auth
库,您只需更改代码即可检索凭据,如下所示:
import google.auth
credentials, project_id = google.auth.default()
终于想通了
# for Cloud Functions use
def get_service():
import googleapiclient.discovery
return googleapiclient.discovery.build('compute', 'v1', cache_discovery=False)
requirements.txt
google-api-python-client
oauth2client
我想利用测试版 BillingBudgets API via a Cloud Function written in Python. With the Billing API,使用 API 更新项目的账单非常简单...
from oauth2client.client import GoogleCredentials
credentials = GoogleCredentials.get_application_default()
from apiclient import discovery
service = discovery.build('cloudbilling', 'v1', credentials=credentials, cache_discovery=False)
billing_info = service.projects().updateBillingInfo(name='projects/{}'.format(projectID), body={'billingAccountName': 'billingAccounts/000000-AAAAAA-BBBBBB'}).execute()
但是,尝试使用 BillingBudgets API 创建预算,例如...
from oauth2client.client import GoogleCredentials
credentials = GoogleCredentials.get_application_default()
from apiclient import discovery
service = discovery.build('billingbudgets', 'v1beta1', credentials=credentials, cache_discovery=False)
budget_info = service.budgets().create('billingAccounts/000000-AAAAAA-BBBBBB/budgets', body={longJSONStringHere}).execute()
...失败并显示“'Resource' 对象没有属性 'billing'”。查看 API 并尝试使用对象语法和结构没有产生任何结果。从文档中可以看出,这个 API 还没有客户端库,所以我目前假设这将在未来的某个时间点起作用,我现在正在寻找一种替代方法来利用API.
我可以直接使用 REST 和 OAuth 成功地练习 API,但我正在努力制定如何在 Cloud Functions 中完成它。目前,我的 requirements.txt 中有以下内容,并且正在尝试研究如何将 Rest API 与 OAuth 结合使用。
google-api-python-client==1.7.4
oauth2client==4.1.3
google-auth-httplib2==0.0.3
欢迎任何代码片段、想法或建议。
我自己试过了,好像错误在这一行:
budget_info = service.budgets().create('billingAccounts/000000-AAAAAA-BBBBBB/budgets', body={longJSONStringHere}).execute()
您在此服务路径上缺少 billingAccounts
资源,您可以像这样添加它来修复它,它应该可以工作:
budget_info = service.billingAccounts().budgets().create('billingAccounts/000000-AAAAAA-BBBBBB/budgets', body={longJSONStringHere}).execute()
我注意到的另一件事是,您正在使用 oauth2client
库来检索应用程序默认凭据,但是这个库已被弃用。
相反,您应该为此使用 google-auth
库,您只需更改代码即可检索凭据,如下所示:
import google.auth
credentials, project_id = google.auth.default()
终于想通了
# for Cloud Functions use
def get_service():
import googleapiclient.discovery
return googleapiclient.discovery.build('compute', 'v1', cache_discovery=False)
requirements.txt
google-api-python-client
oauth2client