Tomcat アプリを Azure App Service にデプロイする

この記事では、Microsoft Entra アカウントによるサインインを使用して、Tomcat アプリを Azure App Service にデプロイする方法について説明します。

この記事は、次のいずれかの記事を [ローカルで実行] タブを使用して完了し、現在 Azure へのデプロイを計画している読者を想定しています。 以降の手順は、次の記事に記載された「Azure へのデプロイ」タブの手順と同じです。

前提条件

Maven プラグインを構成する

Azure App Service に対するデプロイ プロセスでは、Azure CLI からの Azure 資格情報が自動的に使用されます。 Azure CLI がローカルにインストールされていない場合、Maven プラグインは OAuth またはデバイス ログインを使用して認証します。 詳細については、Maven プラグインによる認証に関するページを参照してください。

プラグインを構成するには、次の手順に従います。

  1. 次のコマンドを実行してデプロイを構成します。 このコマンドは、Azure App Service オペレーティング システム、Java バージョン、および Tomcat バージョンを設定するのに役立ちます。

    mvn com.microsoft.azure:azure-webapp-maven-plugin:2.12.0:config
    
  2. 新しい実行構成を作成するで、Y を押して、Enter を押します。

  3. Windows の場合は、OS の値を定義します1 を押し、Linux の場合は 2 を押してから、Enter を押します。

  4. Java 11 の場合は javaVersion の値を定義します2 を押し、Enter を押します。

  5. Tomcat 9.0 の場合は、webContainer の値を定義します4 を押し、Enter を押します。

  6. pricingTier の値を定義しますEnter を押し、既定値である P1v2 層を選択します。

  7. 確認Y を押し、Enter を押します。

デプロイ プロセスの出力例を次に示します。

Please confirm webapp properties
AppName : msal4j-servlet-auth-1707209552268
ResourceGroup : msal4j-servlet-auth-1707209552268-rg
Region : centralus
PricingTier : P1v2
OS : Linux
Java Version: Java 11
Web server stack: Tomcat 9.0
Deploy to slot : false
Confirm (Y/N) [Y]: [INFO] Saving configuration to pom.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  37.112 s
[INFO] Finished at: 2024-02-06T08:53:02Z
[INFO] ------------------------------------------------------------------------

選択内容の確認後、プラグインによって、アプリを Azure App Service で実行するよう構成するのに必要なプラグイン要素および設定が、プロジェクトの pom.xml ファイルに追加されます。

pom.xml ファイルの関連部分は、次の例のようになります。

<build>
    <plugins>
        <plugin>
            <groupId>com.microsoft.azure</groupId>
            <artifactId>>azure-webapp-maven-plugin</artifactId>
            <version>x.xx.x</version>
            <configuration>
                <schemaVersion>v2</schemaVersion>
                <resourceGroup>your-resourcegroup-name</resourceGroup>
                <appName>your-app-name</appName>
            ...
            </configuration>
        </plugin>
    </plugins>
</build>

pom.xml 内で App Service の構成を直接変更できます。 一般的な構成をいくつか次の表に示します。

プロパティ Required 説明
subscriptionId false サブスクリプション ID です。
resourceGroup true アプリの Azure リソース グループ。
appName true アプリの名前。
region false アプリをホストするリージョン。 既定値は centralus です。 有効なリージョンについては、「サポートされているリージョン」を参照してください。
pricingTier false アプリの価格レベル。 運用環境のワークロードでは、既定値は P1v2 です。 Java の開発とテストに推奨される最小値は B2 です。 詳細については、「App Service の価格」を参照してください。
runtime false ランタイム環境の構成。 詳細については、「構成の詳細」を参照してください。
deployment false デプロイの構成。 詳細については、「構成の詳細」を参照してください。

構成の完全な一覧については、プラグインのリファレンス ドキュメントを参照してください。 すべての Azure Maven プラグインでは、一連の構成が共通しています。 これらの構成については、「共通の構成」を参照してください。 Azure App Service に固有の構成については、「Azure アプリ: 構成の詳細」を参照してください。

後で使用するために appNameresourceGroup の値を保存しておいてください。

アプリのデプロイを準備する

アプリケーションを App Service にデプロイすると、リダイレクト URL が、デプロイされたアプリ インスタンスのリダイレクト URL に変更されます。 これらの設定をプロパティー ファイルで変更しするには、次の手順を使用します。

  1. アプリの authentication.properties ファイルに移動し、app.homePage の値をデプロイされたアプリのドメイン名に変更します (次の例を参照)。 たとえば、前の手順でアプリ名に example-domain を選択している場合は、app.homePage の値に https://example-domain.azurewebsites.net を使用する必要があります。 プロトコルを http から https に変更することも必要です。

    # app.homePage is by default set to dev server address and app context path on the server
    # for apps deployed to azure, use https://your-sub-domain.azurewebsites.net
    app.homePage=https://<your-app-name>.azurewebsites.net
    
  2. このファイルを保存した後、次のコマンドを使用してアプリをリビルドします。

    mvn clean package
    

