Groovy/Grape(Grab)でAWS利用環境を迅速に整える(為のコードメモ)

最近AWSを触るようになって、APIを扱う上で幾つか言語が選べるのですが、その中でJavaAPIをGroovyで扱えるようにしとくと何かと便利なのかな〜と思い、利用ライブラリを諸々整えるのもG*システム(Grapes/Grab)を使えば環境整備も楽だよね、という事でその辺の実行手順をメモ。

まぁ、AWSに限った話でも無いですねw Grapes/Grabのメモと言った方が良いのかも。動作確認はAWS EC2上で行なっております。

  • まずは適当にEC2インスタンスを作成、ログイン。ここでは『Amazon Linux AMI 2013.03.1』を選択、EIPの割り当ても行わずkey-pairを使ってログインしています。
$ ssh -i (key-pair-file).pem ec2-user@ec2-xx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com
The authenticity of host 'ec2-xx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com (xx.xxx.xxx.xxx)' can't be established.
RSA key fingerprint is xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'ec2-xx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com,xx.xxx.xxx.xxx' (RSA) to the list of known hosts.

       __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-ami/2013.03-release-notes/
$ 
  • Java及びGroovyの導入。上記OSを選択して作成した場合、Javaはひとまず入っている(1.6だけど)のでここは更新割愛。Groovyの導入だけを行なっています。
$ java -version
java version "1.6.0_24"
OpenJDK Runtime Environment (IcedTea6 1.11.11) (amazon-61.1.11.11.53.amzn1-x86_64)
OpenJDK 64-Bit Server VM (build 20.0-b12, mixed mode)
$
$ sudo wget http://dist.groovy.codehaus.org/distributions/groovy-binary-2.1.3.zip
$ sudo unzip groovy-binary-2.1.3.zip
$ export GROOVY_HOME=/home/ec2-user/groovy-2.1.3
$ export PATH=$PATH:$GROOVY_HOME/bin
$ groovy -version
Groovy Version: 2.1.3 JVM: 1.6.0_24 Vendor: Sun Microsystems Inc. OS: Linux
  • 実行コード。以前個人で色々試していた時はこの段階で上手いこと動いてくれなかったんですが、今日参加したYokohama.groovyで色々聞いて問題無く動かす事が出来ました。@Grapes/@Grabの記述だけじゃダメなんですねぇ...
@Grapes([
    @Grab(group='com.amazonaws', module='aws-java-sdk', version='1.4.3'),
    @Grab(group='org.twitter4j', module='twitter4j-core', version='3.0.3')
])
import com.amazonaws.services.s3.AmazonS3Client;
println 'hello!'
  • @Grapes/@Grabコマンドで依存性解決されたライブラリは、利用ユーザフォルダの.groovy配下に格納されるようです。
$ pwd
/home/ec2-user/.groovy/grapes
$ ll
合計 28
drwxrwxr-x 3 ec2-user ec2-user 4096  5月 19 08:49 2013 com.amazonaws
drwxrwxr-x 3 ec2-user ec2-user 4096  5月 19 08:50 2013 commons-codec
drwxrwxr-x 3 ec2-user ec2-user 4096  5月 19 08:49 2013 commons-logging
drwxrwxr-x 3 ec2-user ec2-user 4096  5月 19 08:49 2013 org.apache
drwxrwxr-x 3 ec2-user ec2-user 4096  5月 19 08:49 2013 org.apache.commons
drwxrwxr-x 7 ec2-user ec2-user 4096  5月 19 08:50 2013 org.apache.httpcomponents
drwxrwxr-x 4 ec2-user ec2-user 4096  5月 19 08:50 2013 org.codehaus.jackson
  • IntelliJ IDEAでも同様の記載で問題無く動きました。

(追記)IDEA上では、このままではGrapeで取り込んだ各種Jarファイルはまだ利用出来ません><; IDE上でのライブラリの追加が必要ですのでその手順を追記。

  • @Grapes/@Grabの箇所にカーソルを当てると、豆電球みたいなのがホバー表示されます。ここで[Grab the Artifacts]を選択。


  • すると、IDEAの方で自動的に各種ライブラリを取込み設定してくれます!これは楽ちん。


  • これでちゃんと取り込んだライブラリも認識してくれるようになりました。

比較的早い、揃っているAWSのJavaAPIをGroovyで補完効かせて(by IDEA)ささっと作成し、Linux OS上で環境を迅速に作成(by EC2&Grape等を用いてライブラリ依存関係も1発で解決)しながらCUIベースで処理実行...みたいな流れがこれでやりやすくなりそうです。