Boto3将对象结果放入botocore.exceptions.ReadTimeoutError

时间:2019-04-18 14:14:38

标签: amazon-s3 boto3 ceph radosgw

我在每个节点上设置了两个带有rados网关的ceph集群。 我要实现的目标是将所有对象从群集“ 1”中具有端点的存储桶“ A”传输到可以从群集“ 2”中的另一个端点访问的存储桶“ B”。这对我的问题并不重要,但至少您了解上下文。

我使用boto3模块在python中创建了一个脚本。 该脚本非常简单。我只是想将一个物体放在桶中。

相关部分如下:

 s3 = boto3.resource('s3',
                      endpoint_url=credentials['endpoint_url'],
                      aws_access_key_id=credentials['access_key'],
                      aws_secret_access_key=credentials['secret_key'],
                      use_ssl=False)

    s3.Object('my-bucket', 'hello.txt').put(Body=open('/tmp/hello.txt', 'rb'))

(hello.txt仅包含一个单词)

比方说,此脚本是从群集1中的一个节点(即radosgw端点节点)编写并运行的,当“ endpoint_url”是我正在从中运行该脚本的节点时,它会很好地工作,但它不起作用当我尝试到达另一个端点(radosgw,位于群集“ 2”内的另一个节点)时。

我收到此错误:

botocore.exceptions.ReadTimeoutError: Read timeout on endpoint URL

奇怪的是,我可以创建一个存储桶而没有任何错误:

s3_src.create_bucket(Bucket=bucket_name)
s3_dest.create_bucket(Bucket=bucket_name)

我什至可以列出两个端点的存储桶。

您知道为什么我可以做几乎所有事情但不将单个对象放在第二个端点中吗?

我希望这有道理。

1 个答案:

答案 0 :(得分:0)

最终,我发现该问题与boto无关,而与我的ceph池(依赖我的数据)有关。

存储池是健康的,这就是为什么我可以创建存储桶而数据池不健康的原因,因此,当我尝试将对象放入存储桶时会出现问题。