共用方式為


教學課程:在 Azure 容器應用程式中連線到適用於 Spring 的受控 Eureka 伺服器

適用於 Spring 的 Eureka 伺服器是可讓微服務自我註冊並探索其他服務的服務註冊。 作為 Azure 容器應用程式元件,您可以將容器應用程式繫結至適用於 Spring 的 Eureka 伺服器,以便向 Eureka 伺服器自動註冊。

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

  • 建立適用於 Spring 的 Eureka 伺服器 Java 元件
  • 將容器應用程式繫結至適用於 Spring 的 Eureka 伺服器 Java 元件

重要

本教學課程所使用的服務,可能會影響您的 Azure 帳單。 如果您決定逐步執行操作,請務必刪除本文中介紹的資源,以免產生非預期的帳單。

必要條件

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

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

考量

在 Azure 容器應用程式中執行適用於 Spring 的 Eureka 伺服器時,請注意下列詳細資料:

項目 說明
Scope 適用於 Spring 的 Eureka 伺服器元件會在與連線的容器應用程式相同的環境中執行。
調整大小 適用於 Spring 的 Eureka 伺服器無法縮放。 縮放屬性 minReplicasmaxReplicas 都會設定為 1。 若要實現高可用性,您可以參考「在 Azure 容器應用程式中建立高可用的 Eureka 服務」
資源 已修正適用於 Spring 的 Eureka 伺服器的容器資源配置。 CPU 核心數為 0.5,記憶體大小為 1Gi。
定價 適用於 Spring 的 Eureka 伺服器在計費上會低於使用量型定價。 受控 Java 元件所取用的資源會以使用/閒置費率計費。 您可以刪除不再使用的元件來停止計費。
繫結 容器應用程式會透過繫結來連線到適用於 Spring 的 Eureka 伺服器元件。 繫結會將設定插入到容器應用程式的環境變數中。 建立繫結之後,容器應用程式就可以從環境變數中讀取設定值,並連線到適用於 Spring 的 Eureka 伺服器。

設定

在開始使用適用於 Spring 的 Eureka 伺服器之前,您必須先建立所需資源。

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

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

    export LOCATION=eastus
    export RESOURCE_GROUP=my-services-resource-group
    export ENVIRONMENT=my-environment
    export EUREKA_COMPONENT_NAME=eureka
    export APP_NAME=my-eureka-client
    export IMAGE="mcr.microsoft.com/javacomponents/samples/sample-service-eureka-client:latest"
    
    變數 描述
    LOCATION 您在其中建立容器應用程式和 Java 元件的 Azure 區域位置。
    ENVIRONMENT 適用於您示範應用程式的 Azure 容器應用程式環境名稱。
    RESOURCE_GROUP 示範應用程式的 Azure 資源群組名稱。
    EUREKA_COMPONENT_NAME 針對容器應用程式所建立 Java 元件的名稱。 在本案例中,您會建立適用於 Spring 的 Eureka 伺服器 Java 元件。
    IMAGE 容器應用程式中所使用的容器映像。
  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 的 Eureka 伺服器 Java 元件

現在您已擁有現有的環境,接下來您可以建立容器應用程式,並將其繫結至適用於 Spring 的 Eureka 伺服器 Java 元件執行個體。

  1. 建立適用於 Spring 的 Eureka 伺服器 Java 元件。

    az containerapp env java-component eureka-server-for-spring create \
      --environment $ENVIRONMENT \
      --resource-group $RESOURCE_GROUP \
      --name $EUREKA_COMPONENT_NAME
    
  2. 選用:更新適用於 Spring 的 Eureka 伺服器 Java 元件設定。

    az containerapp env java-component eureka-server-for-spring update \
      --environment $ENVIRONMENT \
      --resource-group $RESOURCE_GROUP \
      --name $EUREKA_COMPONENT_NAME 
      --configuration eureka.server.renewal-percent-threshold=0.85 eureka.server.eviction-interval-timer-in-ms=10000
    

將容器應用程式繫結至適用於 Spring 的 Eureka 伺服器 Java 元件

  1. 建立容器應用程式,並繫結至適用於 Spring 的 Eureka 伺服器。

    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 \
      --bind $EUREKA_COMPONENT_NAME \
      --query properties.configuration.ingress.fqdn
    

