Eclipse を利用して Spring Boot アプリを Microsoft Azure にデプロイする
既に id:okazuki さんが Spring Bootを使ってHello world(Thymeleafの使用からwar化してAzureデプロイまで) でまとめている情報と一部重複するが、Spring Boot のアプリケーションを Microsoft Azure にデプロイするまでの手順を紹介する。
まず、前提として Spring Boot の公式ドキュメント にも記載があるが、 Spring Boot には以下 2 パターンの実行形式が存在する。
id:okazuki さんは両方の形式を試され、Microsoft Azure の WebApps を利用した Spring Boot の稼働方法だ。私の記事では、Spring Boot アプリを Eclipse Plugin を利用して Worker ロールにデプロイする方法を紹介する。
Spring Boot アプリの作成
簡単なサンプルは id:okazuki さんの記事を見ながらが確実だと思うが、Spring Boot の Quick Start サンプルを参考にアプリケーションを作成して Spring Boot の jar を war に変更する手順 を確認すれば対応可能だ。念のため以下にアプリケーションの情報を記載する。
- pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.mydomain</groupId> <artifactId>HelloSpringboot</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <name>HelloSpringboot</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.2.5.RELEASE</version> </parent> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>1.7</source> <target>1.7</target> </configuration> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> </project>
- Application.java
package com.mydomain.HelloSpringboot; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.context.web.SpringBootServletInitializer; @SpringBootApplication public class Application extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure( SpringApplicationBuilder application) { return application.sources(Application.class); } public static void main(String[] args) throws Exception { SpringApplication.run(Application.class, args); } }
- SampleController.java
package com.mydomain.HelloSpringboot; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class SampleController { @RequestMapping("/") public String home() { return "Spring Boot での日本語文字列返し。(/ω\)イヤン"; } }
上記のアプリケーションは Tomcat 7 以上であれば動作可能だ( Spring Boot は Servlet 3 系の API を利用しているため、Tomcat 7 以上が必要)。まずはローカルで動作を確認をお勧めする。
Microsoft Azure(Worker ロール)上にデプロイ
Azure Toolkit for Eclipse を利用して Spring Boot アプリケーションを Worker ロールにデプロイする。新規に Azure Deployment Project を作成する。事前準備として以下を行うこと。
- Spring Boot のプロジェクトに対して mvn package を辞しして war ファイルを作成し、ROOT.war にリネームする
- ローカルに Tomcat ( v7 以上)をダウンロードし、%TOMCAT_HOME%\webapps\ROOT フォルダを削除する(削除しないと Tomcat デフォルトの ROOT が表示されてしまう
次にプロジェクトを右クリックしてプロパティを選択し、Azure > Roles から既存の WorkerRole1 を選択して Edit ボタンを押下する。
Server Configuration から Deploy my local server を選択し、ローカルに存在する Tomcat を選択する( ROOT フォルダ削除済みのものを選択すること )。
既存の HelloWorld.war を削除し、事前に用意した Spring Boot の ROOT.war を選択する。この際、ダイアログからエラーメッセージが表示される場合があるが無視しても問題ない。
以上を完了後、Spring Boot のアプリケーションを 右クリックから Azure > Deploy to Azure Cloud を選択してウィザードに従ってデプロイすれば手順は完了だ。以下の画面が表示されれば完了だ。