チュートリアル:Azure データベースへのパスワードなしの接続を使用して Spring アプリケーションを Azure Spring Apps にデプロイする
この記事では、Azure Spring Apps にデプロイされた Spring Boot アプリケーションで Azure データベースへのパスワードなしの接続を使用する方法について説明します。
このチュートリアルでは、Azure portal または Azure CLI を使用して、次のタスクを完了します。 どちらの方法も、次の手順で説明します。
- Azure Spring Apps のインスタンスをプロビジョニングします。
- アプリをビルドして Azure Spring Apps にデプロイします。
- マネージド ID を使用して Azure データベースに接続されているアプリを実行します。
手記
このチュートリアルは、R2DBC では機能しません。
前提 条件
- Azure サブスクリプション。 まだお持ちでない場合は、開始する前に 無料アカウント を作成してください。
- Azure CLI 2.45.0 以降が必要です。
- Azure Spring Apps 拡張機能。
az extension add --name spring
コマンドを使用して拡張機能をインストールできます。 - Java Development Kit (JDK)、バージョン 8、11、または 17。
- Git クライアント。
- cURL または機能をテストするための類似の HTTP ユーティリティ。
- Azure Database for MySQL を実行する場合は、MySQL コマンド ライン クライアント。 一般的なクライアント ツールである mysql.exe コマンドライン ツールを使用して、Azure Cloud Shell を使用してサーバーに接続できます。 または、ローカル環境で
mysql
コマンド ラインを使用することもできます。 - ODBC Driver 18 for SQL Server が、Azure SQL Database の実行を選択した場合に使用されます。
作業環境を準備する
まず、次のコマンドを使用して、いくつかの環境変数を設定します。
export AZ_RESOURCE_GROUP=passwordless-tutorial-rg
export AZ_DATABASE_SERVER_NAME=<YOUR_DATABASE_SERVER_NAME>
export AZ_DATABASE_NAME=demodb
export AZ_LOCATION=<YOUR_AZURE_REGION>
export AZ_SPRING_APPS_SERVICE_NAME=<YOUR_AZURE_SPRING_APPS_SERVICE_NAME>
export AZ_SPRING_APPS_APP_NAME=hellospring
export AZ_DB_ADMIN_USERNAME=<YOUR_DB_ADMIN_USERNAME>
export AZ_DB_ADMIN_PASSWORD=<YOUR_DB_ADMIN_PASSWORD>
export AZ_USER_IDENTITY_NAME=<YOUR_USER_ASSIGNED_MANAGEMED_IDENTITY_NAME>
プレースホルダーを次の値に置き換えます。この値は、この記事全体で使用されます。
<YOUR_DATABASE_SERVER_NAME>
: Azure Database サーバーの名前。Azure 全体で一意である必要があります。<YOUR_AZURE_REGION>
: 使用する Azure リージョン。eastus
は既定で使用できますが、住んでいる場所に近いリージョンを構成することをお勧めします。az account list-locations
を使用すると、使用可能なリージョンの完全な一覧を確認できます。<YOUR_AZURE_SPRING_APPS_SERVICE_NAME>
: Azure Spring Apps インスタンスの名前。 名前の長さは 4 ~ 32 文字にする必要があり、小文字、数字、ハイフンのみを使用できます。 サービス名の最初の文字は文字でなければならず、最後の文字は文字または数字である必要があります。<AZ_DB_ADMIN_USERNAME>
: Azure データベース サーバーの管理者ユーザー名。<AZ_DB_ADMIN_PASSWORD>
: Azure データベース サーバーの管理者パスワード。<YOUR_USER_ASSIGNED_MANAGEMED_IDENTITY_NAME>
: ユーザー割り当てマネージド ID サーバーの名前。Azure 全体で一意である必要があります。
Azure Spring Apps のインスタンスをプロビジョニングする
Azure Spring Apps のインスタンスをプロビジョニングするには、次の手順に従います。
次のコマンドを使用して、Azure Spring Apps 拡張機能で Azure CLI を更新します。
az extension update --name spring
Azure CLI にサインインし、次のコマンドを使用してアクティブなサブスクリプションを選択します。
az login az account list --output table az account set --subscription <name-or-ID-of-subscription>
次のコマンドを使用して、Azure Spring Apps サービスと Azure Spring Apps サービスのインスタンスを含むリソース グループを作成します。
az group create \ --name $AZ_RESOURCE_GROUP \ --location $AZ_LOCATION az spring create \ --resource-group $AZ_RESOURCE_GROUP \ --name $AZ_SPRING_APPS_SERVICE_NAME
Azure データベース インスタンスを作成する
Azure Database インスタンスをプロビジョニングするには、次の手順に従います。
次のコマンドを使用して、Azure Database for MySQL サーバーを作成します。
az mysql flexible-server create \ --resource-group $AZ_RESOURCE_GROUP \ --name $AZ_DATABASE_SERVER_NAME \ --location $AZ_LOCATION \ --admin-user $AZ_DB_ADMIN_USERNAME \ --admin-password $AZ_DB_ADMIN_PASSWORD \ --yes
手記
admin-user
パラメーターまたは admin-password
パラメーターを指定しない場合、システムは既定で既定の管理者ユーザーまたはランダムな管理者パスワードを生成します。
次のコマンドを使用して、新しいデータベースを作成します。
az mysql flexible-server db create \ --resource-group $AZ_RESOURCE_GROUP \ --database-name $AZ_DATABASE_NAME \ --server-name $AZ_DATABASE_SERVER_NAME
パブリック エンドポイントが割り当てられたアプリを作成する
次のコマンドを使用してアプリを作成します。
az spring app create \
--resource-group $AZ_RESOURCE_GROUP \
--service $AZ_SPRING_APPS_SERVICE_NAME \
--name $AZ_SPRING_APPS_APP_NAME \
--runtime-version=Java_17
--assign-endpoint true
Azure Spring Apps を Azure データベースに接続する
まず、Azure CLI のパスワードレス拡張機能
az extension add --name serviceconnector-passwordless --upgrade
次に、次のコマンドを使用して、Microsoft Entra 認証用のユーザー割り当てマネージド ID を作成します。 詳細については、「Azure Database for MySQL - フレキシブル サーバーの Microsoft Entra 認証を設定する」を参照してください。
export AZ_IDENTITY_RESOURCE_ID=$(az identity create \
--name $AZ_USER_IDENTITY_NAME \
--resource-group $AZ_RESOURCE_GROUP \
--query id \
--output tsv)
重要
ユーザー割り当て ID を作成したら、全体管理者または特権ロール管理者 に依頼して、この ID に対して次のアクセス許可を付与するように依頼します:User.Read.All
、GroupMember.Read.All
、および Application.Read.ALL
。 詳細については、「Active Directory 認証の
次に、次のコマンドを使用して、データベースへのパスワードなしの接続を作成します。
az spring connection create mysql-flexible \
--resource-group $AZ_RESOURCE_GROUP \
--service $AZ_SPRING_APPS_SERVICE_NAME \
--app $AZ_SPRING_APPS_APP_NAME \
--target-resource-group $AZ_RESOURCE_GROUP \
--server $AZ_DATABASE_SERVER_NAME \
--database $AZ_DATABASE_NAME \
--system-identity mysql-identity-id=$AZ_IDENTITY_RESOURCE_ID
この Service Connector コマンドは、バックグラウンドで次のタスクを実行します。
Azure Spring Apps によってホストされているアプリ
$AZ_SPRING_APPS_APP_NAME
に対してシステム割り当てマネージド ID を有効にします。Microsoft Entra 管理者を現在サインインしているユーザーに設定します。
手順 1 で作成したマネージド ID の
$AZ_SPRING_APPS_SERVICE_NAME/apps/$AZ_SPRING_APPS_APP_NAME
という名前のデータベース ユーザーを追加し、データベース$AZ_DATABASE_NAME
のすべての権限をこのユーザーに付与します。spring.datasource.url
とspring.datasource.username
の 2 つの構成をアプリ$AZ_SPRING_APPS_APP_NAME
に追加します。手記
The subscription is not registered to use Microsoft.ServiceLinker
エラー メッセージが表示された場合は、コマンドaz provider register --namespace Microsoft.ServiceLinker
を実行して Service Connector リソース プロバイダーを登録し、接続コマンドをもう一度実行します。
アプリをビルドしてデプロイする
次の手順では、サンプル アプリケーションをダウンロード、構成、ビルド、デプロイする方法について説明します。
次のコマンドを使用して、サンプル コード リポジトリを複製します。
git clone https://github.com/Azure-Samples/quickstart-spring-data-jdbc-mysql passwordless-sample
pom.xml ファイルに次の依存関係を追加します。
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-jdbc-mysql</artifactId> </dependency>
この依存関係により、Spring Cloud Azure スターターのサポートが追加されます。
手記
部品表 (BOM) を使用して Spring Cloud Azure ライブラリのバージョンを管理する方法の詳細については、「Spring Cloud Azure 開発者ガイドの の概要」セクションを参照してください。
次のコマンドを使用して、application.properties ファイルを更新します。
cat << EOF > passwordless-sample/src/main/resources/application.properties logging.level.org.springframework.jdbc.core=DEBUG spring.datasource.azure.passwordless-enabled=true spring.sql.init.mode=always EOF
Maven を使用してプロジェクトをビルドするには、次のコマンドを使用します。
cd passwordless-sample ./mvnw clean package -DskipTests
次のコマンドを使用して、アプリの ターゲット/demo-0.0.1-SNAPSHOT.jar ファイルをデプロイします。
az spring app deploy \ --name $AZ_SPRING_APPS_APP_NAME \ --service $AZ_SPRING_APPS_SERVICE_NAME \ --resource-group $AZ_RESOURCE_GROUP \ --artifact-path target/demo-0.0.1-SNAPSHOT.jar
次のコマンドを使用して、デプロイ後にアプリの状態を照会します。
az spring app list \ --service $AZ_SPRING_APPS_SERVICE_NAME \ --resource-group $AZ_RESOURCE_GROUP \ --output table
次の例のような出力が表示されます。
Name Location ResourceGroup Production Deployment Public Url Provisioning Status CPU Memory Running Instance Registered Instance Persistent Storage ----------------- ---------- --------------- ----------------------- --------------------------------------------------- --------------------- ----- -------- ------------------ --------------------- -------------------- <app name> eastus <resource group> default Succeeded 1 2 1/1 0/1 -
アプリケーションをテストする
アプリケーションをテストするには、cURL を使用できます。 まず、次のコマンドを使用して、データベースに新しい "todo" 項目を作成します。
curl --header "Content-Type: application/json" \
--request POST \
--data '{"description":"configuration","details":"congratulations, you have set up JDBC correctly!","done": "true"}' \
https://${AZ_SPRING_APPS_SERVICE_NAME}-hellospring.azuremicroservices.io
このコマンドは、次の例に示すように、作成された項目を返します。
{"id":1,"description":"configuration","details":"congratulations, you have set up JDBC correctly!","done":true}
次に、次の cURL 要求を使用してデータを取得します。
curl https://${AZ_SPRING_APPS_SERVICE_NAME}-hellospring.azuremicroservices.io
このコマンドは、次の例に示すように、作成した項目を含む "todo" 項目の一覧を返します。
[{"id":1,"description":"configuration","details":"congratulations, you have set up JDBC correctly!","done":true}]
リソースのクリーンアップ
このチュートリアルで使用したすべてのリソースをクリーンアップするには、次のコマンドを使用してリソース グループを削除します。
az group delete \
--name $AZ_RESOURCE_GROUP \
--yes