0

我正在尝试从一些 python 代码创建一个 IBM Cloud Function Web 操作。此代码具有不在运行时中的依赖项,因此我按照此处的步骤将依赖项与我的代码打包在一起。我现在需要使用此处描述的步骤在云上为此包创建操作。我有几个问题。

首先是我想检查这是否会进入正确的命名空间。但是,虽然我有几个,但当我这样做时没有一个出现ibmcloud fn namespace list,我只是得到带有标题的空表。我检查了我使用的是正确的区域ibmcloud target -r eu-gb

第二个是,当我尝试通过使用从命令行创建命名空间来绕过上述问题时ibmcloud fn namespace create nyNamespaceName,它可以工作,但是我随后检查了 Web UI,并且这个新命名空间是在达拉斯地区而不是伦敦地区创建的...由于某种原因,我似乎无法让它在我当前定位的区域中创建命名空间,它总是达拉斯。

第三个问题是,当我尝试从这里开始执行步骤 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
4

1 回答 1

0

我知道 OP 说他们“瞄准了正确的区域”。但我想明确指出,“正确区域”是您要列出或定位的命名空间所在的确切区域。

除非您以该区域为目标,否则您将无法列出或定位任何这些命名空间。

这是违反直觉的,因为

  • 您可以列出目标区域以外的区域中命名空间的服务 ID。
  • Web 门户允许您查看所有区域中的命名空间,那么 CLI 为什么不应该呢?

我遇到的问题与 OP 的第一个问题非常相似,但是一旦我瞄准了正确的区域,它就可以正常工作。

于 2020-04-04T04:13:23.950 回答