Azure Spring Apps でマネージド Spring Cloud Config サーバーを構成する

Note

Azure Spring Apps は、Azure Spring Cloud サービスの新しい名前です。 サービスの名前は新しくなりましたが、スクリーンショット、ビデオ、図などの資産の更新に取り組んでいる間、場所によってはしばらく古い名前が表示されます。

この記事の適用対象: ✔️ Java ✔️ C#

この記事の適用対象: ✔️ Standard 従量課金および専用 (プレビュー) ✔️ Basic/Standard ❌ Enterprise

この記事では、Azure Spring Apps サービスでマネージド Spring Cloud Config Server を構成する方法を紹介します。

Spring Cloud Config Server は、分散システムで外部化された構成用に、サーバー側とクライアント側のサポートを提供します。 Config Server インスタンスを使用すると、すべての環境にわたってアプリケーションの外部プロパティを一元的に管理できます。 詳細については、「Spring Cloud Config」のドキュメントを参照してください。

Note

Standard 従量課金プランと専用プランで構成サーバーを使用するには、まずそれを有効にする必要があります。 詳細については、「Azure Spring Apps で Spring Cloud Config Server を有効または無効にする」を参照してください。

前提条件

制限

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 の障害を回避するには、Config Server を GitHub で設定するときに既定のラベルに注意してください (特に、新しく作成されたリポジトリの場合)。

パブリック リポジトリ

パブリック リポジトリを使用する場合、プライベート リポジトリと比べて、構成可能なプロパティはより制限されます。

次の表に、パブリック Git リポジトリを設定する際に使用できる構成可能なプロパティを示します。

Note

現在サポートされている名前付け規則は、ハイフン (-) を使用して単語を区切ることだけです。 たとえば、default-label は使用できますが、defaultLabel は使用できません。

プロパティ 必須 機能
uri はい Config Server バックエンドとして使用される Git リポジトリの URI。 http://https://git@、または ssh:// で始まる必要があります。
default-label いいえ Git リポジトリの既定のラベル。 リポジトリのブランチ名、タグ名、またはコミット ID である必要があります。
search-paths いいえ Git リポジトリのサブディレクトリを検索するために使用される文字列の配列。

SSH 認証を使用したプライベート リポジトリ

次の表に、SSH を使用してプライベート Git リポジトリを設定する際に使用できる構成可能なプロパティを示します。

Note

現在サポートされている名前付け規則は、ハイフン (-) を使用して単語を区切ることだけです。 たとえば、default-label は使用できますが、defaultLabel は使用できません。

プロパティ 必須 機能
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-dssssh-rsaecdsa-sha2-nistp256ecdsa-sha2-nistp384ecdsa-sha2-nistp521 のいずれかである必要があります。 host-key が存在する場合にのみ必須。
strict-host-key-checking いいえ プライベートな host-key を使用するときに、Config Server インスタンスが起動に失敗するかどうかを示します。 true (既定値) または false にする必要があります。

基本認証を使用したプライベート リポジトリ

次の表に、基本認証を使用してプライベート Git リポジトリを設定する際に使用できる構成可能なプロパティを示します。

Note

現在サポートされている名前付け規則は、ハイフン (-) を使用して単語を区切ることだけです。 たとえば、defaultLabel とはせずに、default-label としてください。

プロパティ 必須 機能
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 リポジトリを設定する際に使用できる構成可能なプロパティを示します。

Note

現在サポートされている名前付け規則は、ハイフン (-) を使用して単語を区切ることだけです。 たとえば、defaultLabel とはせずに、default-label としてください。

