1

S3 エンドポイントをシミュレートするためにFakeS3を使用して、vagrant マシン内でLuigiパイプラインをテストしようとしています。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.cfgmyを変更し、次のように 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. OrdinaryCallingFormattoを渡す方法を理解S3Connectionするluigi.cfg
  2. botoVagrant マシンで常にこの呼び出し形式を強制的に使用する方法を見つけて.aws/configください。boto.cfg
  3. それがたまたま使用するFakeS3デフォルトを受け入れるようにします(それが何を意味するにせよ)。calling_formatbotoSubdomainCallingFormat

これを修正する方法についてのアイデアはありますか?

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 connect を 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 を必要とするのは間違っていると思います。私のコードが機能しない場合は、 https ://github.com/boto/boto3/issues/334 の github トピックの boto3 サポートを 参照してください。

于 2016-11-08T12:35:17.013 に答える