ibm_boto3连接拒绝错误

时间:2018-01-14 07:21:23

标签: python-3.x anaconda object-storage data-science-experience

但是,

ibm_boto3 list_objects在IBM Data Platform Jupyter Notebook中工作,

ibm_boto3 list_objects在本地终端无效。

示例代码

client.list_objects(Bucket=bucket)

我能够使用print(client)

打印出客户端对象

但是,当我尝试list_objects然后ConnectionRefusedError(61, 'Connection refused'))发生时。

ibm_botocore connection refused screenshot

在我本地尝试ibm_boto3的原因是因为我想将文件夹从本地上传到IBM Data Platform项目。我的本地文件夹包含很多文件,因此我想使用本地终端的ibm_boto3 sdk轻松上传。

我使用jupyter notebook ipynb文件在IBM Data Platform项目中创建了该文件夹,但是当我在本地终端中测试put_object时,它无效,这与list_objects的情况相同。

如何在本地终端中运行list_object?

我正在使用Python 3.5.2 :: Anaconda 4.3.0 (x86_64)

非常感谢,

1 个答案:

答案 0 :(得分:1)

从Notebook插入代码生成的凭据仅适用于您在DSX上创建的项目,因此它仅限于为项目创建的存储桶,并拒绝访问任何其他存储桶。另外我认为*它确保这些凭证只能在DSX上的Notebook中使用。

所以你需要做的是 在DSX中的设置下进入应用和服务

https://dataplatform.ibm.com/settings/services?context=analytics 然后在IBM Cloud中单击“管理您的云对象存储服务”。

enter image description here

访问Bluemix.net(IBM Cloud) https://console.bluemix.net/services/ 并找到您的COS服务,然后打开它

然后点击New Credenitals并选择" Manager"作为角色,将它命名为你喜欢的任何东西。

enter image description here

单击“添加”。

现在来自本地机器上的python客户端。 如此描述 https://github.com/IBM/ibm-cos-sdk-python 我们将创建客户端而不是资源。 使用新生成的凭据中的值替换API-KEY,RESOURCE_INSTANCE_ID。(单击查看Credenitals) 同时将bucket-name替换为您想要的存储桶名称。

确保安装  pip install ibm-cos-sdk

from botocore.client import Config
import ibm_boto3
api_key = 'API_KEY'
service_instance_id = 'RESOURCE_INSTANCE_ID'
auth_endpoint = 'https://iam.bluemix.net/oidc/token'
service_endpoint = 'https://s3-api.us-geo.objectstorage.softlayer.net'
cos_client = ibm_boto3.client('s3',
                      ibm_api_key_id=api_key,
                      ibm_service_instance_id=service_instance_id,
                      ibm_auth_endpoint=auth_endpoint,
                      config=Config(signature_version='oauth'),
                      endpoint_url=service_endpoint)
cos_client.list_buckets()
cos_client.list_objects(Bucket="bucketname")

谢谢, 查尔斯。