Попытка запустить код в 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. Он по-прежнему дает ту же ошибку.


person NoviceMe    schedule 18.12.2018    source источник
comment
Ваш код работает в автономном режиме? Как вы создаете действие, как вы его вызываете? Пожалуйста, добавьте детали   -  person data_henrik    schedule 18.12.2018
comment
Вы получаете ответ 201 или несанкционированную ошибку? Этот код состояния обычно не появляется с этой ошибкой.   -  person nitind    schedule 18.12.2018


Ответы (1)


Есть несколько вещей, о которых следует позаботиться в предоставленном вами коде.

  • Месяц, который вы проходите, неправильный. Он должен быть в формате ГГГГ-ММ.

  • account_id должен быть идентификатором рядом с именем вашей учетной записи при запуске ibmcloud target

  • Для токена IAM выполните эту команду ibmcloud iam oauth_tokens. Если вы хотите сгенерировать токен доступа с помощью ключа API платформы, обратитесь к этому ссылка. Слово предъявитель не требуется, поскольку это не токен авторизации.

После того, как все это будет готово, создайте функцию IBM Cloud (Python 3), добавьте приведенный ниже код, передайте account_id и токен и вызовите действие, чтобы увидеть результат. Функция 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

person Vidyasagar Machupalli    schedule 18.12.2018