2012-05-10 7 views
2

ターゲットと依存関係がローカルファイルではなく、AWS/S3バケットに存在するmakefileを作成したいと思います。遠く離れた(AWS S3)ターゲットのメイクファイル

'data_raw'ファイルを 'obj1'にコピーしてから 'obj2'(あなたが所有するバケットに 'bucket'を編集し、これを実行する前に 'data_raw'ファイルを作成する必要がある):私はこれを取得

# local, works fine 
bucket = /tmp/test/ 
cp = cp 

# remote, does not work 
bucket = s3://bucket/test/ 
cp = s3cmd cp 

all : $(bucket)obj2 

$(bucket)obj2 : $(bucket)obj1 
    $(cp) $(bucket)obj1 $(bucket)obj2 

$(bucket)obj1 : 
    $(cp) $(bucket)raw_data $(bucket)obj1 

エラーは次のとおりです。です

makefile:9: *** target pattern contains no `%'. Stop. 

all : $(bucket)obj2 

私はmakeがリモートURI( "s3:// xxx")をまったく理解していないと思う。

私が見つけることができるすべてのサンプル/ドキュメントは、ターゲットと依存関係のためにローカルファイルを暗黙的に参照しているようです。大規模なグーグルでは、s3(http://code.google.com/p/awstasks/)のantタスクを作成するための未完成の見た目がいくつか出てきました。

これは、複雑な複雑なMapReduceジョブをPythonで実行するコンテキストです。

私はむしろGNU makeを使用しますが、確かに代替案を検討します。

私はいつもリモートターゲットの軽いローカルミラーを作成できましたが、確かに良い方法がありますか?

ありがとうございます!

Nic

+0

make *ファイル*をここで作成するのに最適です。しかし、このメイクファイルはあまりにも悪くはありません。あなたは複雑さを減らそうとしていますか?バケット内からMakeを実行できますか? – Beta

+0

ここでの難しさは、リモートURIをターゲットまたは依存として受け入れないようにすることにあります。私は何か愚かなことを逃していますか(エスケープ?)?どのような種類のURIを扱えるようにすべきですか?私はそれが主に存在をテストし、S3をサポートする必要がある日付を得ることができる必要があると思いますか? –

+0

AWS/S3はわかりませんが、プロキシとしていくつかのローカルファイルを使用できます。実際のファイルが変更されたことを示すために 'touch 'するだけで、' synch'ターゲットはそれらを最新のものにすることができます彼らのプライマリー? – Beta

答えて

1

S3バケットをローカルにマウントすることで回避できます。

Linuxの場合、おそらくfuse/s3fsを使用できます。それはMacOSでもうまくいくかもしれませんが、インストールするのは面倒です。代わりに商用ソフトウェアtransmitを使用しました( 'mount as disk'をクリックしてください)。 「s3cmd CPは」ローカルURIを拒否するため、我々は「CP」を使用して、この例では

bucket = /Volumes/s3.amazonaws.com/bucket/test/ 
cp = cp 

:それでは、上記の例では、と私のための機能です。実際の例では、コマンドは実際のs3入出力uriを必要とするpython map-reduceスクリプトに置き換えられます。

物事をきれいに保つために、ローカルにマウントされたファイル(存在/最新の状態をテストするための)に1つの接頭辞変数( "/Volumes/s3.amazonaws.com/")と、ビルドコマンドが実際のデータを指し示すための1つの接頭辞変数( "s3://")(このデータはmapreduceを通じてEC2インスタンスによってマッサージされますが、ローカルにすべてをダウンロードすることは絶対にありません)。

S3は最終的に一貫していることに注意してください。また、存在と最新の状態をテストするために、ファイル全体がローカルでダウンロードされないようにしてください(この場合、いくつかのダミーファイルを使用する必要があります)。

希望に役立ちます。

誰かが直接的にアプローチしている(ローカルにマウントされていない)人は、興味があります。

Nic

関連する問題