教學課程:使用無密碼連線將 Spring 應用程式部署至 Azure Spring Apps
本文說明如何在部署至 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 公用程式來測試功能。
- 如果您選擇執行 適用於 MySQL 的 Azure 資料庫,MySQL 命令行用戶端。 您可以使用熱門用戶端工具 mysql.exe 命令行工具,使用 Azure Cloud Shell 連線到您的伺服器。 或者,您也可以在本機環境中使用
mysql
命令行。 - 如果您選擇執行 Azure SQL 資料庫,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 的實例。
使用下列命令,使用 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 資料庫實例。
使用下列命令建立適用於 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
或 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 驗證。 如需詳細資訊,請參閱 設定 適用於 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.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
此服務連線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_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
此命令會傳回「todo」 專案清單,包括您所建立的專案,如下列範例所示:
[{"id":1,"description":"configuration","details":"congratulations, you have set up JDBC correctly!","done":true}]
清除資源
若要清除本教學課程期間使用的所有資源,請使用下列命令刪除資源群組:
az group delete \
--name $AZ_RESOURCE_GROUP \
--yes