AzureのWeb AppはJavaのWebアプリも使えるが、公式に用意されているデプロイ方法はTomcatやJettyをコンテナとする方法のみ。でも、Spring BootではJarファイルを直接実行することもできるので、わざわざTomcatにデプロイするためのWarを作るのが面倒だと思っていた。

AzureのWeb AppはIISのWebサーバーを公開するものなので、 Tomcatを起動するためにもWeb.configのhttpPlatformHandler要素に特別な設定が必要で、 公式の方法はこの設定が入ったWeb.configが自動的に作られるもの。

このhttpPlatformHandler要素に、Spring Bootのjarファイルを実行するように書く方法を見つけた。↓のブログ記事にその方法が載っていた。

Deploy Java 8 Spring Boot API to Azure App Service

In addition to sbapi.jar file, we also need to add a web.config file to the deploy folder to tell API App Java home and command line to run the jar file.

Create a web.config file to the \deploy root (\deploy\web.config) and add the following content (modified from https://docs.microsoft.com/en-us/azure/app-service-web/web-sites-java-custom-upload):

<?xml version="1.0″ encoding="UTF-8″?>
<configuration>
  <system.webServer>
    <handlers>
      <add name="httpPlatformHandler" path="*" verb="*" modules="httpPlatformHandler" resourceType="Unspecified" />
    </handlers>
    <httpPlatform processPath="%JAVA_HOME%\bin\java.exe"
        arguments="-Djava.net.preferIPv4Stack=true -Dserver.port=%HTTP_PLATFORM_PORT% -jar &quot;%HOME%\site\wwwroot\webapps\sbapi.jar&quot;">
    </httpPlatform>
  </system.webServer>
</configuration>

これをちょっと書き換え、より単純に、ルートディレクトリにroot.jarという名前でJarファイルを置く形に変えてみた。
ファイルのリンク

<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
    <system.webServer>
        <handlers>
            <add name="httpPlatformHandler" path="*" verb="*" modules="httpPlatformHandler" resourceType="Unspecified" />
        </handlers>
        <httpPlatform processPath="%JAVA_HOME%\bin\java.exe"
            arguments="-Djava.net.preferIPv4Stack=true -Dserver.port=%HTTP_PLATFORM_PORT% -jar &quot;%HOME%\site\wwwroot\root.jar&quot;">
        </httpPlatform>
    </system.webServer>
</configuration>

デプロイ先のAzure Web Appを作るときは、まず最初は普通のWeb Appとして作り、その後からアプリケーションの設定のJavaバージョンを選んでJavaを実行できるようにした。

%JAVA_HOME%の場所はAzureのアプリケーション設定でのJavaバージョンにより変わる。そのため、一回 Java 8 に変えてから再起動が必要。

Java8に変えるとtomcatなどのコンテナを選択する必要がある。これは特に使わないので適当なものでよい。最新のTomcatなどにする。

wwwrootの下にtomcatのwebappsフォルダも作られるがこれは使わないので消しておく。 今回は web.config と root.jar のみとした。

HttpPlatformHandlerについてのTechNetの解説ページはここにあった。
HttpPlatformHandler を使用する