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-empty
にfalse
を設定すると、アプリケーションが見つからない場合に、サーバーが HTTP の404
状態を返すようにできます。 既定では、このフラグはtrue
に設定されます。
暗号化と解読 (対称)
- encrypt.key
- 対称キーは、単一のプロパティ値を構成すればよいので、便利に使用できます。
- spring.cloud.config.server.encrypt.enabled
- これに
false
を設定すると、サーバー側の暗号解読を無効にできます。
- これに
- encrypt.key
最新のステータスに更新
プロパティを使用するサービスでは、変更が発生する前に、それを認識しておく必要があります。 Spring 用 Config Server の既定の通知メソッドでは、更新イベント (https://<YOUR_CONFIG_CLIENT_HOST_NAME>/actuator/refresh
の呼び出しによる更新など) が手動でトリガーされます。通常これは、多数のアプリ インスタンスが存在する場合に実行が困難になります。
代わりに、内部の更新に基づいて構成クライアントに変更をポーリングさせることで、Config Server から値を自動的に更新できます。 Config Server から値を自動的に更新するには、次の手順に従います。
次の例に示すように、スケジュールされたタスクを登録して、一定の間隔でコンテキストを更新します。
@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)); } } }
autorefresh
を有効にし、application.yml ファイルで適切な更新間隔を設定します。 次の例では、クライアントは 60 秒 (更新間隔に設定できる最小値) ごとに構成変更をポーリングします。既定では、
autorefresh
はfalse
に設定され、refresh-interval
は 60 秒に設定されます。spring: cloud: config: auto-refresh: true refresh-interval: 60 management: endpoints: web: exposure: include: - refresh
コードに
@RefreshScope
を追加します。 次の例では、変数connectTimeout
は 60 秒ごとに自動的に更新されます。@RestController @RefreshScope public class HelloController { @Value("${timeout:4000}") private String connectTimeout; }
対称キーによる暗号化と暗号解読
サーバー側の暗号解読
既定では、サーバー側の暗号化が有効になっています。 アプリケーションで復号化を有効にするには、以下の各ステップに従います。
Git リポジトリの .properties ファイルに、暗号化されたプロパティを追加します。
たとえば、ファイルは次の例のようになります。
message={cipher}f43e3df3862ab196a4b367624a7d9b581e1c543610da353fbdd2477d60fb282f
暗号化されたプロパティがある 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
クライアント側の暗号解読
以下の各ステップに従うと、プロパティのクライアント側の暗号解読を使用できます。
Git リポジトリにある
*.properties*
ファイルに、暗号化されたプロパティを追加します。この暗号化されたプロパティがある 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
クライアント アプリで、環境変数として暗号解読キー
ENCRYPT_KEY=randomKey
を追加します。別の方法として、
classpath
上に spring-cloud-starter-bootstrap を含めるか、システム プロパティとしてspring.cloud.bootstrap.enabled=true
を設定する場合には、bootstrap.properties
にencrypt.key
を設定します。次のコマンドを実行する前に、
<>
で囲まれたプレースホルダーを実際の値に置き換えます。az containerapp update \ --name <APP_NAME> \ --resource-group <RESOURCE_GROUP> \ --set-env-vars "ENCRYPT_KEY=randomKey"
encrypt: key: somerandomkey