Azure Container Apps の Spring 用 Config Server コンポーネントの設定を構成する (プレビュー)

Spring 用 Config Server は、構成データを複数のアプリケーションで使用できるようにするための、一元的な場所を提供します。 次のガイダンスで、Spring 用 Config Server コンポーネントを構成および管理する方法をご確認ください。

表示

show コマンドを使用して、名前ごとに個々のコンポーネントの詳細を表示できます。

次のコマンドを実行する前に、 <> で囲まれたプレースホルダーを実際の値に置き換えます。

az containerapp env java-component config-server-for-spring show \
  --environment <ENVIRONMENT_NAME> \
  --resource-group <RESOURCE_GROUP> \
  --name <JAVA_COMPONENT_NAME>

一覧取得

list コマンドを使用して、登録されているすべての Java コンポーネントを一覧表示できます。

次のコマンドを実行する前に、 <> で囲まれたプレースホルダーを実際の値に置き換えます。

az containerapp env java-component list \
  --environment <ENVIRONMENT_NAME> \
  --resource-group <RESOURCE_GROUP>

バインド

Spring 用 Config Server コンポーネントとコンテナー アプリ間の接続を作成するには、update コマンドの --bind パラメーターを使用します。

次のコマンドを実行する前に、 <> で囲まれたプレースホルダーを実際の値に置き換えます。

az containerapp update \
  --name <CONTAINER_APP_NAME> \
  --resource-group <RESOURCE_GROUP> \
  --bind <JAVA_COMPONENT_NAME>

バインドの解除

コンテナー アプリと Spring 用 Config Server コンポーネント間の接続を切断するには、update コマンドの --unbind パラメーターを使用します。

次のコマンドを実行する前に、 <> で囲まれたプレースホルダーを実際の値に置き換えます。

az containerapp update \
  --name <CONTAINER_APP_NAME> \
  --unbind <JAVA_COMPONENT_NAME> \
  --resource-group <RESOURCE_GROUP>

構成オプション

az containerapp update コマンドでは、--configuration パラメーターを使用して、Spring 用 Config Server の構成方法をコントロールします。 スペースで区切ることで、一度に複数のパラメーターを使用することが可能です。 詳細については、Spring Cloud Config Server のドキュメントを参照してください。

次の表に、使用できるさまざまな構成値の一覧を示します。

Git バックエンド構成

名前 説明
spring.cloud.config.server.git.uri
spring.cloud.config.server.git.repos.{repoName}.uri
リモート リポジトリの URI。
spring.cloud.config.server.git.username
spring.cloud.config.server.git.repos.{repoName}.username
リモート リポジトリを使用した認証に対するユーザー名。
spring.cloud.config.server.git.password
spring.cloud.config.server.git.repos.{repoName}.password
リモート リポジトリを使用した認証に対するパスワード。
spring.cloud.config.server.git.search-paths
spring.cloud.config.server.git.repos.{repoName}.search-paths
ローカルの作業コピー内で使用する検索パス。 既定では、ルートのみが検索されます。
spring.cloud.config.server.git.force-pull
spring.cloud.config.server.git.repos.{repoName}.force-pull
リポジトリがプルを強制する必要があることを示すフラグ。 true の場合、ローカルでの変更が破棄され、リモート リポジトリから取得されます。
spring.cloud.config.server.git.default-label
spring.cloud.config.server.git.repos.{repoName}.default-label
Git で使用される既定のラベルは main です。 spring.cloud.config.server.git.default-label を設定せず、main という名前のブランチが存在しない場合、構成サーバーは既定で master という名前のブランチのチェックアウトも試みます。 フォールバック ブランチの動作を無効にする場合は、spring.cloud.config.server.git.tryMasterBranch を false に設定します。
spring.cloud.config.server.git.try-master-branch
spring.cloud.config.server.git.repos.{repoName}.try-master-branch
構成サーバーは、既定で master という名前のブランチをチェックアウトしようとします。
spring.cloud.config.server.git.skip-ssl-validation
spring.cloud.config.server.git.repos.{repoName}.skip-ssl-validation
構成サーバーによる Git サーバーの SSL 証明書の検証は、git.skipSslValidation プロパティを true に設定することで無効にできます。
spring.cloud.config.server.git.clone-on-start
spring.cloud.config.server.git.repos.{repoName}.clone-on-start
(オンデマンドではなく) 起動時に、リポジトリをクローンする必要があることを示すフラグ。 一般に、起動が遅くなりますが、最初のクエリは高速になります。
spring.cloud.config.server.git.timeout
spring.cloud.config.server.git.repos.{repoName}.timeout
HTTP または SSH 接続を (存在する場合に) 取得する際のタイムアウト (秒単位)。 既定値は 5 秒です。
spring.cloud.config.server.git.refresh-rate
spring.cloud.config.server.git.repos.{repoName}.refresh-rate
更新された構成データを、構成サーバーが Git バックエンドからフェッチする頻度。
spring.cloud.config.server.git.private-key
spring.cloud.config.server.git.repos.{repoName}.private-key
有効な SSH 秘密キーです。 ignore-local-ssh-settings が true で、Git URI が SSH 形式の場合は、設定する必要があります。
spring.cloud.config.server.git.host-key
spring.cloud.config.server.git.repos.{repoName}.host-key
有効な SSH ホスト キーです。 host-key-algorithm も設定されている場合は、設定する必要があります。
spring.cloud.config.server.git.host-key-algorithm
spring.cloud.config.server.git.repos.{repoName}.host-key-algorithm
ssh-dss、ssh-rsa、ssh-ed25519、ecdsa-sha2-nistp256、ecdsa-sha2-nistp384、ecdsa-sha2-nistp521 のいずれか。 host-key も設定されている場合、設定する必要があります。
spring.cloud.config.server.git.strict-host-key-checking
spring.cloud.config.server.git.repos.{repoName}.strict-host-key-checking
true または false。 false の場合は、ホスト キーのエラーを無視します。
spring.cloud.config.server.git.repos.{repoName} リモート リポジトリの URI。
spring.cloud.config.server.git.repos.{repoName}.pattern パターンの形式は、ワイルドカードを含む {application}/{profile} の名前のコンマ区切りのリストです。 このいずれのパターンにも {application}/{profile} が一致していない場合は、既定で定義されている下位の URI が使用されます。

