Amazon S3アップロード用Antタスク

2012.03.05

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

S3へのデプロイ

発表当初、Amazon S3はデータストレージとしての用途として使用されていました。 しかし、S3の低コスト化/多機能化していくにしたがって、Cloud Frontと組み合わせてCDN(コンテンツデリバリネットワーク。Webコンテンツをインターネット経由で配信するために最適化されたネットワーク)として使用することも増えてきました。 現在作成しているアプリケーションで、ローカル環境ではjsファイルや画像ファイルはローカルを見ていますが、 本番環境ではAmazon S3上にコンテンツを配置してCloud Frontでキャッシュさせています。

最初はS3上のコンテンツも少なかったので手動でよかったのですが、数が増えてきたりHTTPヘッダにメタ情報を追加したりして、 手動でのデプロイが非常に面倒になっていました。 アプリケーションはEclipseで開発しており、ちょうどAntを使用していた処理があったため、 S3へのアップロードもAntタスクでできればよいと思い、新規タスクを作成しました。 (たぶん探せばS3アップロードのAntタスクはすでにあったと思わますが・・・)

今回使用した動作環境は以下のとおりです。

  • OS : MacOS X 10.7.2
  • Java : 1.6.0_26
  • Apache Ant : 1.8.3

S3UploadのAntタスク

ソースはgithubにあげてあります。 中身は非常に単純で、org.apache.tools.ant.Taskクラスを継承したS3uploadクラスとJavaBeansが1つあるだけです。 build.xmlで指定したバケットに対してfilesetで指定したファイルをアップロードします。 アップロードするファイルによってはHTTPヘッダ情報を付加する必要があったので、Content Encoding,Content Type,Cache-Controleをbuild.xmlで指定できるようにしています。 ただ、アップロードするファイルの権限は全ユーザーに対してREAD権限を付与するので注意してください。

まとめ

githubから落としたプロジェクトに依存ライブラリを追加し、jar化すればどこでも使用できます。 いまのところ期待どおりに動いていると思われます。(もし使う際には一応ご注意を) かなりやっつけでつくったものなのでアレですが、何かの参考にしてください。