使用CLI将IAM命名空间用于云功能时出错

问题描述 投票:0回答:1

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

首先,我想检查一下它是否将进入正确的名称空间。但是,尽管我有几个,但是当我执行ibmcloud fn namespace list时都没有出现,我只是得到了带有标题的空表。我使用ibmcloud target -r eu-gb检查了我是否定位到正确的区域。

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

[第三个问题是,当我尝试执行here中的步骤2和3时,不管它接受了将运行在ibmcloud fn action create demo/hello <filepath>/hello.js --web true中的等效项,最终接受了不需要的Dallas命名空间,它总是告诉我我需要以组织和空间为目标。但是我的命名空间是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
ibm-cloud openwhisk ibm-cloud-functions
1个回答
0
投票

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

除非您定位到该区域,否则将无法列出或定位任何这些名称空间。

这是违反直觉的,因为

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

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

© www.soinside.com 2019 - 2024. All rights reserved.