如何使用FakeS3测试Luigi?

时间:2016-10-31 12:26:29

标签: amazon-s3 boto luigi fakes3

我正在尝试使用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所需的对象。

现在我被困住了,不知道该怎么办。我能想到的选择:

  1. 了解如何将OrdinaryCallingFormat传递给S3Connectionluigi.cfg
  2. 通过在boto.aws/config
  3. 中为我设置未知选项,了解如何强制boto.cfg始终在我的Vagrant机器中使用此调用格式
  4. FakeS3接受恰好是calling_format的{​​{1}}使用的默认boto(无论它意味着什么)。
  5. 有关如何解决此问题的任何想法?

3 个答案:

答案 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