LoginSignup
1
0

More than 3 years have passed since last update.

JSP/ServletアプリケーションをAzure WebApps Tomcatの複数コンテキストにデプロイする

Posted at

JSP/ServletアプリケーションをAzure WebApps Tomcatの複数コンテキストにデプロイする

前回は Spring Boot アプリケーション を Azure WebApps にデプロイしたわけですが、そんなモダンなフレームワークなんか使ってない場合も多いと思います。というわけで今回は、世の中で多く稼働しているであろう Tomcat 上で動くJSP/ServletアプリケーションをAzure WebAppsにデプロイするポイントなどを解説します。

Tomcatですので複数のWebアプリケーション (war) をデプロイできます。単純にルートコンテキストにWebアプリケーションをデプロイするのは簡単なのですが、複数のコンテキストにWebアプリケーションをデプロイしようとするとちょっとしたコツが必要なので、そこを解説してみます。

実は2年ほど前にも一度調べていて、以下に備忘録代わりのサンプルを置いてあります。このサンプルはこのままで動きますが、 Maven webapps pluginのバージョンを最新にすると動かなくなります。

m-moris/azure-java-sample-howto-deploy-webapps: How to deploy webapps with java

その際にエラーがでるので、それを元にググりまくると解決策がわかるのですが、あとでリンクする文書含めてきちんと説明されてないなという印象です。

プロジェクトの準備

MavenでシンプルなWebアプリケーションを作成します。index.jsp のみですが、挙動を確認するだけですので、これで十分でしょう。

mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-webapp -DarchetypeVersion=1.4

コンテキストパスを表示するようにだけ修正しておきます。

    <body>
        <h1>Hello Azure!!</h1>
        <h2> ContextPath = ${pageContext.request.contextPath} </h2>
    </body>

ルートコンテキストへのデプロイ(なにも設定しない場合)

前回の記事と同じくWebAppの構成をします。ここでは、Linux/Java11/Tomcat9 にします。

mvn com.microsoft.azure:azure-webapp-maven-plugin:1.13.0:config

リージョンを japaneastに修正してデプロイします。

mvn clean package azure-webapp:deploy

ブラウザ確認すると、ルートコンテキストにデプロイされており、 Kudu(※)で確認すると app.war/home/site/wwwroot にデプロイされています。ここに app.war があると、それがルートコンテキストにデプロイされたことになるようです。

ブラウザでのアクセス

image.png

Kudu

image.png

罠ではあるのですが、この状態になると後述する手順で正しくコンテキストパス毎にデプロイしても、正しく動作してくれません。 /home/site/wwwroot にある app.war が何やら邪魔しているくさい(どういう原理?)。KudoからSSHでapp.warを消すと正しく動作するので、ここにapp.warがあることがなにやら関係している臭いです。

※ WebAppsの管理コンソール的なもので、ポータルから高度なツールで起動できる。WebAppsが動いているVMの中身を参照できるが、操作はできない。

正しくルートコンテキストにデプロイする

実は <targetPath> 要素というものがあり、これを指定することで希望するロケーションにデプロイできます。

以下のサンプルのように <targetPath> 要素でデプロイ先を指定できるので、webapps/ 配下に ROOT.war にデプロイすればルートコンテキストになります。

 <build> 
    <finalName>ROOT</finalName>   <!-- ※ -->
    <plugins> 
      <plugin> 
        <groupId>com.microsoft.azure</groupId>  
        <artifactId>azure-webapp-maven-plugin</artifactId>  
        <version>1.13.0</version>  
        <configuration> 
          <schemaVersion>v2</schemaVersion>  
          <subscriptionId>xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</subscriptionId>  
          <resourceGroup>sample-jsp-88888</resourceGroup>  
          <appName>sample-jsp-88888</appName>  
          <pricingTier>B2</pricingTier>  
          <region>japaneast</region>  
          <runtime> 
            <os>Linux</os>  
            <javaVersion>Java 11</javaVersion>  
            <webContainer>Tomcat 9.0</webContainer> 
          </runtime>  
          <deployment> 
            <resources> 
              <resource> 
                <directory>${project.basedir}/target</directory>  
                 <targetPath>webapps/${project.build.finalName}</targetPath> <!-- ※ -->
                <includes> 
                  <include>*.war</include> 
                </includes> 
              </resource> 
            </resources> 
          </deployment> 
        </configuration> 
      </plugin> 
    </plugins> 
  </build> 

Kuduで参照すると、webapps/ROOT に展開されている事が分ります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/34017/5ec5ae5a-4ec9-a38a-26fd-64bb4da2602f.png

ブラウザからもアクセスできます。

image.png

次に ROOT<finalName>sample</finalName> にでも変更してデプロイしてみましょう。

再びKuduで確認すると sampleが展開されていることが確認できます。

image.png

ブラウザからも正しくアクセスできることが確認できます。

image.png

まとめ

<targetPath>を指定すれば正しく複数Webアプリケーションをデプロイできることが確認できました。あまり丁寧に解説しているドキュメントを見たことがないので、はまっている人の一助になればと。

一応、このあたりに記述はあるのですが、ちっさすぎて見逃しちゃいますよねぇ。

また、ここにのサンプルにも記述がありますが、Pluginバージョンが古いので注意が必要です。

さらに補足

プラットフォームがWindows の場合も同じかと思いますが、昔検証したときは Windows版のTomcatですと、war を展開しない仕様だったり、微妙にLinuxの場合と設定が違ったりもしたのでちょっと注意が必要です。時間があったら、後で確認するかもしれませんが。

ではでは。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0