先日 Azure App Service on LinuxのJava対応プレビューが公開されました。
まあ他の言語と違ってJavaの場合は、(Azure上の)Windowsの環境にデプロイして動いているんだったらそれでよくね、という話もあるのですが、LinuxのPaaS上でJavaが動くとうれしいこともあるのでしょう。多分。
本エントリーでは、Spring Boot2.0のアプリケーションをAzure App Service on Linuxにデプロイしてみます。
デプロイするアプリケーションをWAR形式にする。
Azure App Service on Linuxで動かすにはWAR形式のデプロイが必要なので、Springのドキュメントに従って アプリケーションをWAR形式にします。Spring Initializrで作成されるアプリケーションからの変更点は
- アプリケーションで
org.springframework.boot.web.servlet.support.SpringBootServletInitializer
インターフェースのconfigure
メソッドを実装する
@SpringBootApplication public class BootOnAzureApplication extends SpringBootServletInitializer { public static void main(String[] args) { SpringApplication.run(BootOnAzureApplication.class, args); } @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { return builder.sources(BootOnAzureApplication.class); } }
pom.xml
のpackaging
をwar
にする。この際App Servceへのデプロイ向けのビルドではorg.springframework.boot:spring-boot-starter-tomcat
のscopeはprovided
にする
の二点です。コードの全体はGitHubに公開しています。
アプリケーションの作成
アプリケーションの作成はAzure CLIで行います。
# デプロイ用ユーザーの作成 > az webapp deployment user set --user-name azusa --password ****** # リソースグループの作成 > az group create --name myResourceGroup --location "Japan East"
サービスプランを作成するaz app serivice
コマンドの実行時に --is-linux
オプションを指定します。
> az appservice plan create --name myAppServicePlan --resource-group myResourceGroup --sku S1 --is-linux > az webapp create --name boot-on-azure --resource-group myResourceGroup --plan myAppServicePlan --runtime "TOMCAT|8.5-jre8"
デプロイ
WAR形式でデプロイするためのプロファイルでビルドします。
> mvn clean package -P webapps
デプロイはcurlコマンドで(アプリケーション名).scm.azurewebsites.net
にPOSTすることで行います。Windows上で開発している場合はWindows Subsystems for Linuxの出番です。
curl -X POST -u azusa --data-binary @"target/boot-on-azure.war" https://boot-on-azure.scm.azurewebsites.net/api/wardeploy
ブラウザーでアクセスし、デプロイが完了していることを確認します。
検証が終わったらaz group delete
コマンドでリソースを後片付けします。
> az group delete --name myResourceGroup Are you sure you want to perform this operation? (y/n): y >
ログを見るには
アプリケーション側の問題でデプロイが上手くいかない等の理由でアプリケーションのコンソールに入りたい場合は、https://(アプリケーション名).scm.azurewebsites.net/
にログインします。
App Service On Linuxの場合はメニューのDebug Console
→ssh
からコンソールに入ることができます。 Java(Tomcat)の場合は/home/LogFiles/Application/
配下にログが出力されています。