Microsoft Entra IDアプリの登録を更新する

リダイレクト URI は Azure App Service にデプロイされたアプリに変更されるため、Microsoft Entra ID アプリの登録でも、リダイレクト URI を変更する必要があります。 次の手順に従って、この変更を行います。

  1. 開発者用の Microsoft ID プラットフォームの [アプリの登録] ページに移動します。

  2. 検索ボックスを使用してアプリの登録を検索します (例: java-servlet-webapp-authentication)。

  3. 名前を選択して、アプリの登録を開きます。

  4. コマンドメニューから 認証 を選択します。

  5. Web - リダイレクト URI セクションで、URI の追加を選択します。

  6. アプリの URI を、/auth/redirect を追加して入力します。たとえば https://<your-app-name>.azurewebsites.net/auth/redirect のようになります。

  7. [保存] を選択します。

アプリケーションのデプロイ

以上で、アプリを Azure App Service にデプロイする準備ができました。 次のコマンドを使用して、デプロイを実行するために Azure 環境にサインインしていることを確認します。

az login

pom.xml ファイルにすべての構成が準備されています。これで、次のコマンドを使用して Java アプリを Azure にデプロイできます。

mvn package azure-webapp:deploy

デプロイが完了すると、アプリケーションを http://<your-app-name>.azurewebsites.net/ で起動できます。 ローカル Web ブラウザーで URL を開くと、msal4j-servlet-auth アプリケーションのスタート ページが表示されます。

シークレット値を削除する

アプリケーションの authentication.properties ファイルには、クライアント シークレットの値が aad.secret パラメーターに格納されています。 この値をこのファイルに保持しないでください。 Git リポジトリにコミットした場合にリスクが発生します。

セキュリティを強化するために、この値を Azure Key Vault に格納し、Key Vault 参照を使用してアプリケーションで使用することができます。

aad.secret の値を Key Vault に移動し、コードで使用するには、次の手順に従います。

  1. 次のコマンドを使用して Azure Key Vault インスタンスを作成します:

    export RESOURCE_GROUP=<your-resource-group-name>
    export KEY_VAULT=<your-key-vault-name>
    az keyvault create \
        --resource-group $RESOURCE_GROUP \
        --name $KEY_VAULT
    
  2. 次のコマンドを使用して、aad.secret のシークレット値をキー コンテナーに新しいシークレットとして追加します。

    az keyvault secret set \
        --vault-name $KEY_VAULT \
        --name "AADSECRET" \
        --value "<the-value-of-your-client-secret>"
    
  3. そのために、キー コンテナーへのアクセス許可をアプリに付与する必要があります。 最初に次のコマンドを使用して、新しい ID をアプリに作成します。

    export WEB_APP_NAME=<your-web-app-name>
    az webapp identity assign \
        --resource-group $RESOURCE_GROUP \
        --name $WEB_APP_NAME
    
  4. 次のコマンドを使用して、Key Vault 内のシークレットにこの ID getlist のアクセス許可を付与します。

    export IDENTITY=$(az webapp identity show \
        --resource-group $RESOURCE_GROUP \
        --name $WEB_APP_NAME \
        --query principalId \
        --output tsv)
    az keyvault set-policy \
        --resource-group $RESOURCE_GROUP \
        --name $KEY_VAULT \
        --secret-permissions get list \
        --object-id $IDENTITY
    
  5. 次のコマンドを使用して、キー コンテナー内のシークレットに対してキー コンテナー参照を使用する設定をアプリに作成します。 この設定により、シークレットの値を環境変数としてアプリで使用できます。

    az webapp config appsettings set \
        --resource-group $RESOURCE_GROUP \
        --name $WEB_APP_NAME \
        --settings AADSECRET='@Microsoft.KeyVault(VaultName=$KEY_VAULT;SecretName=AADSECRET)'
    
  6. この値を環境変数から読み込むには、次のコードを使用します。 \src\main\java\com\microsoft\azuresamples\msal4j\helpers\Config.java ファイルの 41 行目で、現状のステートメントを次の行に変更します。

    public static final String SECRET = System.getenv("AADSECRET");
    
  7. これで、aad.secret キーと、authentication.properties ファイルの値を削除できます。

  8. 次のコマンドを使用してコードを再ビルドします。

    mvn clean package
    
  9. 次のコマンドを使用して、アプリケーションを再デプロイします。

    mvn package azure-webapp:deploy
    

これでデプロイは完了しました。

詳細