チュートリアル: 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 はスケーリングしません。 スケーリング プロパティ minReplicas と maxReplicas は両方とも 1 に設定されています。 |
リソース | Config Server for Spring のコンテナー リソースの割り当ては固定で、CPU コア数は 0.5、メモリ サイズは 1Gi です。 |
料金 | Config Server for Spring の課金は消費ベースの価格設定に該当します。 マネージド Java コンポーネントによって消費されるリソースは、アクティブ/アイドル レートで課金されます。 課金を停止するために、使用しなくなったコンポーネントを削除できます。 |
バインディング | コンテナー アプリは、バインドを介して Config Server for Spring に接続されます。 バインドは、コンテナー アプリの環境変数に構成を注入します。 バインドが確立されると、コンテナー アプリで環境変数から構成値を読み取ることができます。 |
セットアップ
Config Server for Spring の操作を開始する前に、まず、必要なリソースを作成する必要があります。
次のコマンドを実行して、リソース グループと Container Apps 環境を作成します。
アプリケーション構成をサポートする変数を作成します。 これらの値は、このレッスンのために提供されています。
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.username
やspring.cloud.config.server.git.password
などの関連する認証の構成を追加します。Azure CLI を使用して Azure にサインインします。
az login
リソース グループを作成する。
az group create --name $RESOURCE_GROUP --location $LOCATION
コンテナー アプリ環境を作成します。
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 コンポーネントからアプリケーションに同期されます。
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
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 コンポーネントにバインドする
構成データを消費するコンテナー アプリを作成します。
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
です。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