Amazon Elastic Beanstalkで複数のwarファイルをアップロードする方法

| コメントをどうぞ

Amazon Elastic Beanstalk (以下 Beanstalk)では、javaアプリケーションを動かす時、warファイルをアップロードしてそのwarファイルをBeanstalkが自動的に展開してtomcatにデプロイしてくれます。 ただし、現在のBeanstalkではwarファイルは1つしかアップロードできません。 複数warファイルがあるアプリケーションをBeanstalk上で動かすのは無理なのかなーと思って色々調べたら、どうにか複数warファイルでもアプリケーションが動作する環境ができたので、その方法をまとめてみます。

ただし、公式の方法ではないので実際に試す時は注意して行なって下さい。

1.Beanstalkで利用可能なEC2インスタンスをAMIから作成する。

まずは、Beanstalkで使用するためのAMI(Amazon Machine Image)のベースになるインスタンスを作成します。

EC2のインスタンス作成時に下記画像のようにCommunity AMIsから「beanstalk」を検索し、beanstalk用のAMIからインスタンスを作成します。

2.Beanstalkで利用しているEC2インスタンスのRubyファイルを編集する。

インスタンスが作成されたら、ssh等でサーバーへログインします。

sshでログイン後に、下記コマンドでrubyファイルを編集します。このrubyファイルが、beanstalkでインスタンスを作成時に実行されて、インスタンス内のtomcatにアプリケーションをデプロイしています。

vi /opt/elasticbeanstalk/srv/hostmanager/lib/elasticbeanstalk/hostmanager/applications/tomcatapplication.rb

編集箇所1

/usr/bin/sudo /usr/bin/unzip -o -qq #{TomcatApplication.tomcat_deploy_dir}/application.war -d #{TomcatApplication.tomcat_webapps_dir}/ROOT


/usr/bin/sudo /usr/bin/unzip -o -qq #{TomcatApplication.tomcat_deploy_dir}/application.war -d #{TomcatApplication.tomcat_webapps_dir}/

編集箇所2

/usr/bin/sudo /bin/chown -R tomcat:elasticbeanstalk #{TomcatApplication.tomcat_webapps_dir}/ROOT

/usr/bin/sudo /bin/chown -R tomcat:elasticbeanstalk #{TomcatApplication.tomcat_webapps_dir}/*

編集箇所3

/usr/bin/sudo mv #{TomcatApplication.tomcat_deploy_dir}/application.war #{TomcatApplication.tomcat_webapps_dir}/ROOT.war

/usr/bin/sudo /usr/bin/unzip -o -qq #{TomcatApplication.tomcat_deploy_dir}/application.war -d #{TomcatApplication.tomcat_webapps_dir}/

編集後に、インスタンスをAMIとして保存します。

3.Warファイルを作成しBeanstalkでアプリケーションを作成する。

Beanstalkに複数のwarファイルをアップロードして複数のアプリケーションを立てる場合は、次のようなwarファイルを用意します。

application.war
├─appA.war
├─appB.war
└─appC.war

また、application.warに含まれている各warファイルのMETA-INFフォルダには、context.xmlを含めるようにして下さい。

次に、Beanstalkでアプリケーションを作成し、用意したwarファイルをbeanstalkのアプリケーションにアップロードします。

Beanstalkでのアプリケーション作成方法は下記URLなどを参考にして下さい。

http://www.atmarkit.co.jp/fjava/rensai4/devtool23/devtool23_1.html

アプリケーションを作成後しばらくすると、EC2のインスタンスが立ち上がりますが、この時点ではアップロードしたwarファイルは正常にデプロイされません。

Beanstalkでアプリケーションを作成する際、一番初めのデプロイではAMIを指定できずにデフォルトとインスタンスでアプリケーションを作成してしまうためです。

複数のwarを含んだアプリケーションをデプロイする場合は、一旦デフォルトのインスタンスで作成された後に、Beanstalk上の設定でAMIを指定する必要があります。

4.BeanstalkでAMIを指定する。

最後に、Beanstalkの「Edit Configuration」をクリックして設定画面を開き、

2で作成したAMIのIDを「Custom AMI ID」の欄に入力して「Apply Changes」で保存します。

しばらくすると3の最後で作成されたインスタンスが破棄され、設定したAMIで新しいインスタンスが起動します。

インスタンス起動後に

http://アプリケーション名.elasticbeanstalk.com/コンテキスト名

のコンテキスト名を変えると、各コンテキストへアクセスできます。

参考:https://forums.aws.amazon.com/thread.jspa?messageID=229121

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>