Java Spring Boot アプリを Azure Container Apps にデプロイする
この記事では、Microsoft Entra アカウントによるサインインを使用して Java Spring Boot アプリを Azure Container Apps にデプロイする方法について説明します。
この記事は、次のいずれかの記事を [ローカルで実行] タブを使用して完了し、現在 Azure へのデプロイを計画している読者を想定しています。 以降の手順は、次の記事に記載された「Azure へのデプロイ」タブの手順と同じです。
- Microsoft Entra ID を使用して Java Spring Boot アプリをセキュリティで保護する
- Azure Active Directory B2C を使用して Java Spring Boot アプリをセキュリティで保護する
- Java Spring Boot アプリによるユーザーのサインインと Microsoft Graph へのアクセスを有効にする
- ロールとロール要求を使用して Java Spring Boot アプリをセキュリティで保護する
- グループとグループ要求を使用して Java Spring Boot アプリをセキュリティで保護する
前提条件
- Azure アカウント。 アカウントがない場合は、 無料アカウントを作成してください。 続行するには、Azure サブスクリプションの "共同作成者" または "所有者" のアクセス許可が必要です。 詳細については、Azure portal を使用して Azure ロールを割り当てる方法に関するページを参照してください。
- Azure CLI。
- Azure Container Apps CLI 拡張機能バージョン
0.3.47
以上。 最新バージョンをインストールするには、az extension add --name containerapp --upgrade --allow-preview
コマンドを使用します。 - Java Development Kit バージョン 17 以上。
- Maven。
Spring プロジェクトを準備する
次の手順を実行して、プロジェクトを準備します。
次の Maven コマンドを使用して、プロジェクトをビルドします。
mvn clean verify
次のコマンドを使用して、サンプル プロジェクトをローカルで実行します。
mvn spring-boot:run
セットアップ
CLI から Azure にサインインするには、次のコマンドを実行し、プロンプトに従って認証プロセスを完了します。
az login
最新バージョンの CLI を実行していることを確認するには、upgrade コマンドを実行します。
az upgrade
次に、CLI 用の Azure Container Apps 拡張機能をインストールまたは更新します。
Azure CLI で az containerapp
コマンドを実行するときにパラメーターが見つからないというエラーが表示された場合には、最新バージョンの Azure Container Apps 拡張機能がインストールされていることを確認してください。
az extension add --name containerapp --upgrade
Note
2024 年 5 月以降、Azure CLI 拡張機能では、既定でプレビュー機能が有効になりません。 Container Apps のプレビュー機能にアクセスするには、--allow-preview true
を使用して Container Apps 拡張機能をインストールします。
az extension add --name containerapp --upgrade --allow-preview true
最新の拡張機能またはモジュールがインストールされたので、Microsoft.App
および Microsoft.OperationalInsights
名前空間を登録します。
Note
Azure Container Apps リソースは、Microsoft.Web
名前空間から Microsoft.App
名前空間に移行されました。 詳細については、「2022 年 3 月に Microsoft.Web から Microsoft.App に名前空間を移行する」を参照してください。
az provider register --namespace Microsoft.App
az provider register --namespace Microsoft.OperationalInsights
Azure Container Apps 環境を作成する
Azure CLI のセットアップが完了したところで、この記事全体で使用される環境変数を定義できます。
bash シェルで次の変数を定義します。
export RESOURCE_GROUP="ms-identity-containerapps"
export LOCATION="canadacentral"
export ENVIRONMENT="env-ms-identity-containerapps"
export API_NAME="ms-identity-api"
export JAR_FILE_PATH_AND_NAME="./target/ms-identity-spring-boot-webapp-0.0.1-SNAPSHOT.jar"
リソース グループを作成する。
az group create \
--name $RESOURCE_GROUP \
--location $LOCATION \
自動生成されたログ分析ワークスペースを使用して環境を作成します。
az containerapp env create \
--name $ENVIRONMENT \
--resource-group $RESOURCE_GROUP \
--location $LOCATION
コンテナー アプリ環境の既定のドメインを表示します。 このドメインは、後のセクションで使用するためにメモしておきます。
az containerapp env show \
--name $ENVIRONMENT \
--resource-group $RESOURCE_GROUP \
--query properties.defaultDomain
アプリのデプロイを準備する
アプリケーションを Azure Container Apps にデプロイすると、リダイレクト URL は、Azure Container Apps にデプロイされたアプリ インスタンスのリダイレクト URL に変更されます。 application.yml ファイルでこれらの設定を変更するには、次の手順に従います。
アプリの src\main\resources\application.yml ファイルに移動し、
post-logout-redirect-uri
の値をデプロイされたアプリのドメイン名に変更します (次の例を参照)。<API_NAME>
と<default-domain-of-container-app-environment>
は実際の値に置き換えてください。 たとえば、前の手順の Azure Container Apps 環境の既定のドメインを使用し、アプリ名にms-identity-api
を使用する場合、post-logout-redirect-uri
値にはhttps://ms-identity-api.<default-domain>
を使用します。post-logout-redirect-uri: https://<API_NAME>.<default-domain-of-container-app-environment>
このファイルを保存した後、次のコマンドを使用してアプリをリビルドします。
mvn clean package
重要
アプリケーションの application.yml ファイルには、クライアント シークレットの値が client-secret
パラメーターに格納されています。 この値をこのファイルに保持しないでください。 また、ファイルを Git リポジトリにコミットすると、リスクが生じる可能性があります。 推奨される方法については、「Azure Container Apps でシークレットを管理する」を参照してください。
Microsoft Entra IDアプリの登録を更新する
リダイレクト URI は Azure Container Apps にデプロイされたアプリに変更されるため、Microsoft Entra ID アプリの登録でも、リダイレクト URI を変更する必要があります。 次の手順に従って、この変更を行います。
開発者用の Microsoft ID プラットフォームの [アプリの登録] ページに移動します。
検索ボックスを使用してアプリの登録を検索します (例:
java-servlet-webapp-authentication
)。名前を選択して、アプリの登録を開きます。
コマンドメニューから 認証 を選択します。
Web - リダイレクト URI セクションで、URI の追加を選択します。
アプリの URI を、
/login/oauth2/code/
を追加して入力します。たとえばhttps://<containerapp-name>.<default domain of container app environment>/login/oauth2/code/
のようになります。[保存] を選択します。
アプリケーションのデプロイ
JAR パッケージを Azure Container Apps にデプロイします。
Note
必要に応じて、Java ビルド環境変数で JDK のバージョンを指定できます。 詳細については、Azure Container Apps の Java 用ビルド環境変数に関する記事を参照してください。
これで、az containerapp up
CLI コマンドを使って WAR ファイルをデプロイできるようになります。
az containerapp up \
--name $API_NAME \
--resource-group $RESOURCE_GROUP \
--location $LOCATION \
--environment $ENVIRONMENT \
--artifact <JAR_FILE_PATH_AND_NAME> \
--ingress external \
--target-port 8080 \
--query properties.configuration.ingress.fqdn
Note
既定の JDK バージョンは 17 です。 アプリケーションとの互換性のために JDK のバージョンを変更する必要がある場合は、--build-env-vars BP_JVM_VERSION=<YOUR_JDK_VERSION>
引数を使ってバージョン番号を調整できます。
ビルド環境変数の詳細については、Azure Container Apps の Java 用ビルド環境変数に関する記事を参照してください。
アプリを検証する
この例では、containerapp up
コマンドに --query properties.configuration.ingress.fqdn
引数が含まれており、完全修飾ドメイン名 (FQDN) (アプリの URL とも呼ばれます) を返します。 次の手順を使用して、アプリのログをチェックし、デプロイの問題があれば調査します。
デプロイメント セクションの出力ページから出力アプリケーションの URL にアクセスします。
Azure Container Apps インスタンスの[概要] ページのナビゲーション ウィンドウで、[ログ] を選択してアプリのログを確認します。
詳細
- Microsoft IDプラットフォーム (開発者向け Microsoft Entra ID)
- Microsoft Authentication Library (MSAL) の概要
- クイック スタート: Microsoft ID プラットフォームにアプリケーションを登録する
- クイック スタート: Web API にアクセスするようにクライアント アプリケーションを構成する
- Microsoft Entra ID アプリケーションの同意エクスペリエンスについて理解する
- ユーザーおよび管理者の同意について
- Microsoft Entra ID のアプリケーションとサービス プリンシパル オブジェクト
- 各国のクラウド
- MSAL コードのサンプル
- Java 用 Microsoft Entra ID Spring Boot Starter クライアント ライブラリ
- Java 用 Microsoft 認証ライブラリ (MSAL4J)
- MSAL4J Wiki
- ID トークン
- Microsoft ID プラットフォームのアクセス トークン
次のステップ
詳細およびその他のデプロイ オプションについては、次の記事を参照してください。