我正在尝试使用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 module中。我能够通过修改我的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
所需的对象。
现在我被困住了,不知道该怎么办。我能想到的选择:
OrdinaryCallingFormat
传递给S3Connection
至luigi.cfg
boto
或.aws/config
boto.cfg
始终在我的Vagrant机器中使用此调用格式
FakeS3
接受恰好是calling_format
的{{1}}使用的默认boto
(无论它意味着什么)。有关如何解决此问题的任何想法?
答案 0 :(得分:1)
你能否把它作为S3Client的kwargs传递给构造函数?
client = S3Client(aws_access_key, aws_secret_key,
{'calling_format':OrdinaryCallingFormat()})
target = S3Target('s3://somebucket/test', client=client)
答案 1 :(得分:0)
使用boto3 connect to 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
答案 2 :(得分: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