ターゲットと依存関係がローカル ファイルではなく、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 タスクの作成に関するいくつかの一見未完成のアイデアしか得られませんでした。
これは、Python で複数の複雑/入り組んだ MapReduce ジョブを実行するコンテキストにあります。
私はむしろ GNU make を使用したいと思いますが、確かに代替案を検討します。
リモート ターゲットの軽いローカル ミラーをいつでも作成できますが、確かにもっと良い方法がありますか?
前もって感謝します!
ニック