しばやん雑記

Azure Serverless とメイドさんが大好きなフリーランスのプログラマーのブログ

Microsoft Build of OpenJDK を Azure App Service にインストールして動かしてみた

ここ数日盛り上がり気味の Microsoft がビルドした OpenJDK ですが、現状の App Service はバージョンによっては Oracle と Azul が混在しているのが解消されるかと期待しています。

まだ Container Image が公開されていないので、アプリケーションで使うには若干手間がかかりますが Cloud Shell にはインストール済みらしいです。

予想では Preview が取れて正式版になると Early Access として App Service で使えるようになる気がしています。Early Access 自体は .NET 5 の時に使われましたが、任意のランタイム / SDK で利用可能な機能です。

暫く待てば使えるようになると思いますが、事前に試しておきたい人もいるはずなので App Service で利用する比較的簡単な方法を紹介しておきます。

公式サイトで公開されている Windows 向けのバイナリは zip と msi が用意されていますが、App Service では当然ながら msi を使ったインストールは行えないので、zip 版を使います。

こういったサポート対象外のランタイムを Windows 版の App Service で使う場合には、Site Extension としてインストールするものと相場が決まっています。

もしかしたら今後、公式で Site Extension がリリースされるかもしれないので、今回は手動でのインストール方法を紹介します。.NET Runtime に関しては既に 6.0-preview3 が Site Extension として公開されています。

適当に Kudu の Debug Console を立ち上げて、以下のようなコマンドを叩き込めば完了です。

set PATH=%PATH%;%SYSTEMDRIVE%\7zip
mkdir SiteExtensions\Java
cd SiteExtensions\Java
curl -LOs https://aka.ms/download-jdk/microsoft-jdk-11.0.10.9-windows-x64.zip
7za x microsoft-jdk-11.0.10.9-windows-x64.zip
rm microsoft-jdk-11.0.10.9-windows-x64.zip

Windows 版の App Service には curl と 7zip が予めインストールされているので、こういった処理を行う場合には便利です。この時ディレクトリは D:\home\SiteExtensions\Java となっているはずです。

これで OpenJDK のインストールは完了なので、最後の仕上げとして JAVA_HOME 環境変数をインストールした OpenJDK 向けに変更します。環境変数を弄るために以下のような applicationHost.xdt を作成します。

<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <system.webServer>
    <runtime xdt:Transform="Insert">
      <environmentVariables>
        <add name="JAVA_HOME" value="%XDT_EXTENSIONPATH%\jdk-11.0.10+9" />
        <!--<add name="PATH" value="%XDT_EXTENSIONPATH%\jdk-11.0.10+9\bin;%PATH%" />-->
      </environmentVariables>
    </runtime>
  </system.webServer>
</configuration>

Java アプリケーションを動かす場合には JAVA_HOME 環境変数だけを変更すればよいのですが、Debug Console から java を叩くとシステム側のものが使われるので、必要に応じて PATH も変更します。

applicationHost.xdt を作成後に、App Service を再起動すると変更が反映されます。

f:id:shiba-yan:20210412193940p:plain

適当に Debug Console から java を叩くと、Oracle / Azul バージョンではなく Microsoft がビルドしたバージョンが使われていることが確認できます。

この時点で App Service にアクセスすると、デフォルトでデプロイされていたアプリケーションの表示が変わり、実行されている Java が Site Extension としてインストールしたものになっていることも確認できます。

f:id:shiba-yan:20210412200614p:plain

後は好きなように Java アプリケーションを作成して、これまでと同じ方法でデプロイするだけで Microsoft Build of OpenJDK の検証が App Service 上で行えます。

気力が続かなかったのでアプリケーションのデプロイまではやっていませんが、App Service の JAR / WAR デプロイは進化しているので興味がある方は以下のエントリを参照してください。

Early Access で提供されるようになった時には、また試してみたいと思います。