Playframework1.2.5 x AWS SDK for Java導入手順メモ

設定って言うほど大した事はしてないですが、フレームワーク上でAWSを利用する際の環境構築手順をメモとして残しておこうかと。対象の環境構成は以下の通り。

Java SDK: 1.7
Playframework: 1.2.5
AWS SDK: 1.4.6 (2013.06.16時点での最新)
IDE: IntelliJ IDEA 12(Ultimate Edition)
  • まずはJava導入済である事を確認。
$ java -version
java version "1.7.0_11"
Java(TM) SE Runtime Environment (build 1.7.0_11-b21)
Java HotSpot(TM) 64-Bit Server VM (build 23.6-b04, mixed mode)
$ 
  • Playのアーカイブファイルをダウンロード。1.2系の最新バージョンを用いる。そして環境変数としてPLAY_HOMEを作成し、値を設定。
$ wget http://downloads.typesafe.com/releases/play-1.2.5.zip
$ unzip play-1.2.5.zip
$ vi .bash_profile
---------------------
PLAY_HOME=/Applications/play-1.2.5
export PLAY_HOME
export PATH=$PATH:$PLAY_HOME
---------------------
$ source .bash_profile
  • Playのバージョンを確認。
$ play version
~        _            _ 
~  _ __ | | __ _ _  _| |
~ | '_ \| |/ _' | || |_|
~ |  __/|_|\____|\__ (_)
~ |_|            |__/   
~
~ play! 1.2.5, http://www.playframework.org
~
1.2.5
$ 
  • プロジェクトの新規作成。
$ play new awslabo
~        _            _ 
~  _ __ | | __ _ _  _| |
~ | '_ \| |/ _' | || |_|
~ |  __/|_|\____|\__ (_)
~ |_|            |__/   
~
~ play! 1.2.5, http://www.playframework.org
~
~ The new application will be created in /Users/shinyaa31/IdeaProjects/awslabo
~ What is the application name? [awslabo] 
~
~ OK, the application is created.
~ Start it with : play run awslabo
~ Have fun!
~
$
$ vi awslabo/conf/dependencies.yml

# Application dependencies

require:
    - play
    - com.amazonaws -> aws-java-sdk 1.4.6
  • 依存性解決のコマンド実行。
