Azure App Service 向けの Java アプリを構成するConfigure a Java app for Azure App Service

Java 開発者は、Azure App Service を使用することで、フル マネージド サービス上で Java SE、Tomcat、JBoss EAP の Web アプリケーションを迅速にビルド、デプロイ、スケーリングすることができます。Azure App Service lets Java developers to quickly build, deploy, and scale their Java SE, Tomcat, and JBoss EAP web applications on a fully managed service. アプリケーションのデプロイは、Maven プラグインを使用して、コマンド ラインから、または IntelliJ、Eclipse、Visual Studio Code などのエディターで行います。Deploy applications with Maven plugins, from the command line, or in editors like IntelliJ, Eclipse, or Visual Studio Code.

このガイドでは、App Service を使用する Java 開発者向けに主要な概念と手順を示します。This guide provides key concepts and instructions for Java developers using App Service. Azure App Service を使用したことがない場合は、まず Java クイック スタートをお読みください。If you've never used Azure App Service, you should read through the Java quickstart first. Java 開発に限られない、App Service の使用に関する一般的な質問については、App Service の FAQ に関する記事で回答されています。General questions about using App Service that aren't specific to Java development are answered in the App Service FAQ.

アプリのデプロイDeploying your app

Maven 用 Azure Web アプリ プラグインを使用して、.war ファイルまたは .jar ファイルをデプロイできます。You can use Azure Web App Plugin for Maven to deploy your .war or .jar files. 一般的な IDE を使用したデプロイは、Azure Toolkit for IntelliJ または Azure Toolkit for Eclipse でもサポートされています。Deployment with popular IDEs is also supported with the Azure Toolkit for IntelliJ or Azure Toolkit for Eclipse.

それ以外の場合、デプロイの方法はアーカイブの種類によって異なります。Otherwise, your deployment method will depend on your archive type:

Java SEJava SE

Java SE に .jar ファイルをデプロイするには、Kudu サイトの /api/zipdeploy/ エンドポイントを使用します。To deploy .jar files to Java SE, use the /api/zipdeploy/ endpoint of the Kudu site. この API の詳細については、このドキュメントを参照してください。For more information on this API, please see this documentation.

TomcatTomcat

.war ファイルを Tomcat にデプロイするには、/api/wardeploy/ エンドポイントを使用してアーカイブ ファイルを POST します。To deploy .war files to Tomcat, use the /api/wardeploy/ endpoint to POST your archive file. この API の詳細については、このドキュメントを参照してください。For more information on this API, please see this documentation.

JBoss EAPJBoss EAP

.war ファイルを JBoss にデプロイするには、/api/wardeploy/ エンドポイントを使用してアーカイブ ファイルを POST します。To deploy .war files to JBoss, use the /api/wardeploy/ endpoint to POST your archive file. この API の詳細については、このドキュメントを参照してください。For more information on this API, please see this documentation.

.ear ファイルをデプロイするには、FTP を使用します。To deploy .ear files, use FTP.

FTP を使用して .war や .jar をデプロイしないでください。Do not deploy your .war or .jar using FTP. FTP ツールは、スタートアップ スクリプト、依存関係、またはその他のランタイム ファイルをアップロードするために設計されています。The FTP tool is designed to upload startup scripts, dependencies, or other runtime files. これは、Web アプリをデプロイするための最適な選択肢ではありません。It is not the optimal choice for deploying web apps.

アプリのログ記録とデバッグLogging and debugging apps

パフォーマンス レポート、トラフィックの視覚エフェクト、および正常性検査は、Azure portal を介して各アプリに対して使用できます。Performance reports, traffic visualizations, and health checkups are available for each app through the Azure portal. 詳細については、「Azure App Service 診断の概要」を参照してください。For more information, see Azure App Service diagnostics overview.

診断ログをストリーミングするStream diagnostic logs

App Service のアプリケーション コード内から生成されたコンソール ログにアクセスするには、Cloud Shell で次のコマンドを実行して、診断ログを有効にします。To access the console logs generated from inside your application code in App Service, turn on diagnostics logging by running the following command in the Cloud Shell:

az webapp log config --resource-group <resource-group-name> --name <app-name> --application-logging true --level Verbose

--level で有効な値は、ErrorWarningInfo、および Verbose です。Possible values for --level are: Error, Warning, Info, and Verbose. 後続の各レベルには、前のレベルが含まれます。Each subsequent level includes the previous level. たとえば、Error にはエラー メッセージのみが含まれ、Verbose にはすべてのメッセージが含まれます。For example: Error includes only error messages, and Verbose includes all messages.

診断ログがオンになったら、次のコマンドを実行して、ログのストリームを確認します。Once diagnostic logging is turned on, run the following command to see the log stream:

az webapp log tail --resource-group <resource-group-name> --name <app-name>

コンソール ログがすぐに表示されない場合は、30 秒以内にもう一度確認します。If you don't see console logs immediately, check again in 30 seconds.

注意

https://<app-name>.scm.azurewebsites.net/api/logs/docker で、ブラウザーからログ ファイルを検査することもできます。You can also inspect the log files from the browser at https://<app-name>.scm.azurewebsites.net/api/logs/docker.

任意のタイミングでログのストリーミングを停止するには、Ctrl+C と入力します。To stop log streaming at any time, type Ctrl+C.

コンテナー内から生成されたコンソール ログにアクセスできます。You can access the console logs generated from inside the container.

まず、次のコマンドを実行して、コンテナーのログ記録をオンにします。First, turn on container logging by running the following command:

az webapp log config --name <app-name> --resource-group <resource-group-name> --docker-container-logging filesystem

<app-name><resource-group-name> は、Web アプリに適した名前に置き換えます。Replace <app-name> and <resource-group-name> with the names appropriate for your web app.

コンテナーのログ記録がオンになったら、次のコマンドを実行して、ログのストリームを確認します。Once container logging is turned on, run the following command to see the log stream:

az webapp log tail --name <app-name> --resource-group <resource-group-name>

コンソール ログがすぐに表示されない場合は、30 秒以内にもう一度確認します。If you don't see console logs immediately, check again in 30 seconds.

任意のタイミングでログのストリーミングを停止するには、 Ctrl+C キーを押します。To stop log streaming at any time, type Ctrl+C .

ブラウザーから https://<app-name>.scm.azurewebsites.net/api/logs/docker でログ ファイルを検査することもできます。You can also inspect the log files in a browser at https://<app-name>.scm.azurewebsites.net/api/logs/docker.

詳細については、Cloud Shell でのログのストリーミングに関する記事をご覧ください。For more information, see Stream logs in Cloud Shell.

SSH コンソール アクセスSSH console access

コンテナーとの直接 SSH セッションを開くには、アプリが実行されている必要があります。To make open a direct SSH session with your container, your app should be running.

ブラウザーに次の URL を貼り付け、<app-name> をお使いのアプリの名前に置き換えます。Paste the following URL into your browser and replace <app-name> with your app name:

https://<app-name>.scm.azurewebsites.net/webssh/host

まだ認証されていない場合、接続するには Azure サブスクリプションで認証する必要があります。If you're not yet authenticated, you're required to authenticate with your Azure subscription to connect. 認証されると、ブラウザー内シェルが表示され、コンテナー内でコマンドを実行することができます。Once authenticated, you see an in-browser shell, where you can run commands inside your container.

SSH 接続

注意

/home ディレクトリの外部で行ったすべての変更は、コンテナー自体に格納され、アプリの再起動後には保持されません。Any changes you make outside the /home directory are stored in the container itself and don't persist beyond an app restart.

ローカル コンピューターからリモート SSH セッションを開くには、「リモート シェルから SSH セッションを開く」を参照してください。To open a remote SSH session from your local machine, see Open SSH session from remote shell.

トラブルシューティング ツールTroubleshooting tools

組み込みの Java イメージは Alpine Linux オペレーティング システムに基づいています。The built-in Java images are based on the Alpine Linux operating system. apk パッケージ マネージャーを使用し、トラブルシューティングのツールやコマンドをインストールします。Use the apk package manager to install any troubleshooting tools or commands.

Flight RecorderFlight Recorder

Azul JVM を使用する App Service のすべての Java ランタイムには、Zulu Flight Recorder が付属しています。All Java runtimes on App Service using the Azul JVMs come with the Zulu Flight Recorder. これを使用すると、JVM、システム、アプリケーションのイベントを記録し、Java アプリケーションでの問題のトラブルシューティングを行うことができます。You can use this to record JVM, system, and application events and troubleshoot problems in your Java applications.