プロパティ 必須 機能
repos いいえ 指定された名前の Git リポジトリの設定で構成されるマップ。
repos."uri" はい (repos の場合) Config Server バックエンドとして使用される Git リポジトリの URI。 http://https://git@、または ssh:// で始まる必要があります。
repos."name" はい (repos の場合) リポジトリを識別する名前。たとえば、team-Ateam-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-dssssh-rsaecdsa-sha2-nistp256ecdsa-sha2-nistp384ecdsa-sha2-nistp521 のいずれかである必要があります。 host-key が存在する場合にのみ必須。
repos."strict-host-key-checking" いいえ プライベートな host-key を使用するときに、Config Server インスタンスが起動に失敗するかどうかを示します。 true (既定値) または false にする必要があります。

次の表に、オプションの追加リポジトリを使用してサービスを構成するためのパターンの例を示します。 詳細については、Spring ドキュメントの追加リポジトリのセクションパターン マッチングおよび複数リポジトリのセクションを参照してください。

パターン 説明
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 プロファイルと照合します。

Screenshot of Azure portal showing the Config Server page with the Patterns column of the Additional repositories table highlighted.

自分の Config Server リポジトリを Azure Spring Apps に接続する

自分の構成ファイルがリポジトリに保存されているので、次の手順を実行して Azure Spring Apps をそのリポジトリに接続します。

  1. Azure portal にサインインします。

  2. Azure Spring Apps の [概要] ページに移動します。

  3. 左側のナビゲーション ウィンドウで [Config Server] を選択します。

  4. [既定のリポジトリ] セクションで [URI]https://github.com/Azure-Samples/piggymetrics-config に設定します。

  5. [Validate] を選択します。

    Screenshot of Azure portal showing the Config Server page.

  6. 検証が完了したら、 [適用] を選択して変更を保存します。

    Screenshot of Azure portal showing Config Server page with Apply button highlighted.

構成の更新に数分かかる場合があります。 構成が完了すると、通知が届きます。

リポジトリの情報を Azure portal に直接入力する

既定のリポジトリと、必要に応じて追加のリポジトリについて、リポジトリ情報を入力できます。

既定のリポジトリ

このセクションの手順を使用して、パブリックまたはプライベートのリポジトリのリポジトリ情報を入力します。

  • パブリック リポジトリ: [既定のリポジトリ] セクションで、[URI] ボックスにリポジトリの URI を貼り付けます。 [ラベル] の設定に「config」と入力します。 [認証] の設定が "パブリック" であることを確認し、[適用] を選択します。

  • プライベート リポジトリ: Azure Spring Apps では、基本的なパスワード (トークン) ベースの認証と SSH がサポートされています。

    • 基本認証: [既定のリポジトリ] セクションの [URI] ボックスにリポジトリの URI を貼り付けてから、[認証] で設定を選択して [認証の編集] ペインを開きます。 [認証の種類] ボックスの一覧から [HTTP Basic] (HTTP 基本) を選択し、ユーザー名とパスワードまたはトークンを入力して、Azure Spring Apps へのアクセスを許可します。 [OK] を選択し、[適用] を選択して、Config Server インスタンスの設定を完了します。

    Screenshot of the Default repository section showing authentication settings for Basic authentication.

    Note

    多くの Git リポジトリ サーバーで、HTTP 基本認証のパスワードではなく、トークンの使用がサポートされています。 一部のリポジトリでは、トークンを無期限に保持できます。 しかし、一部の Git リポジトリ サーバー (Azure DevOps Server を含む) では、強制的にトークンの有効期限を数時間に設定しています。 トークンの有効期限が切れるリポジトリでは、Azure Spring Apps でトークンベースの認証を使用しないでください。 このようなトークンを使用する場合は、有効期限が切れる前に忘れずに更新してください。

    GitHub のパスワード認証のサポートが削除されたため、GitHub ではパスワード認証の代わりに個人用アクセス トークンを使用する必要があります。 詳細については、Git 操作のトークン認証要件に関するページを参照してください。

    • SSH: [既定のリポジトリ] セクションの [URI] ボックスにリポジトリの URI を貼り付けてから、[認証] で設定を選択して [認証の編集] ペインを開きます。 [認証の編集] ペインの [認証の種類] ボックスの一覧から [SSH] を選択し、秘密キーを入力します。 必要に応じて、ホスト キーとホスト キー アルゴリズムを指定します。 Config Server リポジトリには公開キーを含めてください。 [OK] を選択し、[適用] を選択して、Config Server インスタンスの設定を完了します。

    Screenshot of the Default repository section showing authentication settings for SSH authentication.

