チュートリアル: Azure Container Apps でマネージド Eureka Server for Spring に接続する

Eureka Server for Spring は、マイクロサービスが自己を登録し、他のサービスを検出できるようにするサービス レジストリです。 Azure Container Apps コンポーネントとして利用可能で、Eureka サーバーに自動登録するためにお使いのコンテナー アプリを Eureka Server for Spring にバインドできます。

このチュートリアルで学習する内容は次のとおりです。

  • Eureka Server for Spring の Java コンポーネントを作成する
  • コンテナー アプリを Eureka Server for Spring の Java コンポーネントにバインドする

重要

このチュートリアルでは、Azure の請求書に影響する可能性のあるサービスを使用します。 手順に従う場合は、予期しない課金を回避するために、この記事で紹介されているリソースを必ず削除してください。

前提条件

このプロジェクトを完了するには、次の項目が必要です:

要件 手順
Azure アカウント アクティブなサブスクリプションが必要です。 持っていない場合は、無料で作成できます。
Azure CLI Azure CLI をインストールします。

考慮事項

Azure Container Apps の Eureka Server for Spring で実行する場合は、次の詳細に注意してください。

項目 説明
スコープ Eureka Server for Spring コンポーネントは、接続されているコンテナー アプリと同じ環境で実行されます。
スケーリング Eureka Server for Spring はスケーリングできません。 スケーリング プロパティ minReplicasmaxReplicas は両方とも 1 に設定されています。 高可用性を実現するには、Azure Container Apps で高可用性 Eureka サービスを作成することに関する記事を参照してください。
リソース Eureka Server for Spring のコンテナー リソースの割り当ては固定されています。 CPU コア数は 0.5、メモリ サイズは 1Gi です。
料金 Eureka Server for Spring の課金は消費ベースの価格に該当します。 マネージド Java コンポーネントによって消費されるリソースは、アクティブ/アイドル レートで課金されます。 課金を停止するために、使用しなくなったコンポーネントを削除できます。
バインディング コンテナー アプリは、バインドを介して Eureka Server for Spring コンポーネントに接続します。 バインドは、コンテナー アプリの環境変数に構成を注入します。 バインドが確立されると、コンテナー アプリで環境変数からこれらの構成値を読み取り、Eureka Server for Spring に接続できます。

セットアップ

Eureka Server for Spring の操作を開始する前に、まず、必要なリソースを作成する必要があります。

次のコマンドを実行して、リソース グループとコンテナー アプリ環境を作成します。

  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 Container Apps 環境名。
    RESOURCE_GROUP デモ アプリケーションの Azure リソース グループ名。
    EUREKA_COMPONENT_NAME コンテナー アプリ用に作成された Java コンポーネントの名前。 この場合、Eureka Server for Spring の 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
    

Eureka Server for Spring の Java コンポーネントを作成する

既存の環境が作成されたので、コンテナー アプリを作成し、Eureka Server for Spring の Java コンポーネント インスタンスにバインドできます。

  1. Eureka Server for Spring の Java コンポーネントを作成します。

    az containerapp env java-component eureka-server-for-spring create \
      --environment $ENVIRONMENT \
      --resource-group $RESOURCE_GROUP \
      --name $EUREKA_COMPONENT_NAME
    
  2. 省略可能: Eureka Server for Spring の 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
    

コンテナー アプリを Eureka Server for Spring の Java コンポーネントにバインドする

  1. コンテナー アプリを作成し、 Eureka Server for Spring にバインドします。

    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 ルートに移動して、Eureka Server for Spring に登録されているすべてのアプリケーションを表示します。

バインドは、いくつかの構成を環境変数 (主に eureka.client.service-url.defaultZone プロパティ) としてアプリケーションに注入します。 このプロパティは、Eureka Server 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 に設定する場合は、コンテナー アプリで環境変数を設定することでオーバーライドできます。

eureka.instance.prefer-ip-addresstrue に設定されているのは、コンテナー アプリ環境の特定の DNS 解決ルールによるものです。 バインドを壊さないようにするため、この値は変更しないでください。

(省略可能) Spring 用 Eureka サーバー Java コンポーネントからコンテナー アプリをバインド解除する

コンテナー アプリからバインドを削除するには、--unbind オプションを使用します。

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

ダッシュボードを使用してアプリケーションを表示する

重要

ダッシュボードを表示するには、少なくとも Microsoft.App/managedEnvironments/write ロールがマネージド環境リソースのアカウントに割り当てられている必要があります。 リソースに Owner ロールまたは Contributor ロールを明示的に割り当てるか、手順に従ってカスタム ロール定義を作成し、アカウントに割り当てることができます。

  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 値の <> かっこの間にあるプレースホルダーは、必ずサブスクリプション ID に置き換えてください。

  2. マネージド環境リソースのアカウントにカスタム ロールを割り当てます。

    マネージド環境のリソース ID を取得します。

        export ENVIRONMENT_ID=$(az containerapp env show \
         --name $ENVIRONMENT --resource-group $RESOURCE_GROUP \ 
         --query id -o tsv)
    
  3. ユーザー アカウントにそのロールを割り当てます。

    このコマンドを実行する前に、 <> かっこの間のプレースホルダーをユーザーまたはサービス プリンシパル ID に置き換えます。

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

    Note

    <USER_OR_SERVICE_PRINCIPAL_ID> は通常、Azure portal へのアクセスに使用する ID である必要があります。 <ROLE_NAME> は、手順 1 で割り当てた名前です。

  4. Eureka Server for Spring ダッシュボードの 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 を返します。 次のスクリーンショットに示すように、ダッシュボードを通じてコンテナー アプリも表示されます。

Eureka Server for Spring ダッシュボードのスクリーンショット。

省略可能: Eureka Server for Spring と Spring 用管理の Java コンポーネントを統合する

Eureka Server for Spring コンポーネントと Spring 用管理の Java コンポーネントを統合する場合は、「Spring 用マネージド管理を Eureka Server for Spring と統合する」を参照してください。

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

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

az group delete \
  --resource-group $RESOURCE_GROUP

次のステップ