2016-05-12 13 views
3

Luigiとデータパイプラインを作成していますが、処理したデータをS3バケットに直接書き込もうとしています。私が使用したコードは次のとおりです。 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バケットにファイルを書き込むことができますか?

答えて

2

問題が解決しました。 s3 bucktの形式のためです。 正しい形式は 's3:// mybucket/myfile'にする必要があります。 405エラーは、botoがバケット名を認識しないために発生します。 botoはバケット名を '。'で認識しないことにも言及する必要があります。 Python 2.7。*の中では、有効なバケット名を使うか、設定ファイル内でバケット名を変更する必要があります。

関連する問題