教學課程:在 Azure 容器應用程式中連線到適用於 Spring 的受控設定伺服器
適用於 Spring 的 Config Server 提供集中式位置,讓設定資料可供多個應用程式使用。 在本文中,您將了解如何將裝載在 Azure 容器應用程式中的應用程式連線到適用於 Spring 的 JAVA Config Server 執行個體。
適用於 Spring 的 Config Server JAVA 元件會使用 GitHub 存放庫作為組態設定的來源。 組態值可透過元件與容器應用程式之間的繫結提供給容器應用程式。 當組態伺服器中的值變更時,它們會自動流向您的應用程式,而不需要您重新編譯或重新部署應用程式。
在本教學課程中,您將了解:
- 建立適用於 Spring 的 Config Server JAVA 元件
- 將適用於 Spring 的 Config Server 繫結至您的容器應用程式
- 觀察將 Config Server 連線到應用程式之前和之後的組態值
- 使用對稱金鑰加密和解密組態值
重要
本教學課程所使用的服務,可能會影響您的 Azure 帳單。 如果您決定逐步執行操作,請務必刪除本文中介紹的資源,以免產生非預期的帳單。
必要條件
若要完成此專案,您需要下列項目:
需求 | 指示 |
---|---|
Azure 帳戶 | 需要有效的訂用帳戶。 如果您沒有,可以免費建立一個。 |
Azure CLI | 安裝 Azure CLI。 |
考量
在 Azure 容器應用程式中執行適用於 Spring 的 Config Server 時,請注意下列詳細資料:
項目 | 說明 |
---|---|
Scope | 適用於 Spring 的 Config Server 會在與連線的容器應用程式相同的環境中執行。 |
調整大小 | 為了維護單一事實來源,適用於 Spring 的 Config Server 不會進行調整。 縮放屬性 minReplicas 與 maxReplicas 都會設定為 1 。 |
資源 | 適用於 Spring 的 Config Server 的容器資源配置是固定的,CPU 核心的數目是 0.5,而記憶體大小為 1Gi。 |
定價 | 適用於 Spring 的 Config Server 在計費上會低於使用量型定價。 受控 Java 元件所取用的資源會以使用/閒置費率計費。 您可以刪除不再使用的元件來停止計費。 |
繫結 | 容器應用程式會透過繫結連線到適用於 Spring 的 Config Server。 繫結會將設定插入到容器應用程式的環境變數中。 建立繫結之後,容器應用程式就可以從環境變數中讀取組態值。 |
設定
在開始使用適用於 Spring 的 Config Server 之前,您必須先建立所需資源。
執行下列命令來建立您的資源群組和容器應用程式環境。
建立變數以支援您的應用程式設定。 這些值是針對本課程的目的而向您提供的。
export LOCATION=eastus export RESOURCE_GROUP=my-services-resource-group export ENVIRONMENT=my-environment export JAVA_COMPONENT_NAME=configserver export APP_NAME=my-config-client export IMAGE="mcr.microsoft.com/javacomponents/samples/sample-service-config-client:latest" export URI="https://github.com/Azure-Samples/azure-spring-cloud-config-java-aca.git"
變數 描述 LOCATION
您在其中建立容器應用程式和 Java 元件的 Azure 區域位置。 ENVIRONMENT
適用於您示範應用程式的 Azure 容器應用程式環境名稱。 RESOURCE_GROUP
示範應用程式的 Azure 資源群組名稱。 JAVA_COMPONENT_NAME
針對容器應用程式所建立 Java 元件的名稱。 在本案例中,您會建立適用於 Spring 的 Config Server JAVA 元件。 IMAGE
容器應用程式中所使用的容器映像。 URI
如果 URI 是私人的,您可以將其取代為 Git 存放庫 URL,並新增相關的驗證組態,例如 spring.cloud.config.server.git.username
和spring.cloud.config.server.git.password
。使用 Azure CLI 登入 Azure。
az login
建立資源群組。
az group create --name $RESOURCE_GROUP --location $LOCATION
建立您的容器應用程式環境。
az containerapp env create \ --name $ENVIRONMENT \ --resource-group $RESOURCE_GROUP \ --location $LOCATION
此環境可用來裝載適用於 Spring 的 Config Server JAVA 元件和容器應用程式。
建立適用於 Spring 的 Config Server JAVA 元件
現在您已擁有容器應用程式環境,您可以建立容器應用程式,並將其繫結至適用於 Spring 的 Config Server JAVA 元件。 當您繫結容器應用程式時,組態值會自動從 Config Server 元件同步至您的應用程式。
建立適用於 Spring 的 Config Server JAVA 元件。
az containerapp env java-component config-server-for-spring create \ --environment $ENVIRONMENT \ --resource-group $RESOURCE_GROUP \ --name $JAVA_COMPONENT_NAME \ --min-replicas 1 \ --max-replicas 1 \ --configuration spring.cloud.config.server.git.uri=$URI
更新適用於 Spring 的 Config Server JAVA 元件。
az containerapp env java-component config-server-for-spring update \ --environment $ENVIRONMENT \ --resource-group $RESOURCE_GROUP \ --name $JAVA_COMPONENT_NAME \ --min-replicas 2 \ --max-replicas 2 \ --configuration spring.cloud.config.server.git.uri=$URI spring.cloud.config.server.git.refresh-rate=60
在這裡,您會告訴元件在哪裡尋找可透過
uri
屬性保存組態資訊的存放庫。refresh-rate
屬性會告知容器應用程式檢查 Git 存放庫中是否有變更的頻率。
將容器應用程式繫結至適用於 Spring 的 Config Server JAVA 元件
建立取用組態資料的容器應用程式。
az containerapp create \ --name $APP_NAME \ --resource-group $RESOURCE_GROUP \ --environment $ENVIRONMENT \ --image $IMAGE \ --min-replicas 1 \ --max-replicas 1 \ --ingress external \ --target-port 8080 \ --query properties.configuration.ingress.fqdn
此命令會傳回取用組態資料之容器應用程式的 URL。 將 URL 複製到文字編輯器,以便能用於後續步驟。
如果您在瀏覽器中瀏覽您的應用程式,則傳回的
connectTimeout
值是0
的預設值。繫結至適用於 Spring 的 Config Server。
現在已建立容器應用程式和 Config Server,您可以將它們與
update
命令繫結至容器應用程式。az containerapp update \ --name $APP_NAME \ --resource-group $RESOURCE_GROUP \ --bind $JAVA_COMPONENT_NAME
--bind $JAVA_COMPONENT_NAME
參數會建立容器應用程式與組態元件之間的連結。
一旦容器應用程式和 Config Server 元件繫結在一起,組態變更就會自動同步至容器應用程式。
當您再次瀏覽應用程式的 URL 時,connectTimeout
的值現在是 10000
。 此值來自原本設定為組態元件來源之 $URI
變數中的 Git 存放庫。 具體而言,此值是從存放庫 application.yml 檔案中的 connectionTimeout
屬性繪製。
繫結要求會將組態設定插入應用程式作為環境變數。 從 Config Server 擷取組態設定時,應用程式程式碼現在可以使用這些值。
在此情況下,應用程式可以使用下列環境變數:
SPRING_CLOUD_CONFIG_URI=http://[JAVA_COMPONENT_INTERNAL_FQDN]:80
SPRING_CLOUD_CONFIG_COMPONENT_URI=http://[JAVA_COMPONENT_INTERNAL_FQDN]:80
SPRING_CONFIG_IMPORT=optional:configserver:$SPRING_CLOUD_CONFIG_URI
如果您要自訂自己的 SPRING_CONFIG_IMPORT
,則可以參考環境變數 SPRING_CLOUD_CONFIG_COMPONENT_URI
,例如您可以覆寫命令列引數如 Java -Dspring.config.import=optional:configserver:${SPRING_CLOUD_CONFIG_COMPONENT_URI}?fail-fast=true
。
您也可以從應用程式中移除繫結。
(選用) 從適用於 Spring 的 Config Server JAVA 元件解除繫結您的容器應用程式
若要從容器應用程式中移除繫結,請使用 --unbind
選項。
az containerapp update \
--name $APP_NAME \
--unbind $JAVA_COMPONENT_NAME \
--resource-group $RESOURCE_GROUP
當您再次瀏覽應用程式的 URL 時,connectTimeout
的值會變更回 0
。
清除資源
本教學課程中建立的資源會影響您的 Azure 帳單。 如果您不會長期使用這些服務,請執行下列命令來刪除本教學課程中建立的所有內容。
az group delete \
--resource-group $RESOURCE_GROUP