ec2のmicroインスタンスでPlay!2.1.1を動かす。
play frameworkに関するのslideshare(Play2.0+Javaでサービスを本番稼働させた話 #play_ja)を見ててそうそうと自分もハマった部分があったので、自分なりの解決策を。
問題
Amazon EC2 microでPlay!2.0が起動しない。 java -‐Xms512M -‐Xmx1536M でPlay!2.0はデフォルト起動される
- --Xms512M:初期ヒープサイズを512Mに設定
- --Xmx1536M:最大ヒープサイズを1536Mに設定
- microインスタンスのメモリは613 Mでswapがない
解決策
cloud-initのYAMLをgistに書いてみました。
ec2のマイクロインスタンスでplayを動かす準備 ・時間の設定 ・文字コードの設定 ・swap領域の作成
cloud-initを利用して、インスタンス立ち上げ時にswapを作るという方法です。
swapの作成方法はAdding swap to an EC2 micro instance on Amazonを参考にしました。
いつものスポットインスタンスの起動スクリプトに組み込んで使ってます。
#!/bin/bash AMI='ami-xxxxxxxx'; INSTANCE_TYPE='t1.micro'; PRICE='.003'; SUBNET='subnet-xxxxxxxx'; KEYPAIR='xxxxxxxxxx'; SECURITYGROUP='sg-xxxxxxxx'; DATA='#cloud-config repo_upgrade: all packages: - java-devel - git runcmd: - [cp, /usr/share/zoneinfo/Asia/Tokyo, /etc/localtime] - [sed, -i, 's/LANG="en_US.UTF-8"/LANG="ja_JP.UTF-8"/', /etc/sysconfig/i18n] - [dd, if=/dev/zero, of=/var/swapfile, bs=1M, count=1024] - [mkswap, /var/swapfile] - [swapon, /var/swapfile] '; #スポットインスタンスのリクエストを行う SIR_ID=` ec2rsi $AMI -t $INSTANCE_TYPE -p $PRICE -n 1 -r one-time -s $SUBNET -k $KEYPAIR -g $SECURITYGROUP -d "$DATA" | awk '{if(NR==1) print $2;}' ` #2分間待機 sleep 120 TMP_EC2=''; while true; do #ec2のインスタンス情報取得(スポットインスタンスのIDを指定) TMP_EC2=`ec2din --filter "spot-instance-request-id=$SIR_ID"`; if test ${#TMP_EC2} -gt 0 ; then #情報が取得できた場合 #インスタンス情報、ローカルIPの情報を取得する INSTANCE_ID=`echo $TMP_EC2 | awk '{ print $5 }'`; LOCAL_IP=`echo $TMP_EC2 | awk '{ print $52 }'`; #ループを抜ける break fi #30秒待機 sleep 30 done #IPアドレスを取得する EIP_OBJ=`ec2allocaddr -d vpc`; EIPALLOC=`echo $EIP_OBJ | awk '{ print $4 }'` GLOBAL_IP=`echo $EIP_OBJ | awk '{ print $2 }'` sleep 10 #IPアドレスをec2インスタンスに割り当てる EIPASSOC_OBJ=`ec2assocaddr -a $EIPALLOC -i $INSTANCE_ID -p $LOCAL_IP ` sleep 10 EIPASSOC=`echo $EIPASSOC_OBJ | awk '{ print $4}'` #結果出力 echo "[info]instance_id: $INSTANCE_ID"; echo "[info]globalId: $GLOBAL_IP"; echo "[info]eipassoc: $EIPASSOC"; echo "[info]eipalloc: $EIPALLOC"; echo "[example] ssh -i ${KEYPAIR}.pem ec2-user@${GLOBAL_IP} "; echo "[example] ec2disaddr -a $EIPASSOC ; ec2reladdr -a $EIPALLOC ; ec2kill $INSTANCE_ID ; "
なんだかんだいって、microインスタンスとsmallインスタンスには価格的な大きな壁があるので、 play framework2もmicroで使いたいです。 24h365d動かすならawsは少し高い気がしますが、実験はawsが手っ取り早いです。