通过Cloud Function创建Google Cloud Platform预算

时间:2019-12-14 20:34:36

标签: google-cloud-platform google-cloud-functions google-oauth google-cloud-billing

我想通过Python编写的Cloud Function利用beta BillingBudgets API。使用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()

...由于“资源”对象失败而没有属性“ billing”。浏览API并使用对象的语法和结构并没有产生任何结果。从文档中可以看出,该API尚无客户端库,因此,我目前的假设是,该库将在将来发挥作用,我现在正在寻找一种替代方法来利用该API。 / p>

我可以使用REST和OAuth直接成功地成功使用API​​,但是正在努力制定如何在Cloud Function中实现该API的方法。目前,在我的requirements.txt文件中包含以下内容,并正在尝试研究如何将Rest API与OAuth结合使用。

google-api-python-client==1.7.4
oauth2client==4.1.3
google-auth-httplib2==0.0.3

欢迎任何代码段,想法或建议。

2 个答案:

答案 0 :(得分:0)

我已经尝试过了,似乎错误在这行上:

  

budget_info =   service.budgets()。create('billingAccounts / 000000-AAAAAA-BBBBBB / budgets',   body = {longJSONStringHere})。execute()

您在此服务路径上缺少billingAccounts资源,可以通过这样添加它来修复它,它应该可以工作:

  

budget_info =   服务。 billingAccounts() .budgets()。create('billingAccounts / 000000-AAAAAA-BBBBBB / budgets ,,   body = {longJSONStringHere})。execute()

我注意到的另一件事是,您正在使用oauth2client库来检索应用程序默认凭据,但是该库已被弃用。

相反,您应该为此使用google-auth库,您可以更改代码以检索凭证,如下所示:

import google.auth

credentials, project_id = google.auth.default()

答案 1 :(得分:0)

最后我想通了。

# 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