分享方式:


教學課程:在 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 不會進行調整。 縮放屬性 minReplicasmaxReplicas 都會設定為 1
資源 適用於 Spring 的 Config Server 的容器資源配置是固定的,CPU 核心的數目是 0.5,而記憶體大小為 1Gi。
定價 適用於 Spring 的 Config Server 在計費上會低於使用量型定價。 受控 Java 元件所取用的資源會以使用/閒置費率計費。 您可以刪除不再使用的元件來停止計費。
繫結 容器應用程式會透過繫結連線到適用於 Spring 的 Config Server。 繫結會將設定插入到容器應用程式的環境變數中。 建立繫結之後,容器應用程式就可以從環境變數中讀取組態值。

設定

在開始使用適用於 Spring 的 Config Server 之前,您必須先建立所需資源。

執行下列命令來建立您的資源群組和容器應用程式環境。

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

    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.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 JAVA 元件和容器應用程式。

建立適用於 Spring 的 Config Server JAVA 元件

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

  1. 建立適用於 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
    
  2. 更新適用於 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 元件

  1. 建立取用組態資料的容器應用程式。

    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 的預設值。

  2. 繫結至適用於 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

下一步