Share via


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

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

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

  • 布建 Azure Spring Apps 的實例。
  • 建置應用程式並將其部署至 Azure Spring Apps。
  • 使用受控識別執行連線至 Azure 資料庫的應用程式。

注意

本教學課程不適用於 R2DBC。

必要條件

準備工作環境

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

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 的服務連線或 無密碼擴充功能:

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)

重要

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

此服務連線or 命令會在背景中執行下列工作:

  • 為 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 來註冊服務連線或資源提供者,然後再次執行連線命令。

建置和部署應用程式

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

  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

下一步