共用方式為


教學課程:連線 Azure Container Apps 中 Spring 的受控設定伺服器 (預覽)

Config Server for Spring 提供集中式位置,讓設定數據可供多個應用程式使用。 在本文中,您將瞭解如何將裝載在 Azure Container Apps 中的應用程式連線到適用於 Spring 實例的 Java Config Server。

Spring 元件的設定伺服器會使用 GitHub 存放庫作為組態設定的來源。 組態值可透過元件與容器應用程式之間的系結提供給容器應用程式。 當組態伺服器中的值變更時,它們會自動流向您的應用程式,而不需要您重新編譯或重新部署應用程式。

在本教學課程中,您將了解:

  • 建立 Spring Java 元件的設定伺服器
  • 將 Spring 的設定伺服器系結至您的容器應用程式
  • 觀察將組態伺服器連線到應用程式之前和之後的組態值
  • 使用對稱金鑰加密和解密組態值

重要

本教學課程所使用的服務,可能會影響您的 Azure 帳單。 如果您決定依照逐步操作,請務必刪除本文中精選的資源,以避免非預期的計費。

必要條件

若要完成此專案,您需要下列項目:

需求 指示
Azure 帳戶 需要有效的訂用帳戶。 如果您沒有,可以免費建立一個
Azure CLI 安裝 Azure CLI

考量

在 Azure Container Apps 的 Spring 設定伺服器中執行時,請注意下列詳細數據:

項目 說明
Scope Spring 的 Config Server 會在與連線的容器應用程式相同的環境中執行。
調整大小 為了維護單一事實來源,Spring 的 Config Server 不會進行調整。 調整屬性 minReplicasmaxReplicas 設定為 1
資源 Config Server for Spring 的容器資源配置是固定的,CPU 核心的數目是 0.5,記憶體大小為 1Gi。
定價 Spring 計費的設定伺服器低於以使用量為基礎的定價。 受控 Java 元件所耗用的資源會以使用/閑置費率計費。 您可以刪除不再用來停止計費的元件。
繫結 容器應用程式會透過系結連線到 Spring 的 Config Server。 系結會將組態插入容器應用程式環境變數。 建立系結之後,容器應用程式就可以從環境變數讀取組態值。

設定

開始使用 Spring 的 Config Server 之前,您必須先建立必要的資源。

執行下列命令來建立您的資源群組和 Container Apps 環境。

  1. 建立變數以支援您的應用程式設定。 這些值是針對本課程的目的而向您提供的。

    export LOCATION=eastus
    export RESOURCE_GROUP=my-spring-cloud-resource-group
    export ENVIRONMENT=my-spring-cloud-environment
    export JAVA_COMPONENT_NAME=myconfigserver
    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 Java 元件的設定伺服器。
    IMAGE 容器應用程式中所使用的容器映像。
    URI 如果 URI 是私人的,您可以將 URI 取代為 git 存放庫 URL,請新增相關的驗證組態,例如 spring.cloud.config.server.git.usernamespring.cloud.config.server.git.password
  2. 使用 Azure CLI 登入 Azure。

    az login
    
  3. 建立資源群組。

    az group create --name $RESOURCE_GROUP --location $LOCATION
    
  4. 建立您的容器應用程式環境。

    az containerapp env create \
      --name $ENVIRONMENT \
      --resource-group $RESOURCE_GROUP \
      --location $LOCATION
    

    此環境可用來裝載 Spring 元件的 Config Server 和容器應用程式。

使用 Config Server for Spring Java 元件

現在您已擁有 Container Apps 環境,您可以建立容器應用程式,並將它系結至適用於 Spring 的 Config Server 元件。 當您系結容器應用程式時,組態值會自動從 Config Server 元件同步至您的應用程式。

  1. 建立 Spring Java 元件的設定伺服器。

    az containerapp env java-component config-server-for-spring create \
      --environment $ENVIRONMENT \
      --resource-group $RESOURCE_GROUP \
      --name $JAVA_COMPONENT_NAME \
      --configuration spring.cloud.config.server.git.uri=$URI
    
  2. 更新 Spring Java 元件的設定伺服器。

    az containerapp env java-component config-server-for-spring update \
      --environment $ENVIRONMENT \
      --resource-group $RESOURCE_GROUP \
      --name $JAVA_COMPONENT_NAME \
      --configuration spring.cloud.config.server.git.uri=$URI spring.cloud.config.server.git.refresh-rate=60
    

    在這裡,您會告訴元件在哪裡尋找可透過 uri 屬性保存組態資訊的存放庫。 屬性 refresh-rate 會告知 Container Apps 檢查 Git 存放庫中是否有變更的頻率。

  3. 建立取用設定數據的容器應用程式。

    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

  4. 系結至 Spring 的組態伺服器。

    現在已建立容器應用程式和組態伺服器,您可以將它們與 update 命令系結至容器應用程式。

    az containerapp update \
      --name $APP_NAME \
      --resource-group $RESOURCE_GROUP \
      --bind $JAVA_COMPONENT_NAME
    

    參數 --bind $JAVA_COMPONENT_NAME 會建立容器應用程式與組態元件之間的連結。

    一旦容器應用程式和 Config Server 元件系結在一起,組態變更就會自動同步處理至容器應用程式。

    當您再次瀏覽應用程式的網址時,的值 connectTimeout 現在是 10000。 此值來自原本設定為元件來源之變數中的 $URI git 存放庫。 具體而言,此值是從connectionTimeout存放庫application.yml檔案中的 屬性繪製。

    系結要求會將組態設定插入應用程式作為環境變數。 從組態伺服器擷取組態設定時,應用程式程式代碼現在可以使用這些值。

    在此情況下,應用程式可以使用下列環境變數:

    SPRING_CLOUD_CONFIG_URI=http://$JAVA_COMPONENT_NAME:80
    SPRING_CLOUD_CONFIG_COMPONENT_URI=http://$JAVA_COMPONENT_NAME: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

    您也可以從應用程式中移除繫結。

  5. 解除系結 Spring Java 元件的元件的元件的元件伺服器。

    若要從容器應用程式中移除繫結,請使用 --unbind 選項。

    az containerapp update \
      --name $APP_NAME \
      --unbind $JAVA_COMPONENT_NAME \
      --resource-group $RESOURCE_GROUP
    

    當您再次瀏覽應用程式的網址時,會將的值 connectTimeout 變更回 0

清除資源

本教學課程中建立的資源會影響您的 Azure 帳單。 如果您不會長期使用這些服務,請執行下列命令來刪除本教學課程中建立的所有內容。

az group delete \
  --resource-group $RESOURCE_GROUP

下一步