Azure Spring Apps でマネージド Spring Cloud Config サーバーを構成する
Note
Basic、Standard、Enterprise プランは、2025 年 3 月中旬以降非推奨になり、廃止期間は 3 年間です。 Azure Container Apps に移行することをお勧めします。 詳細については、「Azure Spring Apps の廃止のお知らせ」を参照してください。
Standard 従量課金と専用プランは、2024 年 9 月 30 日以降に非推奨になり、6 か月後に完全にシャットダウンされます。 Azure Container Apps に移行することをお勧めします。 詳細については、「Azure Spring Apps の Standard 従量課金および専用プランを Azure Container Apps に移行する」を参照してください。
この記事の適用対象:✅ Java ✅ C#
この記事の適用対象:✅ Standard 従量課金および専用 (プレビュー) ✅ Basic/Standard ✅ Enterprise
この記事では、Azure Spring Apps でマネージド Spring Cloud Config Server を構成する方法を紹介します。
Spring Cloud Config Server は、分散システムで外部化された構成用に、サーバー側とクライアント側のサポートを提供します。 Spring Cloud Config Server インスタンスを使用すると、すべての環境にわたってアプリケーションの外部プロパティを一元的に管理できます。 詳細については、「Spring Cloud Config」を参照してください。
Note
Standard 従量課金プランと専用プランで構成サーバーを使用するには、まずそれを有効にする必要があります。 詳細については、「Azure Spring Apps で Spring Cloud Config Server を有効または無効にする」を参照してください。
前提条件
- Azure サブスクリプション。 Azure サブスクリプションをお持ちでない場合は、開始する前に 無料アカウント を作成してください。
- Basic または Standard を使用して、既にプロビジョニングされ、実行されている Azure Spring Apps サービス インスタンス。 Azure Spring Apps サービスを設定して起動するには、「クイック スタート: 初めてのアプリケーションを Azure Spring Apps にデプロイする」を参照してください。
- 既にプロビジョニングされ、実行されている Azure Spring Apps サービス インスタンス。 Azure Spring Apps サービスを設定して起動するには、「クイックスタート: Enterprise プランを使用してアプリをビルドし Azure Spring Apps にデプロイする」を参照してください。
- Git.
Spring Cloud Config Server を有効にする
Spring Cloud Config Server は、Azure Spring Apps Enterprise プラン サービス インスタンスをプロビジョニングするときに有効にすることができます。 Azure Spring Apps Enterprise プラン インスタンスが既にある場合は、この記事の「既存の Enterprise プラン インスタンスで Spring Cloud Config Server を管理する」セクションを参照してください。
Spring Cloud Config Server は、Azure portal または Azure CLI を使用して有効にできます。
Spring Cloud Config Server を有効にするには、次の手順に従います。
Azure Portalを開きます。
[基本] タブで、[価格] セクションの [Enterprise レベル] を選択し、必要な情報を指定します。 次に、[次へ: マネージド コンポーネント] を選択します。
[マネージド コンポーネント] タブで、[Spring Cloud Config Server を有効にする] を選択します。
他の設定を指定し、[確認と作成] を選択します。
[確認と作成] タブで、[Spring Cloud Config Server を有効にする] が [はい] に設定されていることを確認します。 [作成] を選択して、Enterprise プラン インスタンスを作成します。
制限
Git バックエンドで Config Server を使用する場合、いくつかの制限があります。 Config Server と Service Discovery にアクセスするため、次のプロパティがお使いのアプリケーション環境に自動的に挿入されます。 これらのプロパティを Config Server ファイルからも構成すると、競合と予期しない動作が生じる場合があります。
eureka.client.service-url.defaultZone
eureka.client.tls.keystore
eureka.instance.preferIpAddress
eureka.instance.instance-id
server.port
spring.cloud.config.tls.keystore
spring.config.import
spring.application.name
spring.jmx.enabled
management.endpoints.jmx.exposure.include
注意事項
これらのプロパティは、ご自分の Config Server アプリケーション ファイルに配置しないでください。
Config Server ファイルを作成する
Azure Spring Apps では、Config Server ファイルを格納するために、Azure DevOps Server、GitHub、GitLab、および Bitbucket がサポートされています。 自分のリポジトリの準備ができたら、構成ファイルを作成し、そこに格納できます。
構成可能なプロパティの中には、特定の種類でしか使用できないものがあります。 以降のセクションでは、リポジトリの種類ごとにプロパティを記載します。
Note
ラベルを指定しない場合、Config Server は既定のラベルとして (Git で) master
を受け取ります。 ただし、GitHub では、既定のブランチが master
から main
に最近変更されました。 Azure Spring Apps Config Server の障害を回避するには、GitHub で Config Server を設定するときに、特に新しく作成されたリポジトリの既定のラベルに注意してください。
現在サポートされているプロパティ名前付け規則は、ハイフン (-) を使用して単語を区切ることだけです。 たとえば、default-label
を使用できますが、defaultLabel
は使用できません。
パブリック リポジトリ
パブリック リポジトリを使用する場合、構成可能なプロパティはプライベート リポジトリよりも制限されます。
次の表に、パブリック Git リポジトリの設定に使用できる構成可能なプロパティを示します。
プロパティ | 必須 | 機能 |
---|---|---|
uri |
はい | Config Server バックエンドとして使用される Git リポジトリの URI。 http:// 、https:// 、git@ 、または ssh:// で始まる必要があります。 |
default-label |
いいえ | Git リポジトリの既定のラベル。 リポジトリ内のブランチ名、タグ名、コミット ID のいずれかである必要があります。 |
search-paths |
いいえ | Git リポジトリのサブディレクトリを検索するために使用される文字列の配列。 |
SSH 認証を使用したプライベート リポジトリ
次の表に、SSH を使用してプライベート Git リポジトリを設定するために使用できる構成可能なプロパティを示します。
プロパティ | 必須 | 機能 |
---|---|---|
uri |
はい | Config Server バックエンドとして使用される Git リポジトリの URI。 http:// 、https:// 、git@ 、または ssh:// で始まる必要があります。 |
default-label |
いいえ | Git リポジトリの既定のラベル。 リポジトリのブランチ名、タグ名、またはコミット ID である必要があります。 |
search-paths |
いいえ | Git リポジトリのサブディレクトリを検索するために使用される文字列の配列。 |
private-key |
いいえ | Git リポジトリにアクセスするための SSH 秘密キー。 URI が git@ または ssh:// で始まる場合に必要です。 |
host-key |
いいえ | Git リポジトリ サーバーのホスト キー。 host-key-algorithm で説明しているように、アルゴリズム プレフィックスを含めないでください。 |
host-key-algorithm |
いいえ | ホスト キー アルゴリズム。 ssh-dss 、ssh-rsa 、ecdsa-sha2-nistp256 、ecdsa-sha2-nistp384 、ecdsa-sha2-nistp521 のいずれかである必要があります。 host-key が存在する場合にのみ必須。 |
strict-host-key-checking |
いいえ | 非公開 host-key の使用時に Config Server が起動に失敗するかどうかを示すインジケーター。 true (既定値) または false にする必要があります。 |
基本認証を使用したプライベート リポジトリ
次の表に、基本認証を使用してプライベート Git リポジトリを設定するために使用できる構成可能なプロパティを示します。
プロパティ | 必須 | 機能 |
---|---|---|
uri |
はい | Config Server バックエンドとして使用される Git リポジトリの URI。 http:// 、https:// 、git@ 、または ssh:// で始まる必要があります。 |
default-label |
いいえ | Git リポジトリの既定のラベル。 リポジトリ内のブランチ名、タグ名、コミット ID のいずれかである必要があります。 |
search-paths |
いいえ | Git リポジトリのサブディレクトリを検索するために使用される文字列の配列。 |
username |
いいえ | Git リポジトリ サーバーへのアクセスに使用されるユーザー名。 Git リポジトリ サーバーが HTTP 基本認証をサポートしている場合に必要です。 |
password |
いいえ | Git リポジトリ サーバーへのアクセスに使用されるパスワードまたは個人用アクセス トークン。 Git リポジトリ サーバーが HTTP 基本認証をサポートしている場合に必要です。 |
Note
多くの Git リポジトリ サーバーで、HTTP 基本認証のパスワードではなく、トークンの使用がサポートされています。 一部のリポジトリでは、トークンを無期限に保持できます。 しかし、一部の Git リポジトリ サーバー (Azure DevOps Server を含む) では、強制的にトークンの有効期限を数時間に設定しています。 トークンの有効期限が切れるリポジトリでは、Azure Spring Apps でトークンベースの認証を使用しないでください。 このようなトークンを使用する場合は、有効期限が切れる前に忘れずに更新してください。
GitHub のパスワード認証のサポートが削除されたため、GitHub ではパスワード認証の代わりに個人用アクセス トークンを使用する必要があります。 詳細については、Git 操作のトークン認証要件に関するページを参照してください。
その他の Git リポジトリ
次の表に、パターンを使用してパブリック Git リポジトリを設定する際に使用できる構成可能なプロパティを示します。
プロパティ | 必須 | 機能 |
---|---|---|
repos |
いいえ | 指定された名前の Git リポジトリの設定で構成されるマップ。 |
repos."uri" |
はい (repos の場合) |
Config Server バックエンドとして使用される Git リポジトリの URI。 http:// 、https:// 、git@ 、または ssh:// で始まる必要があります。 |
repos."name" |
はい (repos の場合) |
リポジトリを識別する名前。たとえば、team-A や team-B などです。 repos が存在する場合にのみ必須。 |
repos."pattern" |
いいえ | アプリケーション名の照合に使用される文字列の配列。 各パターンには、ワイルドカードを含む {application}/{profile} 形式を使用します。 |
repos."default-label" |
いいえ | Git リポジトリの既定のラベル。 リポジトリのブランチ名、タグ名、またはコミット IOD である必要があります。 |
repos."search-paths " |
いいえ | Git リポジトリのサブディレクトリを検索するために使用される文字列の配列。 |
repos."username" |
いいえ | Git リポジトリ サーバーへのアクセスに使用されるユーザー名。 Git リポジトリ サーバーが HTTP 基本認証をサポートしている場合に必要です。 |
repos."password" |
いいえ | Git リポジトリ サーバーへのアクセスに使用されるパスワードまたは個人用アクセス トークン。 Git リポジトリ サーバーが HTTP 基本認証をサポートしている場合に必要です。 |
repos."private-key" |
いいえ | Git リポジトリにアクセスするための SSH 秘密キー。 URI が git@ または ssh:// で始まる場合に必要です。 |
repos."host-key" |
いいえ | Git リポジトリ サーバーのホスト キー。 host-key-algorithm で説明しているように、アルゴリズム プレフィックスを含めないでください。 |
repos."host-key-algorithm" |
いいえ | ホスト キー アルゴリズム。 ssh-dss 、ssh-rsa 、ecdsa-sha2-nistp256 、ecdsa-sha2-nistp384 、ecdsa-sha2-nistp521 のいずれかである必要があります。 host-key が存在する場合にのみ必須。 |
repos."strict-host-key-checking" |
いいえ | プライベートな host-key を使用するときに、Config Server インスタンスが起動に失敗するかどうかを示します。 true (既定値) または false にする必要があります。 |
次の表に、オプションの追加リポジトリを使用してサービスを構成するためのパターンの例を示します。 詳細については、この記事の「追加のリポジトリ」セクションと「Spring Cloud Config」の「パターン マッチングと複数のリポジトリ」セクションを参照してください。
パターン | 説明 |
---|---|
test-config-server-app-0/* |
このパターンとリポジトリの URI は、test-config-server-app-0 という名前の Spring Boot アプリケーションを任意のプロファイルと照合します。 |
test-config-server-app-1/dev |
このパターンとリポジトリの URI は、test-config-server-app-1 という名前の Spring Boot アプリケーションを任意の dev プロファイルと照合します。 |
test-config-server-app-2/prod |
このパターンとリポジトリの URI は、test-config-server-app-2 という名前の Spring Boot アプリケーションを任意の prod プロファイルと照合します。 |
Config Server に対して Git リポジトリを構成する
構成ファイルをリポジトリに保存したら、次の手順に従って Azure Spring Apps をリポジトリに接続します。
Azure portal にサインインします。
Azure Spring Apps の [概要] ページに移動します。
ナビゲーション ウィンドウで [Spring Cloud Config Server] を選択します。
[既定のリポジトリ] セクションで [URI] を
https://github.com/Azure-Samples/piggymetrics-config
に設定します。[Validate] を選択します。
検証が完了したら、 [適用] を選択して変更を保存します。
構成の更新に数分かかる場合があります。 構成が完了すると、通知が届きます。
リポジトリの情報を Azure portal に直接入力する
既定のリポジトリと、必要に応じて追加のリポジトリについて、リポジトリ情報を入力できます。
既定のリポジトリ
このセクションでは、パブリック リポジトリまたはプライベート リポジトリのリポジトリ情報を入力する方法について説明します。 プライベート リポジトリの場合は、基本認証または SSH を使用できます。
パブリック リポジトリのリポジトリ情報を入力するには、次の手順に従います。
- [既定のリポジトリ] セクションで、[URI] ボックスにリポジトリの URI を貼り付けます。
- [ラベル] の設定に「config」と入力します。
- [認証] の設定が [パブリック] であることを確認します。
- 適用を選択します。
基本的なパスワード/トークンベースの認証を使用してプライベート リポジトリのリポジトリ情報を入力するには、次の手順に従います。
[既定のリポジトリ] セクションで、[URI] ボックスにリポジトリの URI を貼り付けます。
[認証] で、[認証の編集] を選択します。
[認証の編集] ペインの [認証の種類] ドロップダウン リストで [HTTP 基本] を選択します。
ご自分のユーザー名とパスワード/トークンを入力して、Azure Spring Apps へのアクセスを許可します。
[OK] を選択し、[適用] を選択して、Config Server インスタンスの設定を完了します。
Note
多くの Git リポジトリ サーバーで、HTTP 基本認証のパスワードではなく、トークンの使用がサポートされています。 一部のリポジトリでは、トークンを無期限に保持できます。 しかし、一部の Git リポジトリ サーバー (Azure DevOps Server を含む) では、強制的にトークンの有効期限を数時間に設定しています。 トークンの有効期限が切れるリポジトリでは、Azure Spring Apps でトークンベースの認証を使用しないでください。 このようなトークンを使用する場合は、有効期限が切れる前に忘れずに更新してください。
GitHub のパスワード認証のサポートが削除されたため、GitHub ではパスワード認証の代わりに個人用アクセス トークンを使用する必要があります。 詳細については、Git 操作のトークン認証要件に関するページを参照してください。
SSH を使用してプライベート リポジトリのリポジトリ情報を入力するには、次の手順に従います。
[既定のリポジトリ] セクションで、[URI] ボックスにリポジトリの URI を貼り付けます。
[認証] で、[認証の編集] を選択します。
[認証の編集] ペインの [認証の種類] ドロップダウン リストで [SSH] を選択します。
秘密キーを入力します。 必要に応じて、ホスト キーとホスト キー アルゴリズムを指定します。
Config Server リポジトリには公開キーを含めてください。
[OK] を選択し、[適用] を選択して、Config Server インスタンスの設定を完了します。
追加のリポジトリ
オプションの追加リポジトリを使用してサービスを構成する場合は、次の手順を使用します。
- 既定のリポジトリの場合と同様に、[URI] と [認証] の設定を指定します。 パターンの [名前] 設定を必ず含めてください。。
- [適用] を選択して、リポジトリをインスタンスにアタッチします。
YAML ファイルをインポートして Git リポジトリを構成する
リポジトリの設定を含む YAML ファイルを記述した場合は、お使いのローカル コンピューターから Azure Spring Apps にそのファイルを直接インポートできます。 次の例は、基本認証を使用するプライベート リポジトリ用の単純な YAML ファイルを示しています。
spring:
cloud:
config:
server:
git:
uri: https://github.com/azure-spring-apps-samples-pr/config-server-repository.git
username: <username>
password: <password/token>
YAML ファイルをインポートするには、次の手順に従います。
[設定のインポート] を選択し、プロジェクト ディレクトリから YAML ファイルを選択します。 インポート を選択します。
[通知] ペインに
async
操作が表示されます。 1、2 分後に、成功したことが示されるはずです。 YAML ファイルの情報が Azure portal に表示されます。[適用] を選択してインポートを完了します。
Config Server に対して Azure Repos を構成する
Azure Spring Apps では、SSH または HTTP 基本認証によってセキュリティ保護されているパブリックの Git リポジトリにアクセスできます。 HTTP 基本認証は、Azure Reposを使用してリポジトリを作成および管理するための最も簡単なオプションです。
リポジトリ URL と資格情報を取得する
リポジトリ URL と資格情報を取得するには、次の手順を実行します。
プロジェクトの Azure Repos ポータルで、[複製] を選択します。
テキストボックスから複製 URL をコピーします。 通常、URL は次の形式です。
https://<organization name>@dev.azure.com/<organization name>/<project name>/_git/<repository name>
https://
の後からdev.azure.com
の前まで、@
記号を含めすべて削除します。 結果として得られる URL は次の形式になります。https://dev.azure.com/<organization name>/<project name>/_git/<repository name>
後で使用できるように、この URL を保存します。
[Git 資格情報の生成] を選択して、ユーザー名とパスワードを表示します。 次のセクションで使用するため、このユーザー名とパスワードを保存します。
Config Server に対して Git リポジトリを構成する
リポジトリを構成するには、次の手順に従います。
Azure portal にサインインします。
Azure Spring Apps の [概要] ページに移動します。
構成するサービスを選択します。
サービス ページの左ペインの [設定] で、[Spring Cloud Config Server] タブを選択します。
作成したリポジトリを構成するには、次の手順に従います。
- 先ほど保存したリポジトリ URI を追加します。
- [認証] で設定を選択して、[認証の編集] ペインを開きます。
- [認証の種類] で、[HTTP Basic] (HTTP 基本) を選択します。
- [ユーザー名] には、先ほど保存したユーザー名を指定します。
- [パスワード] には、先ほど保存したパスワードを指定します。
- [OK] を選び、処理が完了するまで待ちます。
Spring Cloud Config Server にアプリをバインドする
次のコマンドを使用して、Spring Cloud Config Server にアプリをバインドし、アプリが Config Server から構成をプルできるようにします。
az spring config-server bind \
--resource-group <resource-group> \
--service <service-name> \
--app <app-name>
次のスクリーンショットに示されているように、Azure portal からアプリのバインドを設定することもできます。
Note
Config Server の状態が変更されたとき、それらの変更がすべてのアプリケーションに反映されるまで数分かかります。
バインド/バインド解除の状態を変更した場合、アプリケーションを再起動または再デプロイする必要があります。
次のコマンドを使用して、新しいアプリを作成するときに、アプリケーションを Spring Cloud Config Server に直接バインドすることを選択できるようになりました。
az spring app create \
--resource-group <resource-group> \
--service <service-name> \
--name <app-name> \
--bind-config-server
次のスクリーンショットに示されているように、Azure portal から Spring Cloud Config Server にアプリケーションをバインドすることもできます。
構成を削除する
既存の設定を消去するには、[Spring Cloud Config Server] タブの [リセット] を選択します。 GitHub から Azure DevOps Server に移動する際など、Config Server インスタンスを別のソースに接続する場合は、Config Server の設定を削除します。
Config Server を更新する
プロパティが変更された場合、変更を行う前に、それらのプロパティを使用するサービスに通知する必要があります。 Spring Cloud Config Server の既定の解決策は、更新イベントを手動でトリガーすることですが、アプリ インスタンスが多数ある場合は実行できない場合があります。 詳細については、構成の一元管理に関するページを参照してください。
代わりに、内部の更新に基づいて構成クライアントに変更をポーリングさせることで、Config Server から値を自動的に更新できます。
Config Server から値を自動的に更新するには、次の手順に従います。
次の例に示すように、スケジュールされたタスクを登録して、一定の間隔でコンテキストを更新します。
@ConditionalOnBean({RefreshEndpoint.class}) @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 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(), refreshInterval * 1000); } } }
application.yml ファイルで自動更新を有効にし、適切な更新間隔を設定します。 この例では、クライアントは 60 秒ごとに構成変更をポーリングします。これは、更新間隔に設定できる最小値です。
既定では、自動更新は
false
に設定され、refresh-interval は60 seconds
に設定されています。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; }
詳細については、config-client-polling サンプルを参照してください。
既存の Enterprise プラン インスタンスで Spring Cloud Config Server を管理する
サービスの作成後に、Azure portal または Azure CLI を使用して Spring Cloud Config Server を有効または無効にすることができます。 Spring Cloud Config Server を無効にする前に、すべてのアプリをバインド解除する必要があります。
Spring Cloud Config Server を有効または無効にするには、次の手順に従います。