次の方法で共有


チュートリアル: Azure Container Apps で高可用性 Eureka サーバー コンポーネント クラスターを作成する

このチュートリアルでは、障害や高需要に直面しても運用を維持するように設計された Eureka サービスを作成する方法について説明します。 高可用性 Eureka サービスを構築すると、Azure Container Apps に使用するサービス レジストリを、需要に関係なく常にクライアントが利用できるようになります。

Eureka の高可用性の状態を実現するには、複数の Eureka サーバー インスタンスをリンクしてクラスターを形成する必要があります。 クラスターにはリソースが用意されているため、1 つの Eureka サーバーで障害が発生しても、他のサービスは要求に対して引き続き使用できます。

このチュートリアルでは、次の作業を行いました。

  • Spring コンポーネント用の Eureka サーバーを作成します。
  • Eureka Server for Spring の 2 つのコンポーネントをクラスターにバインドします。
  • 高可用性サービス検出のために、コンテナー アプリを両方の Eureka サーバーにバインドします。

前提条件

考慮事項

Container Apps でマネージド Java コンポーネントを実行する場合は、次の詳細に注意してください。

項目 説明
Scope コンポーネントは、接続されているコンテナー アプリと同じ環境で実行されます。
スケーリング コンポーネントはスケーリングできません。 スケーリング プロパティ minReplicasmaxReplicas は両方とも 1 に設定されています。
リソース コンポーネントのコンテナー リソースの割り当ては固定されています。 CPU コアの数は 0.5 で、メモリ サイズは 1 GB です。
価格 コンポーネント課金は消費ベースの価格設定によります。 マネージド コンポーネントによって消費されるリソースは、リソースの使用状況に応じて、アクティブまたはアイドルのレートで課金されます。 課金を停止するために、使用しなくなったコンポーネントを削除できます。
バインド コンテナー アプリは、バインドを使用してコンポーネントに接続します。 バインドは、コンテナー アプリの環境変数に構成を注入します。 バインドが確立されると、コンテナー アプリは環境変数から構成値を読み取ってコンポーネントに接続できます。

初期リソースを設定する

Eureka サービス クラスターに必要なリソースを作成するには、次の手順に従います。

  1. アプリケーション構成の値を保持する変数を作成します。

    export LOCATION=eastus
    export RESOURCE_GROUP=my-services-resource-group
    export ENVIRONMENT=my-environment
    export EUREKA_COMPONENT_FIRST=eureka01
    export EUREKA_COMPONENT_SECOND=eureka02
    export APP_NAME=sample-service-eureka-client
    export IMAGE="mcr.microsoft.com/javacomponents/samples/sample-service-eureka-client:latest"
    
  2. Azure CLI を使用して Azure にサインインします。

    az login
    
  3. リソース グループを作成する。

    az group create --name $RESOURCE_GROUP --location $LOCATION
    
  4. Azure Container Apps 環境を作成します。

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

クラスターのサーバーを作成する

Eureka Server for Spring のコンポーネントを 2 つ作成します。

az containerapp env java-component eureka-server-for-spring create \
    --environment $ENVIRONMENT \
    --resource-group $RESOURCE_GROUP \
    --name $EUREKA_COMPONENT_FIRST
az containerapp env java-component eureka-server-for-spring create \
    --environment $ENVIRONMENT \
    --resource-group $RESOURCE_GROUP \
    --name $EUREKA_COMPONENT_SECOND

コンポーネントをバインドしてクラスターを形成する

Eureka サーバーを高可用性構成で動作させるには、クラスターとしてリンクする必要があります。

  1. 最初の Eureka サーバーを 2 番目のサーバーにバインドします。

    az containerapp env java-component eureka-server-for-spring update \
        --environment $ENVIRONMENT \
        --resource-group $RESOURCE_GROUP \
        --name $EUREKA_COMPONENT_FIRST \
        --bind $EUREKA_COMPONENT_SECOND
    
  2. 2 番目の Eureka サーバーを最初のサーバーにバインドします。

    az containerapp env java-component eureka-server-for-spring update \
        --environment $ENVIRONMENT \
        --resource-group $RESOURCE_GROUP \
        --name $EUREKA_COMPONENT_SECOND \
        --bind $EUREKA_COMPONENT_FIRST
    

アプリケーションをデプロイしてバインドする

サーバー コンポーネントをリンクすると、コンテナー アプリを作成し、2 つの Eureka コンポーネントにバインドできます。

  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
    
  2. コンテナー アプリを最初の Eureka サーバー コンポーネントにバインドします。

    az containerapp update \
        --name $APP_NAME \
        --resource-group $RESOURCE_GROUP \
        --bind $EUREKA_COMPONENT_FIRST 
    
  3. コンテナー アプリを 2 つ目の Eureka サーバー コンポーネントにバインドします。

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

ダッシュボードを表示する

重要

Eureka Server for Spring ダッシュボードを表示するには、Container Apps 環境リソースのアカウントに Microsoft.App/managedEnvironments/writeOwner、または Contributor ロールが割り当てられている必要があります。

  • これらのロールのいずれかが既にある場合は、「ダッシュボード URL の取得」セクションに進んで URL を取得し、ダッシュボードを表示します。
  • カスタム ロール定義を作成してアカウントに割り当てる場合は、次のセクション「 カスタム ロールを作成して割り当てる」の手順を実行します。
  • アカウントにリソースの Owner ロールまたは Contributor ロールを割り当てる場合は、その割り当てを行い、「 ダッシュボードの URL を取得 する」セクションに進みます。

[カスタム ロールを作成して割り当てる](custom-create.md)

  1. カスタム ロール定義を作成します。 このコマンドを実行する前に、 AssignableScopes 値のプレースホルダーをサブスクリプション ID に置き換えます。

    az role definition create --role-definition '{
        "Name": "Java Component Dashboard Access",
        "IsCustom": true,
        "Description": "Can access managed Java Component dashboards in managed environments",
        "Actions": [
            "Microsoft.App/managedEnvironments/write"
        ],
        "AssignableScopes": ["/subscriptions/<SUBSCRIPTION_ID>"]
    }'
    
  2. Container Apps 環境のリソース ID を取得します。

    export ENVIRONMENT_ID=$(az containerapp env show \
        --name $ENVIRONMENT --resource-group $RESOURCE_GROUP \
        --query id \
        --output tsv)
    
  3. Container Apps 環境リソースのアカウントにカスタム ロールを割り当てます。 このコマンドを実行する前に、 assignee 値のプレースホルダーをユーザー オブジェクト ID またはサービス プリンシパル ID に置き換えます。

    az role assignment create \
        --assignee <USER_OR_SERVICE_PRINCIPAL_ID> \
        --role "Java Component Dashboard Access" \
        --scope $ENVIRONMENT_ID
    

ダッシュボードの URL を取得する

Spring 用 Eureka サーバー ダッシュボードの URL を取得します。

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

このコマンドは、Spring 用 Eureka サーバー ダッシュボードへのアクセスに使用できる URL を返します。 ダッシュボードを使用して、Eureka サーバーのセットアップが 2 つのレプリカで構成されていることを確認できます。

Eureka for Spring ダッシュボードのスクリーンショット。登録済みインスタンス セクションには、コンテナー アプリと 2 台の Eureka サーバーが一覧表示され、すべて状態が up になります。

リソースをクリーンアップする

このチュートリアルで作成したリソースは、Azure の請求書に影響します。 これらのサービスを長期的に使用しない場合は、次のコマンドを実行して、このチュートリアルで作成したすべてのものを削除します。

az group delete --resource-group $RESOURCE_GROUP