將您應用程式的 URL 複製到文字編輯器,以便能用於後續步驟。

返回入口網站中的容器應用程式,並將應用程式的 URL 複製到文字編輯器,以便您可以在下一個步驟中使用。

瀏覽至 /allRegistrationStatus 路由,以檢視所有向適用於 Spring 的 Eureka 伺服器註冊的應用程式。

繫結會將數個設定插入到應用程式中作為環境變數,主要是 eureka.client.service-url.defaultZone 屬性。 此屬性會指出 Eureka 伺服器 Java 元件的內部端點。

繫結也會插入下列屬性:

"eureka.client.register-with-eureka":    "true"
"eureka.client.fetch-registry":          "true"
"eureka.instance.prefer-ip-address":     "true"

eureka.client.register-with-eureka 屬性會設定為 true,以強制向 Eureka 伺服器註冊。 此註冊會從設定伺服器覆寫 application.properties 中的本機設定,依此類推。 如果您想要將其設定為 false,則可以在容器應用程式中設定環境變數來加以覆寫。

因為容器應用程式環境中的特定 DNS 解析規則,所以 eureka.instance.prefer-ip-address 會設定為 true。 請勿修改此值,以免中斷繫結。

(選用) 從適用於 Spring 的 Eureka 伺服器 JAVA 元件解除繫結您的容器應用程式

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

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

透過儀表板檢視應用程式

重要

若要檢視儀表板,您必須至少將 Microsoft.App/managedEnvironments/write 角色指派給您在受控環境資源上的帳戶。 您可以在資源上明確指派 OwnerContributor 角色,或遵循步驟來建立自訂角色定義,並將其指派給您的帳戶。

  1. 建立自訂角色定義。

    az role definition create --role-definition '{
        "Name": "<YOUR_ROLE_NAME>",
        "IsCustom": true,
        "Description": "Can access managed Java Component dashboards in managed environments",
        "Actions": [
            "Microsoft.App/managedEnvironments/write"
        ],
        "AssignableScopes": ["/subscriptions/<SUBSCRIPTION_ID>"]
    }'
    

    請務必將 AssignableScopes 值中 <> 括號之間的預留位置取代為您的訂用帳戶識別碼。

  2. 將自訂角色指派給您在受控環境資源上的帳戶。

    取得受控環境的資源識別碼:

        export ENVIRONMENT_ID=$(az containerapp env show \
         --name $ENVIRONMENT --resource-group $RESOURCE_GROUP \ 
         --query id -o tsv)
    
  3. 將角色指派給您的帳戶。

    在執行此命令之前,請將 <> 括號之間的預留位置取代為您的使用者或服務主體識別碼。

    az role assignment create \
      --assignee <USER_OR_SERVICE_PRINCIPAL_ID> \
      --role "<ROLE_NAME>" \
      --scope $ENVIRONMENT_ID
    

    注意

    <USER_OR_SERVICE_PRINCIPAL_ID> 通常應該是您用來存取 Azure 入口網站的身分識別。 <ROLE_NAME> 是您在步驟 1 中指派的名稱。

  4. 取得適用於 Spring 的 Eureka 伺服器儀表板 URL。

    az containerapp env java-component eureka-server-for-spring show \
      --environment $ENVIRONMENT \
      --resource-group $RESOURCE_GROUP \
      --name $EUREKA_COMPONENT_NAME \
      --query properties.ingress.fqdn -o tsv
    

    此命令會傳回可用來存取適用於 Spring 的 Eureka 伺服器儀表板的 URL。 透過儀表板,您的容器應用程式也會向您,如下列螢幕擷取畫面所示。

適用於 Spring 的 Eureka 伺服器儀表板的螢幕擷取畫面。

選用:整合適用於 Spring 的 Eureka 伺服器與適用於 Spring 的管理員 Java 元件

如果您想要整合適用於 Spring 的 Eureka 伺服器與適用於 Spring 的管理員 Java 元件,請參閱整合適用於 Spring 的受控管理員與適用於 Spring 的 Eureka 伺服器

清除資源

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

az group delete \
  --resource-group $RESOURCE_GROUP

下一步