尝试在IBM Cloud Functions中运行代码

时间:2018-12-18 03:39:49

标签: ibm-cloud openwhisk ibm-cloud-functions

我尝试在IBM函数中运行以下代码以获取计费数据:

iam_token = 'Bearer eyJraWQiOiIyMDE3MTAzMC0wM****'
def processResourceInstanceUsage(account_id, billMonth):
    METERING_HOST = "https://metering-reporting.ng.bluemix.net"
    USAGE_URL = "/v4/accounts/"+account_id + \
        "/resource_instances/usage/"+billMonth+"?_limit=100&_names=true"

    url = METERING_HOST+USAGE_URL
    headers = {
        "Authorization": "{}".format(iam_token),
        "Accept": "application/json",
        "Content-Type": "application/json"
    }
    response = requests.get(url, headers=headers)
    print("\n\nResource instance usage for first 100 items")
    return response.json()

processResourceInstanceUsage('*****', '11')

由于某种原因,我不断收到201未经授权的错误。我尝试多次创建iam_token。仍然会出现相同的错误。

1 个答案:

答案 0 :(得分:2)

您提供的代码中应该注意的几件事。

  • 您过去的月份是错误的。它应为 YYYY-MM 格式。

  • 在运行ibmcloud target

    时,
  • account_id 应该是帐户名称旁边的ID。

  • 对于IAM令牌,运行此命令ibmcloud iam oauth_tokens。如果要使用平台API密钥生成访问令牌,请参阅此link。不需要单词 Bearer ,因为它不是授权令牌。

完成所有这些操作后,创建一个IBM Cloud函数(Python 3),添加以下代码,传递account_id和token并调用操作以查看结果。 IBM Cloud函数期望将字典作为输入/参数,并将JSON作为响应

import sys
import requests

def main(dict):
    METERING_HOST="https://metering-reporting.ng.bluemix.net"
    account_id="3d40d89730XXXXXXX"
    billMonth="2018-10"
    iam_token="<IAM_TOKEN> or <ACCESS_TOKEN>"
    USAGE_URL="/v4/accounts/"+account_id+"/resource_instances/usage/"+billMonth+"?_limit=100&_names=true"

    url=METERING_HOST+USAGE_URL
    headers = {
        "Authorization": "{}".format(iam_token),
        "Accept": "application/json",
        "Content-Type": "application/json"
    }
    response=requests.get(url, headers=headers)
    print ("\n\nResource instance usage for first 100 items")
    return { 'message': response.json() }

这对我有用,并返回了带有按地区计费数据的JSON。

参考:https://stackoverflow.com/a/52333233/1432067