$ play deps awslabo/
~        _            _ 
~  _ __ | | __ _ _  _| |
~ | '_ \| |/ _' | || |_|
~ |  __/|_|\____|\__ (_)
~ |_|            |__/   
~
~ play! 1.2.5, http://www.playframework.org
~
~ Resolving dependencies using /Users/shinyaa31/IdeaProjects/awslabo/conf/dependencies.yml,
~
~ 	com.amazonaws->aws-java-sdk 1.4.6 (from mavenCentral)
~ 	org.apache.httpcomponents->httpclient 4.1 (from mavenCentral)
~ 	org.apache.httpcomponents->httpcore 4.1 (from mavenCentral)
~ 	org.codehaus.jackson->jackson-core-asl 1.8.9 (from mavenCentral)
~ 	org.codehaus.jackson->jackson-mapper-asl 1.8.9 (from mavenCentral)
~ 	org.freemarker->freemarker 2.3.9 (from mavenCentral)
~ 	org.springframework->spring-beans 3.0.7.RELEASE (from mavenCentral)
~ 	org.springframework->spring-core 3.0.7.RELEASE (from mavenCentral)
~ 	org.springframework->spring-asm 3.0.7.RELEASE (from mavenCentral)
~ 	org.springframework->spring-context 3.0.7.RELEASE (from mavenCentral)
~ 	org.springframework->spring-aop 3.0.7.RELEASE (from mavenCentral)
~ 	aopalliance->aopalliance 1.0 (from mavenCentral)
~ 	org.springframework->spring-expression 3.0.7.RELEASE (from mavenCentral)
~ 	org.springframework->spring-test 3.0.7.RELEASE (from mavenCentral)
~ 	org.aspectj->aspectjrt 1.6.0 (from mavenCentral)
~ 	stax->stax-api 1.0.1 (from mavenCentral)
~ 	stax->stax 1.2.0 (from mavenCentral)
~
~ Downloading required dependencies,
~
~ 	downloaded http://repo1.maven.org/maven2/com/amazonaws/aws-java-sdk/1.4.6/aws-java-sdk-1.4.6.jar                          
~ 	downloaded http://repo1.maven.org/maven2/com/amazonaws/aws-java-sdk/1.4.6/aws-java-sdk-1.4.6-sources.jar                          
~
~ Some dependencies have been evicted,
~
~	commons-codec 1.3 is overriden by commons-codec 1.4
~	mail 1.4 is overriden by mail 1.4.3
~
~ Installing resolved dependencies,
~
~ 	lib/aws-java-sdk-1.4.6.jar
~ 	lib/httpclient-4.1.jar
~ 	lib/jackson-core-asl-1.8.9.jar
~ 	lib/jackson-mapper-asl-1.8.9.jar
~ 	lib/httpcore-4.1.jar
~ 	lib/freemarker-2.3.9.jar
~ 	lib/spring-beans-3.0.7.RELEASE.jar
~ 	lib/spring-core-3.0.7.RELEASE.jar
~ 	lib/spring-context-3.0.7.RELEASE.jar
~ 	lib/spring-test-3.0.7.RELEASE.jar
~ 	lib/aspectjrt-1.6.0.jar
~ 	lib/stax-api-1.0.1.jar
~ 	lib/stax-1.2.0.jar
~ 	lib/spring-asm-3.0.7.RELEASE.jar
~ 	lib/spring-aop-3.0.7.RELEASE.jar
~ 	lib/spring-expression-3.0.7.RELEASE.jar
~ 	lib/aopalliance-1.0.jar
~
~ Done!
~
$
  • IntelliJ IDEAで諸々作業を行う為、IDE対応コマンドを実行。
$ play idea awslabo/
~        _            _ 
~  _ __ | | __ _ _  _| |
~ | '_ \| |/ _' | || |_|
~ |  __/|_|\____|\__ (_)
~ |_|            |__/   
~
~ play! 1.2.5, http://www.playframework.org
~
~ OK, the application is ready for Intellij Idea
~ Use File, Open Project... to open "awslabo.ipr"
~
$
  • IDEAで対象プロジェクトのiprファイルを選択。(※[File]→[Open])


  • プロジェクトの設定変更(※[File]→[Project Structure...])。SDKの設定、Compiler Output先の設定(※プロジェクト直下のout/フォルダと指定)等が必要となる。

  • この時点でそのまま実行させると、『パッケージmodelsが存在しません』と怒られてしまう。パッケージ自体はあるのだが、中にクラスファイルが存在していないのが原因らしい。ひとまず適当なクラスを作成すれば起動出来るようになる。


  • AWS SDKを利用する際の認証ファイル及び必要な値の設定。この辺りのクラスファイルを使えば、『クラスパスに所定のファイル置いておけば自動で読み込むよ』という感じだったのだが、Playframeworkのプロジェクト(構成)では何か上手いこと読み込んでくれなかった(何か設定必要だったのかな?)
  • なので、Playframeworkの仕組みを普通に使うことにします。 conf/application.conf ファイルに設定を追記。
# AWS SDK Settings.
aws.access.key=xxxxxxxxxxxxxxxxxxxx
aws.secret.key=yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
aws.default.region=ap-northeast-1
  • 以下の形で読み込み。
System.out.println("AWS_ACCESS_KEY:" + Play.configuration.getProperty("aws.access.key"));
System.out.println("AWS_SECRET_KEY:" + Play.configuration.getProperty("aws.secret.key"));
System.out.println("AWS_DEF_REGION:" + Play.configuration.getProperty("aws.default.region"));


Play2系やもうちょっと込み入った構成も適宜追記して行きたいところ。