Azureの小ネタ (改)

~Azureネタを中心に、色々とその他の技術的なことなどを~

色々なAzure WebApps に Spring Boot アプリケーションをデプロイする方法

Azure WebAppsへのデプロイは azure-webapp-maven-plugin でやっているのですが、いつも色々細かい設定を忘れがちなので、備忘録にまとめました。

github.com

以下README転載気味

色々なAzure WebApps に Spring Boot アプリケーションをデプロイする方法

Azure WebApps は複数のOS(Windows、Linux)と複数のアプリケーションコンテナをサポートしています。それぞれのAzure WebAppsにデプロイする最小コードのサンプルです。

以下の組み合わせを想定しています

  • Windows

    • Jetty (jar)
    • Tomcat 8.5 (war)
  • Linux

    • JRE (jar)
    • Tomcat 8.5 (war)

最小サンプルは、JSON を返却する RestControllerです。

デプロイ方法

pom.xml(共通)

azure-webapp-maven-plugin を利用しています。Web Appsの構成は pom.xml に記述されています。mvn azure-webapp:config で再構成が可能です。またconfiguration 要素を削除してから実行すると、初期設定可能です。

最小限、各々の pom.xml の以下を書き換えてください。

appName 要素 は、 Azure WebApps のドメインです。Azure全体で一意な必要があるため、そこだけは書き換える必要があります。

resourceGroupappServicePlanName また、pricingTierregion は任意に書き換えればよいです。

各要素の詳細は、 Maven Plugin for Azure App Service | Microsoft Docs のリファレンスを参照のこと。

サブスクリプション

az コマンドであらかじめAzureサブスクリプションにログインする必要があります。サブスクリプションが複数ある場合は、一覧の IsDefaultTrue なものに作られますので、デフォルトに注意してください。

az account login
az account list -o table 

実際の操作

linux jre8

WebApps on Linux に Spring Boot の jar をデプロイするサンプルです。

mvn clean package azure-webapp:deploy

とAzure上にリソースが作成され、デプロイされます。リソースが作成済みの場合はそれが利用されます。ブラウザや curl でURLを叩くとJSONのレスポンスが取得できます。

curl https://foobar.azurewebsites.net/hello?name=world

Windows jetty

WebApps on Windows に Spring Boot の jar をデプロイするサンプルです。コンテナがJettyになっています。

オペレーションはlinux jre8 と同様です。

Linux Tomcat 8.5

WebApps on Linux に Spring Boot の war をデプロイするサンプルです。jar をデプロイする場合との差分を説明します。

SpringBootServletInitializer を継承します。これがないとデプロイは成功しますが起動しません。 war からSpring Bootアプリケーションを起動するときには必須です。それに加えconfigure メソッドをオーバーライドします(しなくても実行できたけど)。

また、pom.xml<packaging>war</packageing> を定義します。詳細はサンプルを参照してください。

以下でデプロイします。spring boot plugin を削除するのが面倒だったので(ローカルでrunしたかったので)、リパッケージをスキップしてます。

mvn clean package azure-webapp:deploy -Dspring-boot.repackage.skip=true

サンプルでは sample コンテキストにデプロイするようになっています。ROOTコンテキストにデプロイしたい場合は、configuration 配下の以下の要素を削除してください。

<targetPath>${project.build.finalName}</targetPath>

curl を実行してレスポンスを確認します。

curl https://foobar.azurewebsites.net/sample/hello

Tomcatですとデプロイしてからレスポンスが返ってくるまで少し時間がかかりるみたいです。

Windows Tomcat 8.5

Linux の場合と同じです。

以上