如何使用 FakeS3 测试 Luigi?
How to test Luigi with FakeS3?
我正在尝试测试我的 Luigi pipelines inside a vagrant machine using FakeS3 to simulate my S3 endpoints. For 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
传递所需的对象。
现在我卡住了,不知道如何继续。我能想到的选项:
- 弄清楚如何通过
luigi.cfg
将 OrdinaryCallingFormat
传递给 S3Connection
- 通过在
.aws/config
或 boto.cfg
[=41= 中为我设置未知选项,找出如何强制 boto
在我的 Vagrant 机器中始终使用此调用格式]
- 让
FakeS3
接受 boto
使用的默认值 calling_format
恰好是 SubdomainCallingFormat
(不管它是什么意思)。
关于如何解决这个问题有什么想法吗?
您不能将它作为 S3Client 的 kwargs 传递给构造函数吗?
client = S3Client(aws_access_key, aws_secret_key,
{'calling_format':OrdinaryCallingFormat()})
target = S3Target('s3://somebucket/test', client=client)
我在使用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
可以通过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
我正在尝试测试我的 Luigi pipelines inside a vagrant machine using FakeS3 to simulate my S3 endpoints. For 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
传递所需的对象。
现在我卡住了,不知道如何继续。我能想到的选项:
- 弄清楚如何通过
luigi.cfg
将 - 通过在
.aws/config
或boto.cfg
[=41= 中为我设置未知选项,找出如何强制boto
在我的 Vagrant 机器中始终使用此调用格式] - 让
FakeS3
接受boto
使用的默认值calling_format
恰好是SubdomainCallingFormat
(不管它是什么意思)。
OrdinaryCallingFormat
传递给 S3Connection
关于如何解决这个问题有什么想法吗?
您不能将它作为 S3Client 的 kwargs 传递给构造函数吗?
client = S3Client(aws_access_key, aws_secret_key,
{'calling_format':OrdinaryCallingFormat()})
target = S3Target('s3://somebucket/test', client=client)
我在使用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
可以通过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