Ошибка при использовании интерфейса командной строки для облачных функций с пространствами имен IAM

Я пытаюсь создать веб-действие IBM Cloud Function из некоторого кода Python. У этого кода есть зависимость, которой нет во время выполнения, поэтому я выполнил шаги здесь, чтобы упаковать зависимость с моим кодом. Теперь мне нужно создать действие в облаке для этого пакета, используя шаги, описанные в здесь. У меня несколько проблем.

Во-первых, я хочу убедиться, что это попадет в правильное пространство имен. Однако, хотя у меня их несколько, ни один из них не отображается, когда я делаю ibmcloud fn namespace list, я просто получаю пустую таблицу с заголовками. Я проверил, что нацелился на правильный регион, используя ibmcloud target -r eu-gb.

Во-вторых, когда я пытаюсь обойти описанную выше проблему, создав пространство имен из командной строки с помощью ibmcloud fn namespace create nyNamespaceName, он работает, но затем я проверяю веб-интерфейс, и это новое пространство имен было создано в регионе Даллас, а не в Лондоне. один ... Кажется, я не могу заставить его создать пространство имен в регионе, на который я сейчас нацелен по какой-то причине, это всегда Даллас.

Третья проблема заключается в том, что когда я пытаюсь выполнить шаги 2 и 3 из здесь независимо от того, принимая, что он окажется в нежелательном пространстве имен Даллас, запустив эквивалент ibmcloud fn action create demo/hello <filepath>/hello.js --web true, он продолжает говорить мне, что мне нужно настроить таргетинг на организацию и пространство. Но мое пространство имен - это пространство имен IAM, у него нет организации и пространства, поэтому нечего давать?

Пожалуйста, дайте мне знать, если я упускаю что-то очевидное или что-то неправильно понял, потому что мне кажется, что CLI не соблюдает таргетинг на регион и неправильно обрабатывает данные IAM.

Изменить: добавление кода, как предлагается, но этот код работает нормально локально, это часть CLI, с которой я борюсь?

import sys
import requests
import pandas as pd
import json
from ibm_ai_openscale import APIClient

def main(dict):

    # Get AI Openscale GUID 
    AIOS_GUID = None
    token_data = {
        'grant_type': 'urn:ibm:params:oauth:grant-type:apikey',
        'response_type': 'cloud_iam',
        'apikey': 'SOMEAPIKEYHERE'
    }

    response = requests.post('https://iam.bluemix.net/identity/token', data=token_data)
    iam_token = response.json()['access_token']
    iam_headers = {
        'Content-Type': 'application/json',
        'Authorization': 'Bearer %s' % iam_token
    }

    resources = json.loads(requests.get('https://resource-controller.cloud.ibm.com/v2/resource_instances', headers=iam_headers).text)['resources']
    for resource in resources:
        if "aiopenscale" in resource['id'].lower():
            AIOS_GUID = resource['guid']

    AIOS_CREDENTIALS = {
        "instance_guid": AIOS_GUID,
        "apikey": 'SOMEAPIKEYHERE',
        "url": "https://api.aiopenscale.cloud.ibm.com"
    }

    if AIOS_GUID is None:
        print('AI OpenScale GUID NOT FOUND')
    else:
        print('AI OpenScale FOUND')

    #GET OPENSCALE SUBSCRIPTION

    ai_client = APIClient(aios_credentials=AIOS_CREDENTIALS)
    subscriptions_uids = ai_client.data_mart.subscriptions.get_uids()
    for sub in subscriptions_uids:
        if ai_client.data_mart.subscriptions.get_details(sub)['entity']['asset']['name'] == "MYMODELNAME":
                subscription = ai_client.data_mart.subscriptions.get(sub)

    #EXPLAINABILITY TEST
    sample_transaction_id="SAMPLEID"
    run_details = subscription.explainability.run(transaction_id=sample_transaction_id, cem=False)

    #Formating results
    run_details_json = json.dumps(run_details)

    return run_details_json

person 71ML    schedule 27.06.2019    source источник
comment
опубликуйте код.   -  person Claire    schedule 27.06.2019
comment
Много текста и никакого кода. Показать выполненные шаги и ошибки или другой результат   -  person data_henrik    schedule 28.06.2019
comment
Добавили код - надеюсь, поможет? можно попытаться уменьшить стену текста, извините   -  person 71ML    schedule 28.06.2019
comment
Я также попытался настроить таргетинг на свое пространство имен cf, но затем я получил ту же ошибку, что и этот, я думаю, по тем же причинам (облегченная учетная запись?)   -  person 71ML    schedule 28.06.2019


Ответы (1)


Я знаю, что ОП сказал, что они «нацелены на правильный регион». Но я хочу прояснить, что «правильная область» - это именно та область, в которой расположены пространства имен, которые вы хотите перечислить или нацелить.

Если вы не настроите таргетинг на этот регион, вы не сможете перечислить или настроить таргетинг ни на одно из этих пространств имен.

Это нелогично, потому что

  • Вы можете перечислить Service ID пространств имен в регионах, отличных от того, на который вы нацеливаетесь.
  • Веб-портал позволяет вам видеть пространства имен во всех регионах, так почему бы не использовать интерфейс командной строки?

У меня была проблема, очень похожая на первую проблему OP, но как только я выбрал правильный регион, все заработало.

person Ben Hogan    schedule 04.04.2020