追加のリポジトリ

オプションの追加のリポジトリを使用してサービスを構成する場合は、既定のリポジトリと同じように、[URI][認証] の設定を指定します。 パターンの [名前] の設定を必ず指定し、[適用] を選択してインスタンスに接続します。

リポジトリの情報を YAML ファイルに入力する

リポジトリの設定を含む YAML ファイルを記述した場合は、ローカル コンピューターから Azure Spring Apps に YAML ファイルを直接インポートできます。 次の例は、基本認証を使用するプライベート リポジトリ用の単純な 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 ファイルを選択します。 インポートを選択します。

Screenshot of the Config Server Import settings pane.

[通知]async 操作が表示されます。 1、2 分後に、成功したことが示されるはずです。 YAML ファイルの情報が Azure portal に表示されます。 [適用] を選択してインポートを完了します。

Azure Spring Apps 構成向け Azure Repos の使用

Azure Spring Apps では、SSH または HTTP 基本認証によってセキュリティ保護されているパブリックの Git リポジトリにアクセスできます。 HTTP 基本認証は、Azure Reposを使用してリポジトリを作成および管理するための最も簡単なオプションです。

リポジトリの URL と資格情報を取得する

リポジトリの URL と資格情報を取得するには、次の手順を実行します。

  1. プロジェクトの Azure Repos ポータルで、[複製] ボタンを選択します。

  2. テキストボックスから複製 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 を保存します。

  3. [Git 資格情報の生成] を選択します。ユーザー名とパスワードが表示されるので、次のセクションで使用するために保存します。

Git リポジトリにアクセスするように Azure Spring Apps を構成する

  1. Azure portal にサインインします。

  2. Azure Spring Apps の [概要] ページに移動します。

  3. 構成するサービスを選択します。

  4. サービス ページの左ペインで、[設定][Config Server] タブを選択します。作成したリポジトリを次のように構成します。

    • 前のセクションで保存したリポジトリの URI を追加します。
    • [認証] で設定を選択して、[認証の編集] ペインを開きます。
    • [認証の種類] で、[HTTP Basic] (HTTP 基本) を選択します。
    • [ユーザー名] には、前のセクションで保存したユーザー名を指定します。
    • [パスワード] には、前のセクションで保存したパスワードを指定します。
    • [OK] を選び、処理が完了するまで待ちます。

    Screenshot of repository configuration settings.

構成を削除する

[Config Server] タブの [リセット] を選択して、既存の設定を消去します。 GitHub から Azure DevOps Server に移動する際など、Config Server インスタンスを別のソースに接続する場合は、Config Server の設定を削除します。

Config Server の更新

プロパティが変更された場合、変更を行う前に、それらのプロパティを使用するサービスに通知する必要があります。 Spring Cloud Config Server の既定のソリューションでは、更新イベントを手動でトリガーします。これは、アプリ インスタンスが多数ある場合は実現できない可能性があります。 詳細については、構成の一元管理に関するページを参照してください。

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

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

    @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);
            }
        }
    }
    
  2. application.yml ファイルで自動更新を有効にし、適切な更新間隔を設定します。 この例では、クライアントは 60 秒ごとに構成変更をポーリングします。これは、更新間隔に設定できる最小値です。

    既定では、自動更新は false に設定され、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;
    }
    

詳細については、config-client-polling サンプルを参照してください。

次のステップ

この記事では、Spring Cloud Config Server インスタンスを有効にし、構成する方法を学習しました。 アプリケーション管理の詳細については、「Azure Spring Apps でアプリケーションをスケーリングする」を参照してください。