本文說明如何在部署至 Azure Spring 應用程式 的 Spring Boot 應用程式中,使用無密碼連線到 Azure 資料庫。
在這個教學中,你可以透過使用 Azure 入口網站或 Azure CLI 完成以下任務。 下列程式會說明這兩種方法。
- 佈建 Azure Spring 應用程式 實例。
- 建置應用程式並將其部署至 Azure Spring 應用程式。
- 使用管理身份來執行連接到 Azure 資料庫的應用程式。
注意
本教學課程不適用於 R2DBC。
先決條件
- Azure 訂用帳戶。 如果你還沒有,請創建 一個免費帳號。
- Azure CLI 版本 2.45.0 或更高。
- Azure Spring 應用程式 擴充功能。 使用指令
az extension add --name spring安裝擴充功能: 。 - Java Development Kit (JDK)版本 8、11 或 17。
- Git 客戶端。
- cURL 或類似的 HTTP 公用程式來測試功能。
- MySQL 命令列客戶端,如果你選擇執行 適用於 MySQL 的 Azure 資料庫。 你可以使用一個流行的客戶端工具——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 應用程式 實例的名稱。 名稱長度必須介於 4 到 32 個字元之間,而且只能包含小寫字母、數位和連字元。 服務名稱的第一個字元必須是字母,最後一個字元必須是字母或數位。 -
<AZ_DB_ADMIN_USERNAME>:Azure 資料庫伺服器的管理員用戶名稱。 -
<AZ_DB_ADMIN_PASSWORD>:Azure 資料庫伺服器的管理密碼。 -
<YOUR_USER_ASSIGNED_MANAGEMED_IDENTITY_NAME>:使用者指派的受控識別伺服器名稱,在 Azure 中應該是唯一的。
布建 Azure Spring 應用程式 的實例
使用下列步驟來布建 Azure Spring 應用程式 的實例。
使用下列命令,使用 Azure Spring 應用程式 擴充功能更新 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 應用程式 服務和 Azure Spring 應用程式 服務的實例:
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 資料庫實例。
使用下列命令建立適用於 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-user OR 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 應用程式 連線至 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.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
此服務連接器指令在背景執行以下任務:
啟用由 Azure Spring 應用程式 托管的應用程式
$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_NAME新增兩種配置:spring.datasource.url和spring.datasource.username。注意
如果看到錯誤訊息
The subscription is not registered to use Microsoft.ServiceLinker,執行註冊服務連接器資源提供者的指令az provider register --namespace Microsoft.ServiceLinker,然後再執行連接指令。
建置和部署應用程式
下列步驟說明如何下載、設定、建置及部署範例應用程式。
使用下列命令複製範例程式代碼存放庫:
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 起始套件的支援。
注意
如需如何使用材料帳單來管理 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
此指令回傳「待辦事項」清單,包括你所建立的項目,如下範例所示:
[{"id":1,"description":"configuration","details":"congratulations, you have set up JDBC correctly!","done":true}]
清除資源
若要清除本教學課程期間使用的所有資源,請使用下列命令刪除資源群組:
az group delete \
--name $AZ_RESOURCE_GROUP \
--yes