Spring BootのWebアプリをPaaSで動かすとき、「手軽」というのを理由にHerokuやCloud Foundry(PWAなど)をメインに利用してきました。しかし、先日Microsoft Azureを調べていたら、App Serviceに簡単にデプロイできるよ~という公式ドキュメントを見つけたので試してみました。
上記ドキュメントよりシンプルな手順でデプロイしたのでまとめます。なお、主な手順の違いは以下です。
- Spring Initializrベース
- warではなくjarのままデプロイ
- tomcatの依存性は追加しない
- SpringBootServletInitializerの継承を使わない
コードはこちら。
https://github.com/kikutaro/AzureSpringBoot
開発環境
- Windows 10 Pro 1803(64bit)
- JDK 8u152
- Visual Studio Code 1.27.1
手順
Spring Bootのプロジェクト作成
Visual Studio Codeの拡張機能にある「Spring Initializr Java Support」を使って作成します。
MSのドキュメントはMavenベースなので、**「Spring Initializr: Generate a Maven Project」**を選択
GroupIdを入力。「tech.kikutaro」としました。
ArtifactIdを入力。「azurespringboot」としました。
以上で完了です。保存すると以下のダイアログが表示されます。「Open it」で開きます。
動作確認
Azureにデプロイする前に簡単なコードを書いて手元で動作確認します。ここではRESTのGETで「Hello, Azure!」と返すだけのコードにしました。
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@RestController
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
@GetMapping("/hello")
public String hello() {
return "Hello, Azure!";
}
}
起動を確認します。
.\mvnw.cmd clean package
.\mvnw.cmd spring-boot:run
ローカル環境へアクセスして動作確認できたらOKです。
Azureへデプロイする準備
MSさんのドキュメントでは、packagingをwarに変えたり、tomcatの依存を追加したり、SpringBootServletInitializerを継承したりと、jettyなど他のServletでも動くようにするための工夫をしていますが、今回は特にこの辺を変更せずに進めました。
本当は以下の設定も不要ですが、デプロイしたアプリのURLが衝突しないようにするために今回は追加しました。
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<!-- add from -->
<maven.build.timestamp.format>yyyyMMddHHmm</maven.build.timestamp.format>
<!-- add to -->
</properties>
azure-webapp-maven-pluginの設定を追加します。ドキュメントには「」とあります。
なお、最初ドキュメントのまま1.1.0を使って、deploymentTypeをjarにしてみたらエラーになりました。deploymentTypeがjarに対応していない模様です。
最新の1.4.0にしたら問題なくjarが指定できました。
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!-- add from -->
<plugin>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-webapp-maven-plugin</artifactId>
<version>1.4.0</version>
<configuration>
<resourceGroup>maven-projects</resourceGroup>
<appName>${project.artifactId}-${maven.build.timestamp}</appName>
<region>westus</region>
<javaVersion>1.8</javaVersion>
<deploymentType>jar</deploymentType>
</configuration>
</plugin>
<!-- add to -->
</plugins>
</build>
Azureへデプロイ
デプロイの前にAzure CLIをインストールしました。
Azure CLIでログインすると、ブラウザが自動起動するのでログイン画面が表示されます。ユーザ名とパスワードを入れてログインします。
az login
あとはデプロイするだけです。
.\mvnw.cmd clean package
.\mvnw.cmd azure-webapp:deploy
成功したらAzureのApp Serviceを開いて、デプロイされたアプリケーションを確認します。
アプリケーションを選択したら右上に表示されているURLのリンクをクリックすると作成したページが開けます。
動いた!
細かく手順を書いたので長くみえますが、Herokuなどにデプロイするのと同じくらい手軽でした。