チュートリアル: Azure Container Apps で高可用性 Eureka サーバー コンポーネント クラスターを作成する
このチュートリアルでは、障害や高需要に直面しても運用を維持するように設計された Eureka サービスを作成する方法について説明します。 高可用性 Eureka サービスを構築すると、要求に関係なく、サービス レジストリを常にクライアントが利用できるようになります。
Eureka の高可用性の状態を実現するには、複数の Eureka サーバー インスタンスをリンクしてクラスターを形成する必要があります。 クラスターにはリソースが用意されているため、1 つの Eureka サーバーで障害が発生しても、他のサービスは要求に対して引き続き使用できます。
このチュートリアルでは、次の作業を行いました。
- Eureka Server for Spring のコンポーネントを作成します。
- Eureka Server for Spring の 2 つのコンポーネントをクラスターにバインドします。
- 高可用性サービス検出のために、アプリケーションを両方の Eureka サーバーにバインドします。
前提条件
考慮事項
Azure Container Apps でマネージド Java コンポーネントを実行する場合は、次の詳細に注意してください。
項目 | 説明 |
---|---|
範囲 | コンポーネントは、接続されているコンテナー アプリと同じ環境で実行されます。 |
スケーリング | コンポーネントのスケーリングはできません。 スケーリング プロパティ minReplicas と maxReplicas は両方とも 1 に設定されています。 |
リソース | コンポーネントのコンテナー リソースの割り当ては固定されています。 CPU コア数は 0.5、メモリ サイズは 1 Gi です。 |
価格 | コンポーネント課金は消費ベースの価格設定によります。 マネージド コンポーネントによって消費されるリソースは、アクティブ/アイドル レートで課金されます。 課金を停止するために、使用しなくなったコンポーネントを削除できます。 |
バインド | コンテナー アプリは、バインドを使用してコンポーネントに接続します。 バインドは、コンテナー アプリの環境変数に構成を注入します。 バインドが確立されると、コンテナー アプリは環境変数から構成値を読み取ってコンポーネントに接続できます。 |
セットアップ
Eureka サービス クラスターを作成するには、次の手順に従います。
アプリケーション構成の値を保持する変数を作成します。
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"
Azure CLI を使用して Azure にサインインします。
az login
リソース グループを作成する。
az group create --name $RESOURCE_GROUP --location $LOCATION
Azure Container Apps 環境を作成します。
az containerapp env create \ --name $ENVIRONMENT \ --resource-group $RESOURCE_GROUP \ --location $LOCATION
クラスターの作成
次に、2 つの Eureka サーバー インスタンスを作成し、それらをクラスターとしてリンクします。
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 サーバーを高可用性構成で動作させるには、それらのサーバーをリンクする必要があります。
最初の 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 番目の 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 コンポーネントにバインドできます。
コンテナー アプリを作成します。
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
コンテナー アプリを最初の Eureka サーバー コンポーネントにバインドします。
az containerapp update \ --name $APP_NAME \ --resource-group $RESOURCE_GROUP \ --bind $EUREKA_COMPONENT_FIRST
コンテナー アプリを 2 つ目の Eureka サーバー コンポーネントにバインドします。
az containerapp update \ --name $APP_NAME \ --resource-group $RESOURCE_GROUP \ --bind $EUREKA_COMPONENT_SECOND
ダッシュボードを表示する
重要
ダッシュボードを表示するには、少なくとも Microsoft.App/managedEnvironments/write
ロールがマネージド環境リソースのアカウントに割り当てられている必要があります。 リソースに Owner
ロールまたは Contributor
ロールを明示的に割り当てるか、手順に従ってカスタム ロール定義を作成し、アカウントに割り当てることができます。
カスタム ロール定義を作成します。
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>"] }'
AssignableScopes
値の<>
かっこの間にあるプレースホルダーは、必ずサブスクリプション ID に置き換えてください。マネージド環境リソースのアカウントにカスタム ロールを割り当てます。
マネージド環境のリソース ID を取得します。
export ENVIRONMENT_ID=$(az containerapp env show \ --name $ENVIRONMENT --resource-group $RESOURCE_GROUP \ --query id \ --output tsv)
ユーザー アカウントにそのロールを割り当てます。
このコマンドを実行する前に、
<>
かっこの間のプレースホルダーをユーザーまたはサービス プリンシパル ID に置き換えます。az role assignment create \ --assignee <USER_OR_SERVICE_PRINCIPAL_ID> \ --role "Java Component Dashboard Access" \ --scope $ENVIRONMENT_ID
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 つのレプリカで構成されていることを確認できます。
リソースをクリーンアップする
このチュートリアルで作成したリソースは、Azure の請求書に影響します。 これらのサービスを長期間使用しない場合は、次のコマンドを実行して、このチュートリアルで作成したすべてのものを削除してください。
az group delete --resource-group $RESOURCE_GROUP