時間指定の記録Timed Recording

時間を指定して記録を行うには、Java アプリケーションの PID (プロセス ID) が必要です。To take a timed recording you will need the PID (Process ID) of the Java application. PID を検索するには、ブラウザーで Web アプリの SCM サイト (https://.scm.azurewebsites.net/ProcessExplorer/) を開きます。To find the PID, open a browser to your web app's SCM site at https://.scm.azurewebsites.net/ProcessExplorer/. このページには、Web アプリで実行中のプロセスが表示されます。This page shows the running processes in your web app. テーブル内で "java" という名前のプロセスを探し、対応する PID (プロセス ID) をコピーします。Find the process named "java" in the table and copy the corresponding PID (Process ID).

次に、SCM サイト上部のツール バーにある デバッグ コンソール を開き、次のコマンドを実行します。Next, open the Debug Console in the top toolbar of the SCM site and run the following command. <pid> を、先ほどコピーしたプロセス ID に置き換えます。Replace <pid> with the process ID you copied earlier. このコマンドにより、Java アプリケーションのプロファイラーによる 30 秒の記録が開始され、D:\home ディレクトリに timed_recording_example.jfr という名前のファイルが生成されます。This command will start a 30 second profiler recording of your Java application and generate a file named timed_recording_example.jfr in the D:\home directory.

jcmd <pid> JFR.start name=TimedRecording settings=profile duration=30s filename="D:\home\timed_recording_example.JFR"

対象の App Service に SSH で接続し、jcmd コマンドを実行して、実行されているすべての Java プロセスの一覧を表示します。SSH into your App Service and run the jcmd command to see a list of all the Java processes running. jcmd 自体に加えて、実行されているご自分の Java アプリケーションとプロセス ID 番号 (pid) が表示されます。In addition to jcmd itself, you should see your Java application running with a process ID number (pid).

078990bbcd11:/home# jcmd
Picked up JAVA_TOOL_OPTIONS: -Djava.net.preferIPv4Stack=true
147 sun.tools.jcmd.JCmd
116 /home/site/wwwroot/app.jar

JVM の 30 秒間の記録を開始するには、次のコマンドを実行します。Execute the command below to start a 30-second recording of the JVM. これにより、JVM がプロファイリングされて、jfr_example.jfr という名前の JFR ファイルがホーム ディレクトリに作成されます。This will profile the JVM and create a JFR file named jfr_example.jfr in the home directory. (116 は、ご自分の Java アプリの pid に置き換えてください。)(Replace 116 with the pid of your Java app.)

jcmd 116 JFR.start name=MyRecording settings=profile duration=30s filename="/home/jfr_example.jfr"

30 秒の期間中には、jcmd 116 JFR.check を実行することで、記録が取得されていることを確認できます。During the 30 second interval, you can validate the recording is taking place by running jcmd 116 JFR.check. これにより、特定の Java プロセスに対するすべての記録が表示されます。This will show all recordings for the given Java process.

継続的な記録Continuous Recording

Zulu Flight Recorder を使うと、ランタイムのパフォーマンスに対する影響を最小限にして、Java アプリケーションを継続的にプロファイリングできます (出典)。You can use Zulu Flight Recorder to continuously profile your Java application with minimal impact on runtime performance (source). そのためには、次の Azure CLI コマンドを実行し、必要な構成で JAVA_OPTS という名前のアプリ設定を作成します。To do so, run the following Azure CLI command to create an App Setting named JAVA_OPTS with the necessary configuration. JAVA_OPTS アプリ設定の内容は、アプリの起動時に java コマンドに渡されます。The contents of the JAVA_OPTS App Setting are passed to the java command when your app is started.

az webapp config appsettings set -g <your_resource_group> -n <your_app_name> --settings JAVA_OPTS=-XX:StartFlightRecording=disk=true,name=continuous_recording,dumponexit=true,maxsize=1024m,maxage=1d

記録が開始されたら、JFR.dump コマンドを使用して、いつでも現在の記録データをダンプできます。Once the recording has started, you can dump the current recording data at any time using the JFR.dump command.

jcmd <pid> JFR.dump name=continuous_recording filename="/home/recording1.jfr"

.jfr ファイルの分析Analyze .jfr files

JFR ファイルをご自分のローカル コンピューターにダウンロードするには、FTPS を使います。Use FTPS to download your JFR file to your local machine. JFR ファイルを分析するには、Zulu Mission Control をダウンロードしてインストールします。To analyze the JFR file, download and install Zulu Mission Control. Zulu Mission Control については、Azul のドキュメントインストール手順をご覧ください。For instructions on Zulu Mission Control, see the Azul documentation and the installation instructions.

アプリのログ記録App logging

Azure portal または Azure CLI を使用してアプリケーションのログ記録を有効にし、アプリケーションの標準コンソール出力および標準コンソール エラー ストリームをローカル ファイル システムまたは Azure BLOB ストレージに書き込むよう App Service を構成します。Enable application logging through the Azure portal or Azure CLI to configure App Service to write your application's standard console output and standard console error streams to the local filesystem or Azure Blob Storage. App Service のローカル ファイル システム インスタンスへのログ記録は、構成されてから 12 時間後に無効になります。Logging to the local App Service filesystem instance is disabled 12 hours after it is configured. リテンション期間を長くする必要がある場合は、BLOB ストレージ コンテナーに出力を書き込むようアプリケーションを構成します。If you need longer retention, configure the application to write output to a Blob storage container. Java と Tomcat のアプリ ログは /home/LogFiles/Application/ ディレクトリにあります。Your Java and Tomcat app logs can be found in the /home/LogFiles/Application/ directory.

Azure portal または Azure CLI を使用してアプリケーションのログ記録を有効にし、アプリケーションの標準コンソール出力および標準コンソール エラー ストリームをローカル ファイル システムまたは Azure BLOB ストレージに書き込むよう App Service を構成します。Enable application logging through the Azure portal or Azure CLI to configure App Service to write your application's standard console output and standard console error streams to the local filesystem or Azure Blob Storage. リテンション期間を長くする必要がある場合は、BLOB ストレージ コンテナーに出力を書き込むようアプリケーションを構成します。If you need longer retention, configure the application to write output to a Blob storage container. Java と Tomcat のアプリ ログは /home/LogFiles/Application/ ディレクトリにあります。Your Java and Tomcat app logs can be found in the /home/LogFiles/Application/ directory.

Linux ベースの App Services の Azure Blob Storage のログ記録は Azure Monitor (プレビュー) を使用してのみ構成できますAzure Blob Storage logging for Linux based App Services can only be configured using Azure Monitor (preview)

アプリケーションで Logback または Log4j をトレースに使用している場合は、「Application Insights を使用した Java トレース ログの探索」にあるログ記録フレームワークの構成手順に従って、これらのトレースを確認のために Azure Application Insights に転送することができます。If your application uses Logback or Log4j for tracing, you can forward these traces for review into Azure Application Insights using the logging framework configuration instructions in Explore Java trace logs in Application Insights.

カスタマイズとチューニングCustomization and tuning

Azure App Service for Linux では、Azure portal および CLI を使用したチューニングとカスタマイズが追加設定なしでサポートされています。Azure App Service for Linux supports out of the box tuning and customization through the Azure portal and CLI. Java 以外の特定の Web アプリの構成については、次の記事を確認してください。Review the following articles for non-Java-specific web app configuration:

Java ランタイム オプションを設定するSet Java runtime options

割り当てられたメモリまたはその他の JVM ランタイムのオプションを設定するには、アプリ設定を作成して JAVA_OPTS と名付け、オプションを指定します。To set allocated memory or other JVM runtime options, create an app setting named JAVA_OPTS with the options. App Service では、開始時にこの設定が環境変数として Java ランタイムに渡されます。App Service passes this setting as an environment variable to the Java runtime when it starts.

Azure portal の Web アプリ用の [アプリケーション設定] で、-Xms512m -Xmx1204m などの追加の設定を含む、JAVA_OPTS という名前の新しいアプリ設定を作成します。In the Azure portal, under Application Settings for the web app, create a new app setting named JAVA_OPTS that includes the additional settings, such as -Xms512m -Xmx1204m.

Maven プラグインからアプリ設定を構成するには、Azure プラグイン セクションで設定/値のタグを追加します。To configure the app setting from the Maven plugin, add setting/value tags in the Azure plugin section. 次の例では、特定の最小および最大の Java ヒープ サイズを設定します。The following example sets a specific minimum and maximum Java heap size:

<appSettings>
    <property>
        <name>JAVA_OPTS</name>
        <value>-Xms512m -Xmx1204m</value>
    </property>
</appSettings>

App Service プランで 1 つのデプロイ スロットを使用して 1 つのアプリケーションを実行している開発者は、次のオプションを使用できます。Developers running a single application with one deployment slot in their App Service plan can use the following options:

  • B1 および S1 インスタンス: -Xms1024m -Xmx1024mB1 and S1 instances: -Xms1024m -Xmx1024m
  • B2 および S2 インスタンス: -Xms3072m -Xmx3072mB2 and S2 instances: -Xms3072m -Xmx3072m
  • B3 および S3 インスタンス: -Xms6144m -Xmx6144mB3 and S3 instances: -Xms6144m -Xmx6144m

アプリケーション ヒープ設定をチューニングする際には、App Service プランの詳細を確認し、複数のアプリケーションおよびデプロイ スロットのニーズを考慮して、メモリの最適な割り当てを特定する必要があります。When tuning application heap settings, review your App Service plan details and take into account multiple applications and deployment slot needs to find the optimal allocation of memory.

Web ソケットを有効にするTurn on web sockets

Azure portal のアプリケーション用の [アプリケーション設定] で、Web ソケットのサポートを有効にします。Turn on support for web sockets in the Azure portal in the Application settings for the application. 設定を有効にするには、アプリケーションを再起動する必要があります。You'll need to restart the application for the setting to take effect.

Azure CLI を使用して、次のコマンドで Web ソケットのサポートを有効にします。Turn on web socket support using the Azure CLI with the following command:

az webapp config set --name <app-name> --resource-group <resource-group-name> --web-sockets-enabled true

その後、アプリケーションを再起動します。Then restart your application:

az webapp stop --name <app-name> --resource-group <resource-group-name>
az webapp start --name <app-name> --resource-group <resource-group-name>

既定の文字エンコーディングを設定するSet default character encoding

Azure portal の Web アプリ用の [アプリケーション設定] で、値 -Dfile.encoding=UTF-8 を含む、JAVA_OPTS という名前の新しいアプリ設定を作成します。In the Azure portal, under Application Settings for the web app, create a new app setting named JAVA_OPTS with value -Dfile.encoding=UTF-8.

または、App Service Maven プラグインを使用してアプリ設定を構成できます。Alternatively, you can configure the app setting using the App Service Maven plugin. プラグイン構成で、設定名および値のタグを追加します。Add the setting name and value tags in the plugin configuration:

<appSettings>
    <property>
        <name>JAVA_OPTS</name>
        <value>-Dfile.encoding=UTF-8</value>
    </property>
</appSettings>

JSP ファイルをプリコンパイルするPre-Compile JSP files

Tomcat アプリケーションのパフォーマンスを向上させるには、App Service にデプロイする前に、JSP ファイルをコンパイルします。To improve performance of Tomcat applications, you can compile your JSP files before deploying to App Service. Apache Sling によって提供されている Maven プラグインを使用するか、この Ant ビルド ファイルを使用できます。You can use the Maven plugin provided by Apache Sling, or using this Ant build file.

セキュリティで保護されたアプリケーションSecure applications

App Service で実行される Java アプリケーションは、他のアプリケーションと同じ一連のセキュリティのベスト プラクティスを備えています。Java applications running in App Service have the same set of security best practices as other applications.

ユーザーを認証する (Easy Auth)Authenticate users (Easy Auth)

[認証/承認] オプションを使用して、Azure portal でアプリ認証を設定します。Set up app authentication in the Azure portal with the Authentication and Authorization option. そこから、Azure Active Directory、または Facebook、Google、GitHub などのソーシャル ログインを使用して、認証を有効にすることができます。From there, you can enable authentication using Azure Active Directory or social logins like Facebook, Google, or GitHub. Azure portal の構成は、1 つの認証プロバイダーを構成するときにのみ機能します。Azure portal configuration only works when configuring a single authentication provider. 詳細については、「Azure Active Directory ログインを使用するよう App Service アプリを構成する」と、他の ID プロバイダーの関連記事を参照してください。For more information, see Configure your App Service app to use Azure Active Directory login and the related articles for other identity providers. 複数のサインイン プロバイダーを有効にする必要がある場合は、App Service 認証のカスタマイズに関する記事の手順に従います。If you need to enable multiple sign-in providers, follow the instructions in the customize App Service authentication article.

Java SEJava SE

Spring Boot 開発者は、Azure Active Directory Spring Boot スターターを使用して、使い慣れた Spring Security の注釈と API を使用してアプリケーションをセキュリティで保護することができます。Spring Boot developers can use the Azure Active Directory Spring Boot starter to secure applications using familiar Spring Security annotations and APIs. application.properties ファイルで最大ヘッダー サイズを大きくしてください。Be sure to increase the maximum header size in your application.properties file. 16384 の値をお勧めします。We suggest a value of 16384.

TomcatTomcat

Tomcat アプリケーションでは、Principal オブジェクトを Map オブジェクトにキャストすることで、サーブレットから直接ユーザーの要求にアクセスできます。Your Tomcat application can access the user's claims directly from the servlet by casting the Principal object to a Map object. Map オブジェクトによって、各要求の種類がその種類の要求のコレクションにマップされます。The Map object will map each claim type to a collection of the claims for that type. 以下のコードで、requestHttpServletRequest のインスタンスです。In the code below, request is an instance of HttpServletRequest.

Map<String, Collection<String>> map = (Map<String, Collection<String>>) request.getUserPrincipal();

これで Map オブジェクトの特定の要求を検査できます。Now you can inspect the Map object for any specific claim. たとえば、次のコード スニペットでは、すべての要求の種類を反復処理し、各コレクションのコンテンツを出力します。For example, the following code snippet iterates through all the claim types and prints the contents of each collection.

for (Object key : map.keySet()) {
        Object value = map.get(key);
        if (value != null && value instanceof Collection {
            Collection claims = (Collection) value;
            for (Object claim : claims) {
                System.out.println(claims);
            }
        }
    }

ユーザーをサインアウトさせるには、/.auth/ext/logout パスを使用します。To sign users out, use the /.auth/ext/logout path. 他のアクションを実行する場合は、「Azure App Service 上での認証と承認の高度な使用方法」を参照してください。To perform other actions, please see the documentation on App Service Authentication and Authorization usage. Tomcat の HttpServletRequest インターフェイスとそのメソッドに関する公式ドキュメントもあります。There is also official documentation on the Tomcat HttpServletRequest interface and its methods. 次のサーブレット メソッドも、ご利用の App Service 構成に基づいてハイドレートされます。The following servlet methods are also hydrated based on your App Service configuration:

public boolean isSecure()
public String getRemoteAddr()
public String getRemoteHost()
public String getScheme()
public int getServerPort()

この機能を無効にするには、1 の値で WEBSITE_AUTH_SKIP_PRINCIPAL という名前のアプリケーション設定を作成します。To disable this feature, create an Application Setting named WEBSITE_AUTH_SKIP_PRINCIPAL with a value of 1. App Service によって追加されるすべてのサーブレット フィルターを無効にするには、1 の値を含む WEBSITE_SKIP_FILTERS という名前の設定を作成します。To disable all servlet filters added by App Service, create a setting named WEBSITE_SKIP_FILTERS with a value of 1.

TLS/SSL を構成するConfigure TLS/SSL

Azure App Service で SSL バインドを使用してカスタム DNS 名をセキュリティで保護する」の手順に従って、既存の SSL 証明書をアップロードし、アプリケーションのドメイン名にバインドします。Follow the instructions in the Secure a custom DNS name with an SSL binding in Azure App Service to upload an existing SSL certificate and bind it to your application's domain name. 既定では、アプリケーションで引き続き HTTP 接続が許可されます。チュートリアルの特定の手順に従って、SSL と TLS を適用します。By default your application will still allow HTTP connections-follow the specific steps in the tutorial to enforce SSL and TLS.

KeyVault 参照を使用するUse KeyVault References

Azure Key Vault では、アクセス ポリシーと監査履歴を使用した一元的なシークレット管理を提供しています。Azure KeyVault provides centralized secret management with access policies and audit history. シークレット (パスワードや接続文字列など) を KeyVault に格納し、環境変数を使用してアプリケーション内でこれらのシークレットにアクセスすることができます。You can store secrets (such as passwords or connection strings) in KeyVault and access these secrets in your application through environment variables.

最初に、Key Vault へのアクセス権をアプリに付与したり、アプリケーション設定で自分のシークレットに対する KeyVault 参照を設定したりするための手順に従います。First, follow the instructions for granting your app access to Key Vault and making a KeyVault reference to your secret in an Application Setting. App Service のターミナルにリモートでアクセスしている間に環境変数を出力することで、シークレットへの参照が解決されることを確認できます。You can validate that the reference resolves to the secret by printing the environment variable while remotely accessing the App Service terminal.

Spring または Tomcat 構成ファイルにこれらのシークレットを挿入するには、環境変数の挿入構文 (${MY_ENV_VAR}) を使用します。To inject these secrets in your Spring or Tomcat configuration file, use environment variable injection syntax (${MY_ENV_VAR}). Spring の構成ファイルについては、外部化された構成に関するこちらのドキュメントを参照してください。For Spring configuration files, please see this documentation on externalized configurations.

Java キー ストアを使用するUse the Java Key Store

既定では、App Service Linux にアップロードされたパブリック証明書またはプライベート証明書は、コンテナーの起動時にそれぞれの Java キー ストアに読み込まれます。By default, any public or private certificates uploaded to App Service Linux will be loaded into the respective Java Key Stores as the container starts. 証明書のアップロード後、証明書が Java キー ストアに読み込まれるようにするために、App Service を再起動する必要があります。After uploading your certificate, you will need to restart your App Service for it to be loaded into the Java Key Store. パブリック証明書は $JAVA_HOME/jre/lib/security/cacerts のキー ストアに読み込まれ、プライベート証明書は $JAVA_HOME/lib/security/client.jks に格納されます。Public certificates are loaded into the Key Store at $JAVA_HOME/jre/lib/security/cacerts, and private certificates are stored in $JAVA_HOME/lib/security/client.jks.

Java キー ストアの証明書を使用して JDBC 接続を暗号化するために、追加の構成が必要になる場合があります。Additional configuration may be necessary for encrypting your JDBC connection with certificates in the Java Key Store. 選択した JDBC ドライバーのドキュメントを参照してください。Please refer to the documentation for your chosen JDBC driver.

Java キー ストアを初期化するInitialize the Java Key Store

import java.security.KeyStore オブジェクトを初期化するには、キー ストア ファイルをパスワードと共に読み込みます。To initialize the import java.security.KeyStore object, load the keystore file with the password. 両方のキー ストアの既定のパスワードは "changeit" です。The default password for both key stores is "changeit".

KeyStore keyStore = KeyStore.getInstance("jks");
keyStore.load(
    new FileInputStream(System.getenv("JAVA_HOME")+"/lib/security/cacets"),
    "changeit".toCharArray());

KeyStore keyStore = KeyStore.getInstance("pkcs12");
keyStore.load(
    new FileInputStream(System.getenv("JAVA_HOME")+"/lib/security/client.jks"),
    "changeit".toCharArray());

キー ストアを手動で読み込むManually load the key store

キー ストアに証明書を手動で読み込むことができます。You can load certificates manually to the key store. アプリ設定 SKIP_JAVA_KEYSTORE_LOAD を作成し、値を 1 に設定して、証明書がキー ストアに自動的に読み込まれないように App Service を無効にします。Create an app setting, SKIP_JAVA_KEYSTORE_LOAD, with a value of 1 to disable App Service from loading the certificates into the key store automatically. Azure portal 経由で App Service にアップロードされたすべてのパブリック証明書は /var/ssl/certs/ に格納されます。All public certificates uploaded to App Service via the Azure portal are stored under /var/ssl/certs/. プライベート証明書は /var/ssl/private/ に格納されます。Private certificates are stored under /var/ssl/private/.

App Service への SSH 接続を開き、コマンド keytool を実行することで、Java キー ツールと対話することやデバッグを行うことができます。You can interact or debug the Java Key Tool by opening an SSH connection to your App Service and running the command keytool. コマンドの一覧については、キー ツールのドキュメントを参照してください。See the Key Tool documentation for a list of commands. キー ストア API の詳細については、公式ドキュメントを参照してください。For more information on the KeyStore API, please refer to the official documentation.

APM プラットフォームを構成するConfigure APM platforms

このセクションでは、NewRelic と AppDynamics アプリケーション パフォーマンスの監視 (APM) プラットフォームで、Linux 上の Azure App Service にデプロイされた Java アプリケーションを接続する方法を示します。This section shows how to connect Java applications deployed on Azure App Service on Linux with the NewRelic and AppDynamics application performance monitoring (APM) platforms.

New Relic の構成Configure New Relic

  1. NewRelic.com で NewRelic アカウントを作成しますCreate a NewRelic account at NewRelic.com

  2. NewRelic から Java エージェントをダウンロードします。ファイル名は newrelic-java-x.x.x.zip のようになります。Download the Java agent from NewRelic, it will have a file name similar to newrelic-java-x.x.x.zip.

  3. ライセンス キーをコピーします。これは後ほどエージェントの構成を行う際に必要です。Copy your license key, you'll need it to configure the agent later.

  4. App Service インスタンスに SSH で接続し、新しいディレクトリ /home/site/wwwroot/apm を作成します。SSH into your App Service instance and create a new directory /home/site/wwwroot/apm.

  5. /home/site/wwwroot/apm の下にあるディレクトリにアンパックされた NewRelic Java エージェント ファイルをアップロードします。Upload the unpacked NewRelic Java agent files into a directory under /home/site/wwwroot/apm. エージェント用のファイルは /home/site/wwwroot/apm/newrelic 内にある必要があります。The files for your agent should be in /home/site/wwwroot/apm/newrelic.

  6. /home/site/wwwroot/apm/newrelic/newrelic.yml で YAML ファイルを変更し、プレース ホルダー ライセンスの値を独自のライセンス キーに置き換えます。Modify the YAML file at /home/site/wwwroot/apm/newrelic/newrelic.yml and replace the placeholder license value with your own license key.

  7. Azure portal で App Service でアプリケーションを参照し、新しいアプリケーション設定を作成します。In the Azure portal, browse to your application in App Service and create a new Application Setting.

    • Java SE アプリの場合は、名前が JAVA_OPTS で値が -javaagent:/home/site/wwwroot/apm/newrelic/newrelic.jar の環境変数を作成します。For Java SE apps, create an environment variable named JAVA_OPTS with the value -javaagent:/home/site/wwwroot/apm/newrelic/newrelic.jar.
    • Tomcat の場合は、名前が CATALINA_OPTS で値が -javaagent:/home/site/wwwroot/apm/newrelic/newrelic.jar の環境変数を作成します。For Tomcat, create an environment variable named CATALINA_OPTS with the value -javaagent:/home/site/wwwroot/apm/newrelic/newrelic.jar.
  1. NewRelic.com で NewRelic アカウントを作成しますCreate a NewRelic account at NewRelic.com

  2. NewRelic から Java エージェントをダウンロードします。ファイル名は newrelic-java-x.x.x.zip のようになります。Download the Java agent from NewRelic, it will have a file name similar to newrelic-java-x.x.x.zip.

  3. ライセンス キーをコピーします。これは後ほどエージェントの構成を行う際に必要です。Copy your license key, you'll need it to configure the agent later.

  4. App Service インスタンスに SSH で接続し、新しいディレクトリ /home/site/wwwroot/apm を作成します。SSH into your App Service instance and create a new directory /home/site/wwwroot/apm.

  5. /home/site/wwwroot/apm の下にあるディレクトリにアンパックされた NewRelic Java エージェント ファイルをアップロードします。Upload the unpacked NewRelic Java agent files into a directory under /home/site/wwwroot/apm. エージェント用のファイルは /home/site/wwwroot/apm/newrelic 内にある必要があります。The files for your agent should be in /home/site/wwwroot/apm/newrelic.

  6. /home/site/wwwroot/apm/newrelic/newrelic.yml で YAML ファイルを変更し、プレース ホルダー ライセンスの値を独自のライセンス キーに置き換えます。Modify the YAML file at /home/site/wwwroot/apm/newrelic/newrelic.yml and replace the placeholder license value with your own license key.

  7. Azure portal で App Service でアプリケーションを参照し、新しいアプリケーション設定を作成します。In the Azure portal, browse to your application in App Service and create a new Application Setting.

    • Java SE アプリの場合は、名前が JAVA_OPTS で値が -javaagent:/home/site/wwwroot/apm/newrelic/newrelic.jar の環境変数を作成します。For Java SE apps, create an environment variable named JAVA_OPTS with the value -javaagent:/home/site/wwwroot/apm/newrelic/newrelic.jar.
    • Tomcat の場合は、名前が CATALINA_OPTS で値が -javaagent:/home/site/wwwroot/apm/newrelic/newrelic.jar の環境変数を作成します。For Tomcat, create an environment variable named CATALINA_OPTS with the value -javaagent:/home/site/wwwroot/apm/newrelic/newrelic.jar.

JAVA_OPTS または CATALINA_OPTS 用の環境変数がすでにある場合、-javaagent:/... のオプションを現在値の最期に追加します。If you already have an environment variable for JAVA_OPTS or CATALINA_OPTS, append the -javaagent:/... option to the end of the current value.

AppDynamics の構成Configure AppDynamics

  1. AppDynamics.com で AppDynamics アカウントを作成しますCreate an AppDynamics account at AppDynamics.com

  2. AppDynamics の Web サイトから Java エージェントをダウンロードします。ファイル名は AppServerAgent-x.x.x.xxxxx.zip のようになりますDownload the Java agent from the AppDynamics website, the file name will be similar to AppServerAgent-x.x.x.xxxxx.zip

  3. Kudu コンソールを使用して、新しいディレクトリ /home/site/wwwroot/apm を作成します。Use the Kudu console to create a new directory /home/site/wwwroot/apm.

  4. /home/site/wwwroot/apm の下にあるディレクトリに Java エージェント ファイルをアップロードします。Upload the Java agent files into a directory under /home/site/wwwroot/apm. エージェント用のファイルは /home/site/wwwroot/apm/appdynamics 内にある必要があります。The files for your agent should be in /home/site/wwwroot/apm/appdynamics.

  5. Azure portal で App Service でアプリケーションを参照し、新しいアプリケーション設定を作成します。In the Azure portal, browse to your application in App Service and create a new Application Setting.

    • Java SE アプリの場合は、名前が JAVA_OPTS で値が -javaagent:/home/site/wwwroot/apm/appdynamics/javaagent.jar -Dappdynamics.agent.applicationName=<app-name> の環境変数を作成します。<app-name> は App Service の名前です。For Java SE apps, create an environment variable named JAVA_OPTS with the value -javaagent:/home/site/wwwroot/apm/appdynamics/javaagent.jar -Dappdynamics.agent.applicationName=<app-name> where <app-name> is your App Service name.
    • Tomcat アプリの場合は、名前が CATALINA_OPTS で値が -javaagent:/home/site/wwwroot/apm/appdynamics/javaagent.jar -Dappdynamics.agent.applicationName=<app-name> の環境変数を作成します。<app-name> は App Service の名前です。For Tomcat apps, create an environment variable named CATALINA_OPTS with the value -javaagent:/home/site/wwwroot/apm/appdynamics/javaagent.jar -Dappdynamics.agent.applicationName=<app-name> where <app-name> is your App Service name.
  1. AppDynamics.com で AppDynamics アカウントを作成しますCreate an AppDynamics account at AppDynamics.com

  2. AppDynamics の Web サイトから Java エージェントをダウンロードします。ファイル名は AppServerAgent-x.x.x.xxxxx.zip のようになりますDownload the Java agent from the AppDynamics website, the file name will be similar to AppServerAgent-x.x.x.xxxxx.zip

  3. App Service インスタンスに SSH で接続し、新しいディレクトリ /home/site/wwwroot/apm を作成します。SSH into your App Service instance and create a new directory /home/site/wwwroot/apm.

  4. /home/site/wwwroot/apm の下にあるディレクトリに Java エージェント ファイルをアップロードします。Upload the Java agent files into a directory under /home/site/wwwroot/apm. エージェント用のファイルは /home/site/wwwroot/apm/appdynamics 内にある必要があります。The files for your agent should be in /home/site/wwwroot/apm/appdynamics.

  5. Azure portal で App Service でアプリケーションを参照し、新しいアプリケーション設定を作成します。In the Azure portal, browse to your application in App Service and create a new Application Setting.

    • Java SE アプリの場合は、名前が JAVA_OPTS で値が -javaagent:/home/site/wwwroot/apm/appdynamics/javaagent.jar -Dappdynamics.agent.applicationName=<app-name> の環境変数を作成します。<app-name> は App Service の名前です。For Java SE apps, create an environment variable named JAVA_OPTS with the value -javaagent:/home/site/wwwroot/apm/appdynamics/javaagent.jar -Dappdynamics.agent.applicationName=<app-name> where <app-name> is your App Service name.
    • Tomcat アプリの場合は、名前が CATALINA_OPTS で値が -javaagent:/home/site/wwwroot/apm/appdynamics/javaagent.jar -Dappdynamics.agent.applicationName=<app-name> の環境変数を作成します。<app-name> は App Service の名前です。For Tomcat apps, create an environment variable named CATALINA_OPTS with the value -javaagent:/home/site/wwwroot/apm/appdynamics/javaagent.jar -Dappdynamics.agent.applicationName=<app-name> where <app-name> is your App Service name.

注意

JAVA_OPTS または CATALINA_OPTS 用の環境変数がすでにある場合、-javaagent:/... のオプションを現在値の最期に追加します。If you already have an environment variable for JAVA_OPTS or CATALINA_OPTS, append the -javaagent:/... option to the end of the current value.

データ ソースの構成Configure data sources

Java SEJava SE

Spring Boot アプリケーション内のデータ ソースに接続するには、接続文字列を作成し、それらを application.properties ファイルに挿入することをお勧めします。To connect to data sources in Spring Boot applications, we suggest creating connection strings and injecting them into your application.properties file.

  1. App Service ページの [構成] セクションに文字列の名前を設定し、JDBC 接続文字列を値フィールドに貼り付けて、タイプを [カスタム] に設定します。In the "Configuration" section of the App Service page, set a name for the string, paste your JDBC connection string into the value field, and set the type to "Custom". 必要に応じて、この接続文字列をスロット設定として設定することができます。You can optionally set this connection string as slot setting.

    この接続文字列は、CUSTOMCONNSTR_<your-string-name> という名前の環境変数としてアプリケーションにアクセスできます。This connection string is accessible to our application as an environment variable named CUSTOMCONNSTR_<your-string-name>. たとえば、先ほど作成した接続文字列の名前は CUSTOMCONNSTR_exampledb になります。For example, the connection string we created above will be named CUSTOMCONNSTR_exampledb.

  2. application.properties ファイルで、環境変数名を使用してこの接続文字列を参照します。In your application.properties file, reference this connection string with the environment variable name. たとえば、例では次を使用します。For our example, we would use the following.

    app.datasource.url=${CUSTOMCONNSTR_exampledb}
    

このトピックの詳細については、データ アクセス外部化された構成に関する Spring Boot の資料を参照してください。Please see the Spring Boot documentation on data access and externalized configurations for more information on this topic.

TomcatTomcat

これらの説明は、すべてのデータベース接続に適用されます。These instructions apply to all database connections. プレースホルダーを、選択したデータベースのドライバーのクラス名と JAR ファイルに置き換える必要があります。You will need to fill placeholders with your chosen database's driver class name and JAR file. 一般的なデータベースのクラス名とドライバーのダウンロードを含む表を次に示します。Provided is a table with class names and driver downloads for common databases.

データベースDatabase ドライバーのクラス名Driver Class Name JDBC ドライバーJDBC Driver
PostgreSQLPostgreSQL org.postgresql.Driver ダウンロードDownload
MySQLMySQL com.mysql.jdbc.Driver ダウンロード ("プラットフォームに依存しない" を選択)Download (Select "Platform Independent")
SQL ServerSQL Server com.microsoft.sqlserver.jdbc.SQLServerDriver ダウンロードDownload

Java Database Connectivity (JDBC) または Java Persistence API (JPA) を使用するように Tomcat を構成するには、まず、起動時に Tomcat によって読み込まれる CATALINA_OPTS 環境変数をカスタマイズします。To configure Tomcat to use Java Database Connectivity (JDBC) or the Java Persistence API (JPA), first customize the CATALINA_OPTS environment variable that is read in by Tomcat at start-up. App Service Maven プラグインのアプリ設定を使用して、次の値を設定します。Set these values through an app setting in the App Service Maven plugin:

<appSettings>
    <property>
        <name>CATALINA_OPTS</name>
        <value>"$CATALINA_OPTS -Ddbuser=${DBUSER} -Ddbpassword=${DBPASSWORD} -DconnURL=${CONNURL}"</value>
    </property>
</appSettings>

または、Azure portal の [構成] > [アプリケーション設定] ページで環境変数を設定します。Or set the environment variables in the Configuration > Application Settings page in the Azure portal.

次に、データ ソースを Tomcat サーブレットで実行されている 1 つのアプリケーション、またはすべてのアプリケーションのどちらに対して使用可能にする必要があるかを判定します。Next, determine if the data source should be available to one application or to all applications running on the Tomcat servlet.

アプリケーション レベル データ ソースApplication-level data sources

  1. プロジェクトの META-INF/ ディレクトリ内に context.xml ファイルを作成します。Create a context.xml file in the META-INF/ directory of your project. META-INF/ ディレクトリが存在しない場合は作成します。Create the META-INF/ directory if it does not exist.

  2. context.xml で、Context 要素を追加してデータ ソースを JNDI アドレスにリンクします。In context.xml, add a Context element to link the data source to a JNDI address. driverClassName プレースホルダーを、上の表にあるドライバーのクラス名に置き換えます。Replace the driverClassName placeholder with your driver's class name from the table above.

    <Context>
        <Resource
            name="jdbc/dbconnection"
            type="javax.sql.DataSource"
            url="${dbuser}"
            driverClassName="<insert your driver class name>"
            username="${dbpassword}"
            password="${connURL}"
        />
    </Context>
    
  3. アプリケーションでこのデータ ソースを使用するよう、アプリケーションの web.xml を更新します。Update your application's web.xml to use the data source in your application.

    <resource-env-ref>
        <resource-env-ref-name>jdbc/dbconnection</resource-env-ref-name>
        <resource-env-ref-type>javax.sql.DataSource</resource-env-ref-type>
    </resource-env-ref>
    

構成を完了するFinalize configuration

最後に、ドライバーの JAR を Tomcat クラスパス内に配置し、App Service を再起動します。Finally, we will place the driver JARs in the Tomcat classpath and restart your App Service. JDBC ドライバー ファイルが Tomcat クラスローダーで確実に使用できるように、これらのファイルを /home/tomcat/lib ディレクトリに配置します。Ensure that the JDBC driver files are available to the Tomcat classloader by placing them in the /home/tomcat/lib directory. (このディレクトリがまだ存在しない場合は作成します。)これらのファイルを App Service インスタンスにアップロードするには、次の手順を行います。(Create this directory if it does not already exist.) To upload these files to your App Service instance, perform the following steps:

  1. Cloud Shell で、Web アプリ拡張機能をインストールします。In the Cloud Shell, install the webapp extension:

    az extension add -–name webapp
    
  2. 次の CLI コマンドを実行して、ローカル システムから App Service への SSH トンネルを作成します。Run the following CLI command to create an SSH tunnel from your local system to App Service:

    az webapp remote-connection create --resource-group <resource-group-name> --name <app-name> --port <port-on-local-machine>
    
  3. SFTP クライアントを使用してローカルのトンネル ポートに接続し、ファイルを /home/tomcat/lib フォルダーにアップロードします。Connect to the local tunneling port with your SFTP client and upload the files to the /home/tomcat/lib folder.

あるいは、FTP クライアントを使用して JDBC ドライバーをアップロードできます。Alternatively, you can use an FTP client to upload the JDBC driver. FTP 資格情報を取得するための手順に従ってください。Follow these instructions for getting your FTP credentials.


TomcatTomcat

これらの説明は、すべてのデータベース接続に適用されます。These instructions apply to all database connections. プレースホルダーを、選択したデータベースのドライバーのクラス名と JAR ファイルに置き換える必要があります。You will need to fill placeholders with your chosen database's driver class name and JAR file. 一般的なデータベースのクラス名とドライバーのダウンロードを含む表を次に示します。Provided is a table with class names and driver downloads for common databases.

データベースDatabase ドライバーのクラス名Driver Class Name JDBC ドライバーJDBC Driver
PostgreSQLPostgreSQL org.postgresql.Driver ダウンロードDownload
MySQLMySQL com.mysql.jdbc.Driver ダウンロード ("プラットフォームに依存しない" を選択)Download (Select "Platform Independent")
SQL ServerSQL Server com.microsoft.sqlserver.jdbc.SQLServerDriver ダウンロードDownload

Java Database Connectivity (JDBC) または Java Persistence API (JPA) を使用するように Tomcat を構成するには、まず、起動時に Tomcat によって読み込まれる CATALINA_OPTS 環境変数をカスタマイズします。To configure Tomcat to use Java Database Connectivity (JDBC) or the Java Persistence API (JPA), first customize the CATALINA_OPTS environment variable that is read in by Tomcat at start-up. App Service Maven プラグインのアプリ設定を使用して、次の値を設定します。Set these values through an app setting in the App Service Maven plugin:

<appSettings>
    <property>
        <name>CATALINA_OPTS</name>
        <value>"$CATALINA_OPTS -Ddbuser=${DBUSER} -Ddbpassword=${DBPASSWORD} -DconnURL=${CONNURL}"</value>
    </property>
</appSettings>

または、Azure portal の [構成] > [アプリケーション設定] ページで環境変数を設定します。Or set the environment variables in the Configuration > Application Settings page in the Azure portal.

次に、データ ソースを Tomcat サーブレットで実行されている 1 つのアプリケーション、またはすべてのアプリケーションのどちらに対して使用可能にする必要があるかを判定します。Next, determine if the data source should be available to one application or to all applications running on the Tomcat servlet.

アプリケーション レベル データ ソースApplication-level data sources

  1. プロジェクトの META-INF/ ディレクトリ内に context.xml ファイルを作成します。Create a context.xml file in the META-INF/ directory of your project. META-INF/ ディレクトリが存在しない場合は作成します。Create the META-INF/ directory if it does not exist.

  2. context.xml で、Context 要素を追加してデータ ソースを JNDI アドレスにリンクします。In context.xml, add a Context element to link the data source to a JNDI address. driverClassName プレースホルダーを、上の表にあるドライバーのクラス名に置き換えます。Replace the driverClassName placeholder with your driver's class name from the table above.

    <Context>
        <Resource
            name="jdbc/dbconnection"
            type="javax.sql.DataSource"
            url="${dbuser}"
            driverClassName="<insert your driver class name>"
            username="${dbpassword}"
            password="${connURL}"
        />
    </Context>
    
  3. アプリケーションでこのデータ ソースを使用するよう、アプリケーションの web.xml を更新します。Update your application's web.xml to use the data source in your application.

    <resource-env-ref>
        <resource-env-ref-name>jdbc/dbconnection</resource-env-ref-name>
        <resource-env-ref-type>javax.sql.DataSource</resource-env-ref-type>
    </resource-env-ref>
    

共有のサーバーレベル リソースShared server-level resources

サーバーレベルの共有データ ソースを追加するには、Tomcat のserver.xml を編集する必要があります。Adding a shared, server-level data source will require you to edit Tomcat's server.xml. まず、スタートアップ スクリプトをアップロードし、 [構成] > [スタートアップ コマンド] でスクリプトへのパスを設定します。First, upload a startup script and set the path to the script in Configuration > Startup Command. FTP を使用してスタートアップ スクリプトをアップロードできます。You can upload the startup script using FTP.

スタートアップ スクリプトによって、server.xml ファイルへの xsl 変換が作成され、結果の xml ファイルが /usr/local/tomcat/conf/server.xml に出力されます。Your startup script will make an xsl transform to the server.xml file and output the resulting xml file to /usr/local/tomcat/conf/server.xml. スタートアップ スクリプトでは、apk を使用して libxslt をインストールする必要があります。The startup script should install libxslt via apk. xsl ファイルとスタートアップ スクリプトは FTP 経由でアップロードできます。Your xsl file and startup script can be uploaded via FTP. 以下にスタートアップ スクリプトの例を示します。Below is an example startup script.

# Install libxslt. Also copy the transform file to /home/tomcat/conf/
apk add --update libxslt

# Usage: xsltproc --output output.xml style.xsl input.xml
xsltproc --output /home/tomcat/conf/server.xml /home/tomcat/conf/transform.xsl /usr/local/tomcat/conf/server.xml

xsl ファイルの例は次のとおりです。An example xsl file is provided below. この xsl ファイルの例では、新しいコネクタ ノードが Tomcat server.xml に追加されます。The example xsl file adds a new connector node to the Tomcat server.xml.

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes"/>

  <xsl:template match="@* | node()" name="Copy">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="@* | node()" mode="insertConnector">
    <xsl:call-template name="Copy" />
  </xsl:template>

  <xsl:template match="comment()[not(../Connector[@scheme = 'https']) and
                                 contains(., '&lt;Connector') and
                                 (contains(., 'scheme=&quot;https&quot;') or
                                  contains(., &quot;scheme='https'&quot;))]">
    <xsl:value-of select="." disable-output-escaping="yes" />
  </xsl:template>

  <xsl:template match="Service[not(Connector[@scheme = 'https'] or
                                   comment()[contains(., '&lt;Connector') and
                                             (contains(., 'scheme=&quot;https&quot;') or
                                              contains(., &quot;scheme='https'&quot;))]
                                  )]
                      ">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()" mode="insertConnector" />
    </xsl:copy>
  </xsl:template>

  <!-- Add the new connector after the last existing Connnector if there is one -->
  <xsl:template match="Connector[last()]" mode="insertConnector">
    <xsl:call-template name="Copy" />

    <xsl:call-template name="AddConnector" />
  </xsl:template>

  <!-- ... or before the first Engine if there is no existing Connector -->
  <xsl:template match="Engine[1][not(preceding-sibling::Connector)]"
                mode="insertConnector">
    <xsl:call-template name="AddConnector" />

    <xsl:call-template name="Copy" />
  </xsl:template>

  <xsl:template name="AddConnector">
    <!-- Add new line -->
    <xsl:text>&#xa;</xsl:text>
    <!-- This is the new connector -->
    <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" 
               maxThreads="150" scheme="https" secure="true" 
               keystroreFile="${{user.home}}/.keystore" keystorePass="changeit"
               clientAuth="false" sslProtocol="TLS" />
  </xsl:template>

