4

Luigi でデータ パイプラインを作成しており、処理されたデータを S3 バケットに直接書き込もうとしています。私が使用したコードは次のとおりです。

import luigi
from luigi.s3 import S3Target, S3Client

class myTask(luigi.Task):
    def requires(self):
        return otherTask()

    def output(self):
        client = S3Client('ACCESS_KEY', 'SECRET_KEY')
        return S3Target('s3.amazonaws.com/mybucket/myfolder/myfile.tsv', client=client)

    def run(self):
         fo = self.output().open('w')
         with self.input().open('r') as f:
            data = dosomething_to_input(f)
            fo.write(data)
         fo.close()

スクリプトを実行した後、エラーが発生しました:

S3ResponseError: S3ResponseError: 405 Method Not Allowed

ファイルを S3 バケットに直接書き込むことはできますか?

4

1 に答える 1

4

問題が解決しました!これは、s3 buckt の形式が原因です。正しい形式は「s3://mybucket/myfile」である必要があります。405 エラーは、boto がバケット名を認識しないために発生します。また、boto は「.」を含むバケット名を認識しないことに注意する必要があります。そのため、有効なバケット名を使用するか、構成ファイルで変更する必要があります。

于 2016-05-12T16:24:27.763 に答える