共用方式為


教學課程:使用無密碼連線將 Spring 應用程式部署至 Azure Spring Apps 和 Azure 資料庫

本文說明如何在部署至 Azure Spring Apps 的 Spring Boot 應用程式中,使用無密碼連線到 Azure 資料庫。

在本教學課程中,您會使用 Azure 入口網站或 Azure CLI 完成下列工作。 下列程式會說明這兩種方法。

  • 佈建 Azure Spring Apps 實例。
  • 建置應用程式並將其部署至 Azure Spring Apps。
  • 使用受控識別執行連線至 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 命令行。
  • 如果您選擇執行 Azure SQL Database,ODBC Driver 18 for SQL Server

準備工作環境

首先,使用下列命令來設定一些環境變數:

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 資料庫伺服器的名稱,在 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>:使用者指派的受控識別伺服器名稱,在 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 資料庫實例。

  1. 使用下列命令建立適用於 MySQL 的 Azure 資料庫伺服器:

    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-useradmin-password 參數,系統預設會產生預設管理員使用者或隨機管理員密碼。

  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 進行驗證。 如需詳細資訊,請參閱 設定適用於 MySQL 的 Azure 資料庫 - 彈性伺服器的 Microsoft Entra 驗證。

export AZ_IDENTITY_RESOURCE_ID=$(az identity create \
    --name $AZ_USER_IDENTITY_NAME \
    --resource-group $AZ_RESOURCE_GROUP \
    --query id \
    --output tsv)

重要

建立使用者指派的身分識別之後,請要求您的 全域管理員特殊許可權角色管理員 授與此身分識別的下列許可權: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

此 Service Connector 命令會在背景中執行下列工作:

  • 為託管於 Azure Spring Apps 的應用程式啟用系統指派的受控識別 $AZ_SPRING_APPS_APP_NAME

  • 將 Microsoft Entra 系統管理員設定為目前的登入使用者。

  • 為步驟 1 中建立的受控識別新增名為 $AZ_SPRING_APPS_SERVICE_NAME/apps/$AZ_SPRING_APPS_APP_NAME 的資料庫使用者,並將資料庫 $AZ_DATABASE_NAME 的所有許可權授與此使用者。

  • 將兩個組態新增至應用程式 $AZ_SPRING_APPS_APP_NAMEspring.datasource.urlspring.datasource.username

    注意

    如果您看到錯誤訊息 The subscription is not registered to use Microsoft.ServiceLinker,請執行 命令 az provider register --namespace Microsoft.ServiceLinker 註冊 Service Connector 資源提供者,然後再次執行連線命令。

建置和部署應用程式

下列步驟說明如何下載、設定、建置及部署範例應用程式。

  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 起始套件的支援。

    注意

    如需如何使用材料帳單來管理 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. 使用下列命令來部署應用程式的 目標/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

後續步驟