</xsl:stylesheet>

構成を完了するFinalize configuration

最後に、ドライバーの JAR を Tomcat クラスパス内に配置し、App Service を再起動します。Finally, place the driver JARs in the Tomcat classpath and restart your App Service.

  1. JDBC ドライバー ファイルが Tomcat クラスローダーで確実に使用できるように、これらのファイルを /home/tomcat/lib ディレクトリに配置します。Ensure that the JDBC driver files are available to the Tomcat classloader by placing them in the /home/tomcat/lib directory. (このディレクトリがまだ存在しない場合は作成します。)これらのファイルを App Service インスタンスにアップロードするには、次の手順を行います。(Create this directory if it does not already exist.) To upload these files to your App Service instance, perform the following steps:

    1. Cloud Shell で、Web アプリ拡張機能をインストールします。In the Cloud Shell, install the webapp extension:
    az extension add -–name webapp
    
    1. 次の CLI コマンドを実行して、ローカル システムから App Service への SSH トンネルを作成します。Run the following CLI command to create an SSH tunnel from your local system to App Service:
    az webapp remote-connection create --resource-group <resource-group-name> --name <app-name> --port <port-on-local-machine>
    
    1. SFTP クライアントを使用してローカルのトンネル ポートに接続し、ファイルを /home/tomcat/lib フォルダーにアップロードします。Connect to the local tunneling port with your SFTP client and upload the files to the /home/tomcat/lib folder.

    あるいは、FTP クライアントを使用して JDBC ドライバーをアップロードできます。Alternatively, you can use an FTP client to upload the JDBC driver. FTP 資格情報を取得するための手順に従ってください。Follow these instructions for getting your FTP credentials.

  2. サーバー レベルのデータ ソースを作成した場合は、App Service Linux アプリケーションを再起動します。If you created a server-level data source, restart the App Service Linux application. Tomcat が CATALINA_BASE/home/tomcat にリセットし、更新された構成を使用します。Tomcat will reset CATALINA_BASE to /home/tomcat and use the updated configuration.

