Я пытаюсь создать веб-действие 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