normalian blog

Let's talk about Microsoft Azure, ASP.NET and Java!

Eclipse を利用して Spring Boot アプリを Microsoft Azure にデプロイする

既に id:okazuki さんが Spring Bootを使ってHello world(Thymeleafの使用からwar化してAzureデプロイまで) でまとめている情報と一部重複するが、Spring Boot のアプリケーションを Microsoft Azure にデプロイするまでの手順を紹介する。

まず、前提として Spring Boot の公式ドキュメント にも記載があるが、 Spring Boot には以下 2 パターンの実行形式が存在する。

  • 組み込み Tomcat を含むポータブル実行形式の jar として稼働する
  • war 形式のファイルとして作成し、通常通り Tomcat にデプロイする

id:okazuki さんは両方の形式を試され、Microsoft Azure の WebApps を利用した Spring Boot の稼働方法だ。私の記事では、Spring Boot アプリを Eclipse Plugin を利用して Worker ロールにデプロイする方法を紹介する。

Spring Boot アプリの作成

簡単なサンプルは id:okazuki さんの記事を見ながらが確実だと思うが、Spring Boot の Quick Start サンプルを参考にアプリケーションを作成して Spring Boot の jar を war に変更する手順 を確認すれば対応可能だ。念のため以下にアプリケーションの情報を記載する。

<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>
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 ボタンを押下する。
f:id:waritohutsu:20150715183108p:plain

Server Configuration から Deploy my local server を選択し、ローカルに存在する Tomcat を選択する( ROOT フォルダ削除済みのものを選択すること )。
f:id:waritohutsu:20150715183120p:plain

既存の HelloWorld.war を削除し、事前に用意した Spring Boot の ROOT.war を選択する。この際、ダイアログからエラーメッセージが表示される場合があるが無視しても問題ない。
f:id:waritohutsu:20150715183135p:plain

以上を完了後、Spring Boot のアプリケーションを 右クリックから Azure > Deploy to Azure Cloud を選択してウィザードに従ってデプロイすれば手順は完了だ。以下の画面が表示されれば完了だ。
f:id:waritohutsu:20150715183145p:plain