JBoss EAPJBoss EAP

JBoss EAP を使用してデータ ソースを登録する場合の 3 つの主要なステップは、JDBC ドライバーのアップロード、モジュールとしての JDBC ドライバーの追加、モジュールの登録です。There are three core steps when registering a data source with JBoss EAP: uploading the JDBC driver, adding the JDBC driver as a module, and registering the module. App Service はステートレスのホスティング サービスであるため、データ ソース モジュールを追加および登録するための構成コマンドは、スクリプト化して、コンテナーの起動時に適用する必要があります。App Service is a stateless hosting service, so the configuration commands for adding and registering the data source module must be scripted and applied as the container starts.

  1. データベースの JDBC ドライバーを入手します。Obtain your database's JDBC driver.

  2. JDBC ドライバー用の XML モジュール定義ファイルを作成します。Create an XML module definition file for the JDBC driver. PostgreSQL のモジュール定義の例を次に示します。The example shown below is a module definition for PostgreSQL.

    <?xml version="1.0" ?>
    <module xmlns="urn:jboss:module:1.1" name="org.postgres">
        <resources>
        <!-- ***** IMPORTANT : REPLACE THIS PLACEHOLDER *******-->
        <resource-root path="/home/site/deployments/tools/postgresql-42.2.12.jar" />
        </resources>
        <dependencies>
            <module name="javax.api"/>
            <module name="javax.transaction.api"/>
        </dependencies>
    </module>
    
  3. JBoss CLI コマンドが含まれる jboss-cli-commands.cli という名前のファイルを作成します。Put your JBoss CLI commands into a file named jboss-cli-commands.cli. JBoss コマンドを使用して、モジュールを追加し、データ ソースとして登録する必要があります。The JBoss commands must add the module and register it as a data source. 次の例では、PostgreSQL 用の JBoss CLI コマンドを示します。The example below shows the JBoss CLI commands for PostgreSQL.

    #!/usr/bin/env bash
    module add --name=org.postgres --resources=/home/site/deployments/tools/postgresql-42.2.12.jar --module-xml=/home/site/deployments/tools/postgres-module.xml
    
    /subsystem=datasources/jdbc-driver=postgres:add(driver-name="postgres",driver-module-name="org.postgres",driver-class-name=org.postgresql.Driver,driver-xa-datasource-class-name=org.postgresql.xa.PGXADataSource)
    
    data-source add --name=postgresDS --driver-name=postgres --jndi-name=java:jboss/datasources/postgresDS --connection-url=${POSTGRES_CONNECTION_URL,env.POSTGRES_CONNECTION_URL:jdbc:postgresql://db:5432/postgres} --user-name=${POSTGRES_SERVER_ADMIN_FULL_NAME,env.POSTGRES_SERVER_ADMIN_FULL_NAME:postgres} --password=${POSTGRES_SERVER_ADMIN_PASSWORD,env.POSTGRES_SERVER_ADMIN_PASSWORD:example} --use-ccm=true --max-pool-size=5 --blocking-timeout-wait-millis=5000 --enabled=true --driver-class=org.postgresql.Driver --exception-sorter-class-name=org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter --jta=true --use-java-context=true --valid-connection-checker-class-name=org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker
    
  4. JBoss CLI コマンドを呼び出すスタートアップ スクリプト startup_script.sh を作成します。Create a startup script, startup_script.sh that calls the JBoss CLI commands. 次の例は、jboss-cli-commands.cli を呼び出す方法を示したものです。The example below shows how to call your jboss-cli-commands.cli. 後で、コンテナーの起動時にこのスクリプトを実行するように App Service を構成します。Later you will configre App Service to run this script when the container starts.

    $JBOSS_HOME/bin/jboss-cli.sh --connect --file=/home/site/deployments/tools/jboss-cli-commands.cli
    
  5. 任意の FTP クライアントを使用して、JDBC ドライバー、jboss-cli-commands.clistartup_script.sh、およびモジュール定義を /site/deployments/tools/ にアップロードします。Using an FTP client of your choice, upload your JDBC driver, jboss-cli-commands.cli, startup_script.sh, and the module definition to /site/deployments/tools/.

  6. コンテナーの起動時に startup_script.sh を実行するようにサイトを構成します。Configure your site to run startup_script.sh when the container starts. Azure portal で、 [構成] > [一般設定] > [スタートアップ コマンド] に移動します。In the Azure Portal, navigate to Configuration > General Settings > Startup Command. スタートアップ コマンド フィールドを /home/site/deployments/tools/startup_script.sh に設定します。Set the startup command field to /home/site/deployments/tools/startup_script.sh. 変更内容を 保存 します。Save your changes.

データソースが JBoss サーバーに追加されたことを確認するには、webapp に SSH で接続して、$JBOSS_HOME/bin/jboss-cli.sh --connect を実行します。To confirm that the datasource was added to the JBoss server, SSH into your webapp and run $JBOSS_HOME/bin/jboss-cli.sh --connect. JBoss に接続したら、/subsystem=datasources:read-resource を実行してデータ ソースの一覧を表示します。Once you are connected to JBoss run the /subsystem=datasources:read-resource to print a list of the data sources.

ログの robots933456robots933456 in logs

コンテナー ログで次のメッセージが表示されることがあります。You may see the following message in the container logs:

2019-04-08T14:07:56.641002476Z "-" - - [08/Apr/2019:14:07:56 +0000] "GET /robots933456.txt HTTP/1.1" 404 415 "-" "-"

このメッセージは無視してかまいません。You can safely ignore this message. /robots933456.txt は、コンテナーが要求を処理できるかどうかを調べるために App Service が使用するダミーの URL パスです。/robots933456.txt is a dummy URL path that App Service uses to check if the container is capable of serving requests. 404 応答は、パスが存在しないことを示すだけですが、コンテナーが正常であり、要求に応答できる状態であることを App Service に知らせます。A 404 response simply indicates that the path doesn't exist, but it lets App Service know that the container is healthy and ready to respond to requests.

Java ランタイム バージョンの選択Choosing a Java runtime version

App Service を使用すると、ユーザーは JVM のメジャー バージョン (Java 8 や Java 11 など) だけでなく、マイナー バージョン (1.8.0_232 や 11.0.5 など) も選択できます。App Service allows users to choose the major version of the JVM, such as Java 8 or Java 11, as well as the minor version, such as 1.8.0_232 or 11.0.5. 新しいマイナー バージョンが利用可能になったらマイナー バージョンを自動的に更新するように選択することもできます。You can also choose to have the minor version automatically updated as new minor versions become available. ほとんどの場合、運用サイトにおいては、固定されたマイナー JVM バージョンを使用する必要があります。In most cases, production sites should use pinned minor JVM versions. これにより、マイナー バージョンの自動更新の間に、予期しない停止が発生するのを防ぐことができます。This will prevent unnanticipated outages during a minor version auto-update.

マイナー バージョンの固定を選択した場合は、サイトの JVM のマイナー バージョンを定期的に更新する必要があります。If you choose to pin the minor version, you will need to periodically update the JVM minor version on the site. アプリケーションが新しいマイナー バージョンで確実に実行されるようにするには、ステージング スロットを作成し、ステージング サイトでマイナー バージョンをインクリメントします。To ensure that your application runs on the newer minor version, create a staging slot and increment the minor version on the staging site. 新しいマイナー バージョンでアプリケーションが正しく実行されることを確認したら、ステージング スロットと運用スロットを入れ替えることができます。Once you have confirmed the application runs correctly on the new minor version, you can swap the staging and production slots.

JBoss EAP のハードウェア オプションJBoss EAP hardware options

JBoss EAP は、Premium および Isolated のハードウェア オプションでのみ使用できます。JBoss EAP is only available on the Premium and Isolated hardware options. パブリック プレビュー中に Free、Shared、Basic、または Standard レベルで JBoss EAP サイトを作成したお客様は、予期しない動作を避けるために、Premium または Isolated のハードウェア レベルにスケールアップする必要があります。Customers that created a JBoss EAP site on a Free, Shared, Basic, or Standard tier during the public preview should scale up to Premium or Isolated hardware tier to avoid unexpected behavior.

Java ランタイムのサポート ステートメントJava runtime statement of support

JDK のバージョンとメンテナンスJDK versions and maintenance

Azure でサポートされている Java Development Kit (JDK) は、Azul Systems で提供されている Zulu です。Azure's supported Java Development Kit (JDK) is Zulu provided through Azul Systems. OpenJDK の Azul Zulu Enterprise ビルドは、Microsoft および Azul Systems でサポートされる、Azure と Azure Stack 用の OpenJDK の無料でマルチプラット フォーム対応の実稼働可能なディストリビューションです。Azul Zulu Enterprise builds of OpenJDK are a no-cost, multi-platform, production-ready distribution of the OpenJDK for Azure and Azure Stack backed by Microsoft and Azul Systems. これらには、Java SE アプリケーションを構築および実行するためのすべてのコンポーネントが含まれています。They contain all the components for building and running Java SE applications. Java JDK のインストールに関するページから JDK をインストールできます。You can install the JDK from Java JDK Installation.

メジャー バージョンの更新プログラムは、Azure App Service の新しいランタイム オプションによって提供されます。Major version updates will be provided through new runtime options in Azure App Service. お客様は、App Service デプロイを構成することで Java のこれらの新しいバージョンに更新します。また、主要な更新プログラムをテストし、ニーズを満たしていることを確認する必要があります。Customers update to these newer versions of Java by configuring their App Service deployment and are responsible for testing and ensuring the major update meets their needs.

サポートされている JDK は、毎年 1 月、4 月、7 月、および 10 月の四半期ごとに自動的に適用されます。Supported JDKs are automatically patched on a quarterly basis in January, April, July, and October of each year. Azure 上の Java の詳細については、こちらのサポート ドキュメントを参照してください。For more information on Java on Azure, please see this support document.

セキュリティ更新プログラムSecurity updates

重大なセキュリティの脆弱性のパッチおよび修正プログラムは、Azul Systems から利用可能になり次第リリースされます。Patches and fixes for major security vulnerabilities will be released as soon as they become available from Azul Systems. "重大な" 脆弱性は、NIST Common Vulnerability Scoring System バージョン 2 で 9.0 以上の基本スコアにより定義されます。A "major" vulnerability is defined by a base score of 9.0 or higher on the NIST Common Vulnerability Scoring System, version 2.

Tomcat 8.0 は、2018 年 9 月 30 日にサポートが終了 (EOL) しました。Tomcat 8.0 has reached End of Life (EOL) as of September 30, 2018. ランタイムは Azure App Service で引き続き機能しますが、Azure では Tomcat 8.0 へのセキュリティ更新プログラムは適用されません。While the runtime is still available on Azure App Service, Azure will not apply security updates to Tomcat 8.0. 可能であれば、Tomcat 8.5 または 9.0 にアプリケーションを移行してください。If possible, migrate your applications to Tomcat 8.5 or 9.0. Azure App Service では、Tomcat 8.5 と 9.0 の両方を使用できます。Both Tomcat 8.5 and 9.0 are available on Azure App Service. 詳細については、Tomcat の公式 Web サイトを参照してください。See the official Tomcat site for more information.

廃止と提供終了Deprecation and retirement

サポートされている Java ランタイムが廃止予定の場合、影響を受けるランタイムを使用している Azure の開発者には、ランタイム終了の少なくとも 6 か月前までに廃止の通知が送信されます。If a supported Java runtime will be retired, Azure developers using the affected runtime will be given a deprecation notice at least six months before the runtime is retired.

ローカル開発Local development

開発者は、Azul のダウンロード サイトから運用エディションの Azul Zulu Enterprise JDK をローカルでのデプロイ用にダウンロードできます。Developers can download the Production Edition of Azul Zulu Enterprise JDK for local development from Azul's download site.

開発サポートDevelopment support

正規の Azure サポート プランを利用して Azure または Azure Stack 用の開発を行うとき、Microsoft では Azure がサポートする Azul Zulu JDK の製品サポートを利用できます。Product support for the Azure-supported Azul Zulu JDK is available through Microsoft when developing for Azure or Azure Stack with a qualified Azure support plan.

次のステップNext steps

Java 開発者向けの Azure センターにアクセスして、Azure クイック スタート、チュートリアル、および Java リファレンス ドキュメントを入手してください。Visit the Azure for Java Developers center to find Azure quickstarts, tutorials, and Java reference documentation.

Java 開発に限られない、App Service for Linux の使用に関する一般的な質問については、App Service Linux の FAQ で回答されています。General questions about using App Service for Linux that aren't specific to the Java development are answered in the App Service Linux FAQ.