一般的な構成

  • ログ関連の構成

    • logging.level.*
    • logging.group.*
    • logging.* 名前空間の下位にあるその他の構成は、禁止される必要があります。たとえば、logging.file を使用 したログ ファイルの書き込みを禁止します。
  • spring.cloud.config.server.overrides

    • すべてのクライアントに無条件に送信される、プロパティ ソースの追加のマップ。
  • spring.cloud.config.override-none

    • リモート リポジトリで spring.cloud.config.override-none=true フラグを設定することで (既定値は false)、クライアント内のすべてのオーバーライドの優先順位を、より既定値に近く変更し、アプリケーションが環境変数またはシステム プロパティに独自の値を指定できるようにします。
  • spring.cloud.config.allow-override

    • 構成優先のブートストラップを有効にした場合、Config Server から提供されるアプリケーション構成内に 2 つのプロパティを配置することで、クライアント アプリケーションが Config Server からの構成をオーバーライドできるようになります。
  • spring.cloud.config.server.health.

    • 正常性インジケーターを構成すると、カスタム プロファイルとカスタム ラベルも含め、より多くのアプリケーションを確認できます
  • spring.cloud.config.server.accept-empty

    • spring.cloud.config.server.accept-emptyfalse を設定すると、アプリケーションが見つからない場合に、サーバーが HTTP の 404 状態を返すようにできます。 既定では、このフラグは true に設定されます。
  • 暗号化と解読 (対称)

    • encrypt.key
      • 対称キーは、単一のプロパティ値を構成すればよいので、便利に使用できます。
    • spring.cloud.config.server.encrypt.enabled
      • これに false を設定すると、サーバー側の暗号解読を無効にできます。

最新のステータスに更新

