GrailsからS3を扱う
GrailsでAmazon Web Services Simple Storage Service (S3)を使ってみる。
プラグインがあるので、利用は簡単。
http://www.grails.org/plugin/amazon-s3
まずは、インストールから。ドキュメントとしては、install-pluginコマンドを使っているけども、
BuildConfig.groovyに以下のように記述してインストール。
plugins {
runtime ':quartz:0.4.2'
runtime ':amazon-s3:0.8.2'
}
Config.groovy
aws {
domain="s3.amazonaws.com"
accessKey="【accesskey】"
secretKey="【secretKey】"
bucketName="grails"
}
データをアップロードすると、S3上で以下のような名前でバケットが作成されて、そのバケットにデータが保存されていく。
【accessKey】.grails
存在しないバケットの場合はUSの方に作られてしまうので、事前に使いたいリージョンでこの名前のバケットを作成しておく。作成さえしておけば、そのバケットを利用するようになっている。
このプラグインは、S3の操作にJetS3tというライブラリ(と言っていいのかわからないけど)を利用していて、現在のバージョンは、日本リージョンに対応しているみたいだけど、プラグインに入っているバージョンでは、日本リージョンに対応していない。USと、EUROPEには、対応しているけども、プラグインのソースコードでは、リージョンの指定すらしていない。
これでS3を利用する準備は完了。次に、データを登録してみる。
プラグインで用意されているS3AssetControllerを使ってデータの登録が出来るようになっている。
デフォルトパッケージで作成されているので、あくまで確認用の位置づけになっていると思われる。
実際にプロジェクトにプラグインを組み込む際は、このControllerは、なにかしらのアクセス制御をしておく必要があるだろう。
http://【serverHost】/【appName】/s3Asset/create
http://【serverHost】/【appName】/s3Asset/list
データをアップロードすると、一旦サーバーローカルにファイルが保存され、その後、バックグラウンド処理として、S3にデータがアップロードされる。
このプラグインは、S3のファイルの管理情報をGrailsのドメインで管理していて、プラグイン経由でアップロードされたファイルのみ操作可能になる。
ドメイン上に、アップロードの状況など(アップロード中とか、保存済みとか)が書き込まれていく。
データを削除した場合は、そのステータスが削除済みになり、ドメイン上に情報は残される。当然、S3上のファイルは削除される。
別途ツールなどを使ってアップロードしても、Grailsアプリケーションの一覧に出てこない。
そういったファイルは、何かしらの方法でGrailsのドメインにデータを登録すればリストに出すことは出来そうだ。
あと、バケット内にフォルダを作って登録することができないので、ファイルをグループに分けて管理するした場合は、ドメイン上にあるdescriptionとかに管理用情報を入れておくか、動的にバケットを作成、利用してアプリケーション上で工夫する必要がある。