Spring Boot のアプリを Azure App Service にデプロイしてみた
ちょっと Java することになったので、手元で作った Java のアプリを手元から Azure App Service の Web App にデプロイしてみようと思います。
Spring Boot のアプリの作成
とりあえずハローワールドでも動けばいいのでテンプレから行きましょう。
以下の Spring Quickstart Guide にしたがって spring initializr を使ってプロジェクトを新規作成します。
Quickstart にしたがって Spring Web だけ追加しておきました。
そして Visual Studio Code で開いて 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 が認識されないので諦めました…。
ということで、以下の README.md を参考にやっていこうと思います。
README.md を参考に pom.xml の build タグの下の plugins タグの下に以下のような plugin タグを追加しました。
<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 などのアプリケーション サーバーに設定をしていたと思うんですが…。
Discussion