プロパティを使用するサービスでは、変更が発生する前に、それを認識しておく必要があります。 Spring 用 Config Server の既定の通知メソッドでは、更新イベント (https://<YOUR_CONFIG_CLIENT_HOST_NAME>/actuator/refresh の呼び出しによる更新など) が手動でトリガーされます。通常これは、多数のアプリ インスタンスが存在する場合に実行が困難になります。

代わりに、内部の更新に基づいて構成クライアントに変更をポーリングさせることで、Config Server から値を自動的に更新できます。 Config Server から値を自動的に更新するには、次の手順に従います。

  1. 次の例に示すように、スケジュールされたタスクを登録して、一定の間隔でコンテキストを更新します。

    @Configuration
    @AutoConfigureAfter({RefreshAutoConfiguration.class, RefreshEndpointAutoConfiguration.class})
    @EnableScheduling
    public class ConfigClientAutoRefreshConfiguration implements SchedulingConfigurer {
        @Value("${spring.cloud.config.refresh-interval:60}")
        private long refreshInterval;
        @Value("${spring.cloud.config.auto-refresh:false}")
        private boolean autoRefresh;
        private final RefreshEndpoint refreshEndpoint;
        public ConfigClientAutoRefreshConfiguration(RefreshEndpoint refreshEndpoint) {
            this.refreshEndpoint = refreshEndpoint;
        }
        @Override
        public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
            if (autoRefresh) {
                // set minimal refresh interval to 5 seconds
                refreshInterval = Math.max(refreshInterval, 5);
                scheduledTaskRegistrar.addFixedRateTask(refreshEndpoint::refresh,  Duration.ofSeconds(refreshInterval));
            }
        }
    }
    
  2. autorefresh を有効にし、application.yml ファイルで適切な更新間隔を設定します。 次の例では、クライアントは 60 秒 (更新間隔に設定できる最小値) ごとに構成変更をポーリングします。

    既定では、autorefreshfalse に設定され、refresh-interval は 60 秒に設定されます。

    spring:
        cloud:
            config:
            auto-refresh: true
            refresh-interval: 60
    management:
        endpoints:
            web:
            exposure:
                include:
                - refresh
    
  3. コードに @RefreshScope を追加します。 次の例では、変数 connectTimeout は 60 秒ごとに自動的に更新されます。

    @RestController
    @RefreshScope
    public class HelloController {
        @Value("${timeout:4000}")
        private String connectTimeout;
    }
    

対称キーによる暗号化と暗号解読

サーバー側の暗号解読

既定では、サーバー側の暗号化が有効になっています。 アプリケーションで復号化を有効にするには、以下の各ステップに従います。

  1. Git リポジトリの .properties ファイルに、暗号化されたプロパティを追加します。

    たとえば、ファイルは次の例のようになります。

    message={cipher}f43e3df3862ab196a4b367624a7d9b581e1c543610da353fbdd2477d60fb282f
    
  2. 暗号化されたプロパティがある Git リポジトリを使用し、暗号化キーを設定するように、Spring 用 Config Server の Java コンポーネントを更新します。

    次のコマンドを実行する前に、 <> で囲まれたプレースホルダーを実際の値に置き換えます。

    az containerapp env java-component config-server-for-spring update \
      --environment <ENVIRONMENT_NAME> \
      --resource-group <RESOURCE_GROUP> \
      --name <JAVA_COMPONENT_NAME> \
      --configuration spring.cloud.config.server.git.uri=<URI> encrypt.key=randomKey
    

クライアント側の暗号解読

以下の各ステップに従うと、プロパティのクライアント側の暗号解読を使用できます。

  1. Git リポジトリにある *.properties* ファイルに、暗号化されたプロパティを追加します。

  2. この暗号化されたプロパティがある Git リポジトリを使用し、サーバー側の解読を無効にするように、Spring 用 Config Server の Java コンポーネントを更新します。

    次のコマンドを実行する前に、 <> で囲まれたプレースホルダーを実際の値に置き換えます。

    az containerapp env java-component config-server-for-spring update \
      --environment <ENVIRONMENT_NAME> \
      --resource-group <RESOURCE_GROUP> \
      --name <JAVA_COMPONENT_NAME> \
      --configuration spring.cloud.config.server.git.uri=<URI> spring.cloud.config.server.encrypt.enabled=false
    
  3. クライアント アプリで、環境変数として暗号解読キー ENCRYPT_KEY=randomKey を追加します。

    別の方法として、classpath 上に spring-cloud-starter-bootstrap を含めるか、システム プロパティとして spring.cloud.bootstrap.enabled=true を設定する場合には、bootstrap.propertiesencrypt.keyを設定します。

    次のコマンドを実行する前に、 <> で囲まれたプレースホルダーを実際の値に置き換えます。

    az containerapp update \
      --name <APP_NAME> \
      --resource-group <RESOURCE_GROUP> \
         --set-env-vars "ENCRYPT_KEY=randomKey"
    
    encrypt:
      key: somerandomkey
    

次のステップ