次の方法で共有


チュートリアル: 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します。

作業環境を準備する

まず、次のコマンドを使用して、いくつかの環境変数を設定します。

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 のインスタンスをプロビジョニングするには、次の手順に従います。

  1. 次のコマンドを使用して、Azure Spring Apps 拡張機能で Azure CLI を更新します。

    az extension update --name spring
    
  2. Azure CLI にサインインし、次のコマンドを使用してアクティブなサブスクリプションを選択します。

    az login
    az account list --output table
    az account set --subscription <name-or-ID-of-subscription>
    
  3. 次のコマンドを使用して、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 インスタンスをプロビジョニングするには、次の手順に従います。

  1. 次のコマンドを使用して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-password パラメーターを指定admin-userしない場合、システムは既定で既定の管理者ユーザーまたはランダムな管理者パスワードを生成します。

  1. 次のコマンドを使用して、新しいデータベースを作成します。

    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 用の Service Connector パスワードレス拡張機能をインストールします。

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.AllGroupMember.Read.AllApplication.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

このサービス コネクタ コマンドは、バックグラウンドで次のタスクを実行します。

  • 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 のすべての特権を付与します。

  • アプリ$AZ_SPRING_APPS_APP_NAMEspring.datasource.urlspring.datasource.usernameに と の 2 つの構成を追加します。

    注意

    The subscription is not registered to use Microsoft.ServiceLinker」というエラー メッセージが表示される場合は、コマンド az provider register --namespace Microsoft.ServiceLinker を実行して、サービス コネクタ リソースプロバイダーを登録し、connection コマンドを再実行します。

アプリを構築してデプロイする

次の手順では、サンプル アプリケーションをダウンロード、構成、ビルド、デプロイする方法について説明します。

  1. サンプル コード リポジトリを複製するには、次のコマンドを使用します。

    git clone https://github.com/Azure-Samples/quickstart-spring-data-jdbc-mysql passwordless-sample
    
  2. 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 開発者ガイドの「作業の開始」セクションを参照してください。

  3. 次のコマンドを使用して 、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
    
  4. Maven を使用してプロジェクトをビルドするには、次のコマンドを使用します。

    cd passwordless-sample
    ./mvnw clean package -DskipTests
    
  5. 次のコマンドを使用して、アプリの target/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
    
  6. 次のコマンドを使用して、デプロイ後にアプリの状態を照会します。

    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

次の手順