次の方法で共有


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

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

この記事では、[ローカルで実行] タブのみを使用して次のいずれかの記事を完了し、Azure にデプロイする必要があることを前提としています。 これらの手順は、次の記事の「Azure へのデプロイ」タブの手順と同じです。

前提 条件

  • Azure App Service アプリ向けの Maven プラグイン

    Maven が推奨される開発ツールでない場合は、他のツールを使用する次の同様のチュートリアルを参照してください。

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.13.0:config
    
  2. 新しい実行構成を作成するには、Yを押し、次に Enterキーを押します。

  3. OSの値を定義するには、Windows の場合は 1、Linux の場合は 2 を押し、Enter キー押します。

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

  5. WebContainerの値を定義するには、Tomcat 9.0 のために 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] ------------------------------------------------------------------------

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

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>

App Service の構成は、pom.xmlで直接変更できます。 一般的な構成の一部を次の表に示します。

財産 必須 説明
subscriptionId false サブスクリプション ID。
resourceGroup 本当 アプリの Azure リソース グループ。
appName 本当 アプリの名前。
region false アプリをホストするリージョン。 既定値は centralusです。 有効なリージョンについては、「サポートされているリージョン」を参照してください。
pricingTier false アプリの価格レベル。 既定値は、運用ワークロードに対して P1v2 です。 Java の開発とテストに推奨される最小値は B2です。 詳細については、「App Service の価格」を参照してください。
runtime 誤り ランタイム環境の構成。 詳細については、「構成の詳細」を参照してください。
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 アイデンティティ プラットフォームの アプリ登録 ページにアクセスします。

  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. authentication.properties ファイルから aad.secret キーと値を削除できるようになりました。

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

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

    mvn package azure-webapp:deploy
    

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

詳細情報