swelldesign

Webデザイン HTML Javascript Jqueryなどに関する解決策をメモとして紹介するブログです。

Playframework2.3.9をAWS環境で快適に運用する(2)

前回に引き続き、Playframework2.3.9を利用して開発したアプリをAWS環境で快適に運用する方法を記載いしていきたいと思います。

  1.  VPC+RDSを利用したElasticBeanstalkを稼働する
  2. 開発したアプリをElasticBeanstalkで動くようにdistする
  3. 開発したアプリをElasticBeanstalkにデプロイする

1.については前回をお話ししたので今回は2, 3についてお話していきたいと思います。

 

まず、Playframework2.3.9で開発したアプリを稼働できる状態に出力する方法です。

ProductionDist

公式ページにも記載されております通りプロジェクト直下で以下を実行

activator dist

すると以下のようなファイルが出力される。

target\universal\[Project名]-1.0-SNAPSHOT.zip

このままではElastic Beanstalk上では動かないので下記に従い、zipファイルを生成しなおす。

docs.aws.amazon.com

 

簡単に説明するとzipファイルを解凍して「Procfile」を下記のような内容で準備し、直下に配置し再度zipで固める

web: sh bin/[Project名]

この時、オプションとして以下を付け加えてあげることでElasticBeanstalk上でスマートに動くようになる。

-Dhttp.port

ElasticBeanstalkのウェブサーバ(java)で環境を作成した場合、HTTPサーバ(nginx)から接続されるポート番号はデフォルト5000のため起動オプションとして設定する。当然nginxの設定をPlayframeworkのデファルト9000に合わせてやることでも対応は可能

-Dconfig.file

データベースの接続先などテスト環境と本番環境で変更したいものはElasticBeanstalkの環境変数として定義して読み込ませたい場合、通常の開発で利用している定義ファイルを拡張して環境変数を利用するよう起動オプションとして設定する。

-Duser.timezone

ElasticBeanstalkで起動されるEC2は日本時間ではないため、Javaの標準時間を利用しようとすると時間がずれてしまい都合が悪い場合があるのでタイムゾーンを指定するための起動オプションを設定する。

 

最終的には下記のような起動シェルとなる

web: sh [Project名] -Dhttp.port=5000 -Dconfig.file=/var/app/current/bin/ebenv.conf -Duser.timezone=Asia/Tokyo

 

定義ファイルの拡張についてもう少し触れておくと、通常playframeworkの開発で利用している定義ファイル「application.conf」を拡張する形で下記のようなファイルを「bin/ebenv.conf」として作成する(名前やパスは任意)

include "application.conf"
db.default.url=${RDS_URL}
db.default.user=${RDS_USER}
db.default.password=${RDS_PASSWORD}

でもって${RDS_URL}などはElasticBeanstalkの環境変数として下記の要領で設定すると、同じアーカイブを利用して別の環境で稼働することが可能となる。

 

f:id:swelldesign:20151102134953p:plain

 

f:id:swelldesign:20151102135123p:plain

 

後は環境を作成して「アップロードとデプロイ」を行えばOK!

 

おまけ、環境を作成するとSSH接続がフルオープンになってしまい毎回セキュリティグループを更新する必要があるので、以下のようにしておくとよい。

前述のzipにおいて「.ebextensions」フォルダを作成し起動時に以下のようなリソースプロパティを定義しておく。下の例ではプライベートアドレスからのみ22番ポートが接続可能となる。

※よりセキュアにするためには環境作成時、キーペアを指定しないでSSH接続を閉じることもできる

option_settings:
  - namespace:  aws:autoscaling:launchconfiguration
    option_name: SSHSourceRestriction
    value: tcp, 22, 22, 10.0.0.0/16

 

docs.aws.amazon.com

 

他にも色々出来るようだが、今回はここまでとします。

リソースプロパティは以下を参照(参考まで)

 

j.k