Spring Boot のアプリを Azure App Service にデプロイしてみた

2022/01/12に公開

ちょっと Java することになったので、手元で作った Java のアプリを手元から Azure App Service の Web App にデプロイしてみようと思います。

Spring Boot のアプリの作成

とりあえずハローワールドでも動けばいいのでテンプレから行きましょう。
以下の Spring Quickstart Guide にしたがって spring initializr を使ってプロジェクトを新規作成します。

https://spring.io/quickstart

Quickstart にしたがって Spring Web だけ追加しておきました。

そして Visual Studio Code で開いて DemoApplication.java に以下のコードを足してハローワールドを作りました。

DemoApplication.java
package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
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(@RequestParam(value = "name", defaultValue = "World") String name) {
		return String.format("Hello %s!", name);
	}
}

起動してさくっとエンドポイント叩いてみるとハローワールドが動きました。よかったよかった。

最初は、クラスに @RestController を追加するのを忘れていて 404 NotFound になって「あれ?」ってなっていました。

Azure へのデプロイ

デプロイ先の Web App は適当に作っておきます。
今回は OS は Linux でランタイムスタックで Java 11 を選んで Web コンテナに Java SE を選んでおきました。

デプロイ方法は、こちらのドキュメントを参考にやっていこうとしたのですが、ここの ./mvnw azure-webapp:config コマンドで作成した Web App が認識されないので諦めました…。

https://docs.microsoft.com/ja-jp/azure/app-service/quickstart-java?tabs=tomcat&pivots=platform-linux

ということで、以下の README.md を参考にやっていこうと思います。

https://github.com/microsoft/azure-maven-plugins/blob/develop/azure-webapp-maven-plugin/README.md

README.md を参考に pom.xml の build タグの下の plugins タグの下に以下のような plugin タグを追加しました。

pom.xml
<plugin>
	<groupId>com.microsoft.azure</groupId>
	<artifactId>azure-webapp-maven-plugin</artifactId>
	<version>2.3.0</version>
	<configuration>
		<subscriptionId>xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx</subscriptionId>
		<resourceGroup>rg-java</resourceGroup>
		<appName>app-kaotajava</appName>
		<pricingTier>P1v2</pricingTier>
		<region>japaneast</region>
		<runtime>
			<os>Linux</os>
			<webContainer>Java SE</webContainer>
			<javaVersion>Java 11</javaVersion>
		</runtime>
		<deployment>
			<resources>
				<resource>
					<type>jar</type>
					<directory>${project.basedir}/target</directory>
					<includes>
						<include>*.jar</include>
					</includes>
				</resource>
			</resources>
		</deployment>
	</configuration>
</plugin>

pom.xml の構成が終わったので jar ファイルを生成してデプロイを行います。

> ./mvnw package
> .\mvnw azure-webapp:deploy

実行すると以下のようなログが出ます。

[INFO] Scanning for projects...
[INFO] 
[INFO] --------------------------< com.example:demo >--------------------------
[INFO] Building demo 0.0.1-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- azure-webapp-maven-plugin:2.3.0:deploy (default-cli) @ demo ---
Auth type: AZURE_CLI
Default subscription: Kazuki Ota(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)
Username: kaota@microsoft.com
[INFO] Subscription: Kazuki Ota(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)
[INFO] Updating target Web App app-kaotajava...
[INFO] Successfully updated Web App app-kaotajava.
[INFO] Trying to deploy external resources to app-kaotajava...
[INFO] Successfully deployed the resources to app-kaotajava
[INFO] Trying to deploy artifact to app-kaotajava...
[INFO] Deploying (C:\Labs\demo\target\demo-0.0.1-SNAPSHOT.jar)[jar]  ...
[INFO] Successfully deployed the artifact to https://app-kaotajava.azurewebsites.net
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  44.164 s
[INFO] Finished at: 2022-01-12T12:13:16+09:00
[INFO] ------------------------------------------------------------------------

デプロイが出来たので、エンドポイントを叩いてみましょう。

ばっちり動いてますね!

最近の Java の DB への接続の管理はどうなってるんだろう?アプリ内にコネクションプーリングを持つ感じなんだろうか?私が Java をやってた頃は Tomcat などのアプリケーション サーバーに設定をしていたと思うんですが…。

Microsoft (有志)

Discussion