AWS Elastic Beanstalkとちょっと試してみた
http://aws.typepad.com/aws_japan/2011/01/introducing-amazon-beanstalk.html
WARをアップロードして動かすことができるというので、Servletが1つだけのWebアプリを動かしてみた。ヘルスチェックでちょっとハマったので、覚え書き。
Servletのコードはこんな感じ。
public class TestServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.getWriter().println("Hello, world!!"); response.getWriter().println("ServerInfo: " + getServletInfo()); ServletContext sc = getServletContext(); response.getWriter().println("API version: " + sc.getMajorVersion() + "." + sc.getMinorVersion()); response.getWriter().println("Servlet name: " + getServletConfig().getServletName()); } }
このServletを含んだwarファイルを作成して、AWS Management Consoleからアップロードして動かしてみる。しばらく待ったあと、なんだかうまく動いてないようだ。ログを見ると「Environment health has been set to RED」と表示されている。
色々確認してみたが、どうやらヘルスチェックで失敗しているらしい。
Basic Health Reporting - AWS Elastic Beanstalk
デフォルトでは、アプリケーションルート(http://<任意>.elasticbeanstalk.com/)へのHTTP HEADに反応しないと、アプリケーションが動いていないと判断されるらしい。
web.xmlのservlet-mappingが下記のようになっていたので、アプリケーションルートへのHEADに反応できなかったのが原因らしい。
<servlet-mapping> <servlet-name>TestServlet</servlet-name> <url-pattern>/TestServlet</url-pattern> </servlet-mapping>
対策としては、下記のいずれか。
- ヘルスチェックのURLを変える
- Edit Configuration -> Load Balancer -> EC2 Instance Health Check -> Application Health Check URL を /TestServlet に変える
- アプリケーションルートへのHTTP HEADに反応するようにアプリケーションを直す
1つめの対策を取ったら、無事Environment healthがGREENに変わった。
http://<任意>.elasticbeanstalk.com/TestServlet でブラウザを開いて、動いていることを確認できた。