次の方法で共有


チュートリアル: Azure Container Apps で Spring 用マネージド Config Server に接続する (プレビュー)

Config Server for Spring は、構成データを複数のアプリケーションで使用できるようにするための一元的な場所を提供します。 この記事では、Azure Container Apps でホストされているアプリを Java Config Server for Spring インスタンスに接続する方法を紹介します。

Config Server for Spring Java コンポーネントは、構成設定のソースとして GitHub リポジトリを使用します。 構成値は、コンポーネントとコンテナー アプリの間のバインドを介して、コンテナー アプリで利用できるようになります。 構成サーバーで値を変更すると、その値は自動的にアプリケーションに反映され、アプリケーションを再コンパイルしたり再デプロイしたりする必要はありません。

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

  • Config Server for Spring の Java コンポーネントを作成する
  • Config Server for Spring をコンテナー アプリにバインドする
  • アプリケーションに構成サーバーを接続する前と後の構成値を確認する
  • 対称キーを使用した構成値の暗号化および暗号化解除

重要

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

前提条件

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

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

考慮事項

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

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

セットアップ

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

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

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

この環境は、Config Server for Spring Java コンポーネントとコンテナー アプリの両方をホストするために使用されます。

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

Container Apps 環境が準備できたので、コンテナー アプリを作成し、Config Server for Spring Java コンポーネントにバインドできます。 コンテナー アプリをバインドすると、構成値は自動的に Config Server コンポーネントからアプリケーションに同期されます。

  1. Config Server for Spring の 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. Config Server for Spring の 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 プロパティは、Container Apps で Git リポジトリの変更をチェックする頻度を指示します。

コンテナー アプリを Config Server for Spring 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. Config Server for Spring にバインドします。

    これで、コンテナー アプリと 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 プロパティから取得されます。

バインド要求は、構成の設定を環境変数としてアプリケーションに注入します。 これらの値は、構成サーバーから構成の設定をフェッチする場合に、アプリケーション コードに使用できるようになりました。

この場合、アプリケーションでは次の環境変数を使用できます。

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 Java コンポーネント用マネージド Config Server からコンテナー アプリのバインドを解除する

コンテナー アプリからバインドを削除するには、--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

次のステップ