Azure App Service On Linux Javaプレビュー

先日 Azure App Service on LinuxのJava対応プレビューが公開されました。

azure.microsoft.com

まあ他の言語と違って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.xmlpackagingwarにする。この際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

f:id:setoazusa:20180317162847p:plain

ブラウザーでアクセスし、デプロイが完了していることを確認します。

f:id:setoazusa:20180317162920p:plain

検証が終わったら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 Consolesshからコンソールに入ることができます。 Java(Tomcat)の場合は/home/LogFiles/Application/配下にログが出力されています。

参考

docs.microsoft.com docs.microsoft.com