1

我正在尝试测试我的Luigi使用FakeS3管道来模拟我的 S3 端点。为了让boto能够与 FakeS3 交互,必须使用如下方式设置连接OrdinaryCallingFormat

from boto.s3.connection import S3Connection, OrdinaryCallingFormat
conn = S3Connection('XXX', 'XXX', is_secure=False, 
                    port=4567, host='localhost',
                    calling_format=OrdinaryCallingFormat())

但是当使用 Luigi 时,这个连接被埋在s3 模块中。luigi.cfg我能够通过修改我的并添加一个 s3 部分来传递大部分选项,如

[s3]
host=127.0.0.1
port=4567
aws_access_key_id=XXX
aws_secret_access_key=XXXXXX
is_secure=0

但我不知道如何为calling_format.

现在我被卡住了,不知道如何继续。我能想到的选项:

  1. 弄清楚如何通过OrdinaryCallingFormatS3Connection通过toluigi.cfg
  2. 弄清楚如何强制boto.aws/configboto.cfg
  3. 接受使用FakeS3的默认值calling_formatboto碰巧SubdomainCallingFormat无论它是什么意思)。

关于如何解决这个问题的任何想法?

4

3 回答 3

1

您不能将它作为 S3Client 的 kwargs 传递给构造函数吗?

client = S3Client(aws_access_key, aws_secret_key,
                  {'calling_format':OrdinaryCallingFormat()})
target = S3Target('s3://somebucket/test', client=client)
于 2016-11-01T03:42:11.253 回答
0

我在使用 boto3 连接 fakeS3 时没有遇到任何问题。

import boto3
s3 = boto3.client(
    "s3", region_name="fakes3",
    use_ssl=False,
    aws_access_key_id="",
    aws_secret_access_key="",
    endpoint_url="http://localhost:4567"
)

无需特殊调用方法。

也许我错了,你真的需要 OrdinaryCallingFormat,如果我的代码不起作用,请通过 github 主题 boto3 支持: https ://github.com/boto/boto3/issues/334

于 2016-11-08T12:35:17.013 回答
0

您可以使用calling_format参数进行设置。以下是 fake-s3 的配置示例:

[s3]
aws_access_key_id=123
aws_secret_access_key=abc
host=fake-s3
port=4569
is_secure=0
calling_format=boto.s3.connection.OrdinaryCallingFormat
于 2017-12-28T23:32:59.933 回答