次の方法で共有


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

Note

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

前提条件

  • Azure サブスクリプション。 Azure サブスクリプションをお持ちでない場合は、開始する前に 無料アカウント を作成してください。

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 を有効にするには、次の手順に従います。

  1. Azure Portalを開きます。

  2. [基本] タブで、[価格] セクションの [Enterprise レベル] を選択し、必要な情報を指定します。 次に、[次へ: マネージド コンポーネント] を選択します。

  3. [マネージド コンポーネント] タブで、[Spring Cloud Config Server を有効にする (プレビュー)] を選択します。

    [Spring Cloud Config Server を有効にする] チェックボックスが強調表示された [VMware Tanzu の設定] タブを示す Azure portal のスクリーンショット。

  4. 他の設定を指定し、[確認と作成] を選択します。

  5. [確認と作成] タブで、[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-dssssh-rsaecdsa-sha2-nistp256ecdsa-sha2-nistp384ecdsa-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-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 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] ページをを示す Azure portal のスクリーンショット。

追加のリポジトリ テーブルの [パターン] 列が強調表示された [Config Server] ページをを示す Azure portal のスクリーンショット。

Config Server に対して Git リポジトリを構成する

構成ファイルをリポジトリに保存したら、次の手順に従って Azure Spring Apps をリポジトリに接続します。

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

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

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

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

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

    [Config Server] ページを示す Azure portal のスクリーンショット。

    [Config Server] ページを示す Azure portal のスクリーンショット。

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

    [Config Server] ページが表示された Azure portal のスクリーンショット。[適用] ボタンが強調表示されています。

    [Config Server] ページが表示された Azure portal のスクリーンショット。[適用] ボタンが強調表示されています。

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

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

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

既定のリポジトリ

このセクションでは、パブリック リポジトリまたはプライベート リポジトリのリポジトリ情報を入力する方法について説明します。 プライベート リポジトリの場合は、基本認証または SSH を使用できます。

パブリック リポジトリのリポジトリ情報を入力するには、次の手順に従います。

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

基本的なパスワード/トークンベースの認証を使用してプライベート リポジトリのリポジトリ情報を入力するには、次の手順に従います。

  1. [既定のリポジトリ] セクションで、[URI] ボックスにリポジトリの URI を貼り付けます。

  2. [認証] で、[認証の編集] を選択します。

  3. [認証の編集] ペインの [認証の種類] ドロップダウン リストで [HTTP 基本] を選択します。

  4. ご自分のユーザー名とパスワード/トークンを入力して、Azure Spring Apps へのアクセスを許可します。

  5. [OK] を選択し、[適用] を選択して、Config Server インスタンスの設定を完了します。

    基本認証の認証設定の [既定のリポジトリ] セクションを示す Azure portal のスクリーンショット。

    Note

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

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

SSH を使用してプライベート リポジトリのリポジトリ情報を入力するには、次の手順に従います。

  1. [既定のリポジトリ] セクションで、[URI] ボックスにリポジトリの URI を貼り付けます。

  2. [認証] で、[認証の編集] を選択します。

  3. [認証の編集] ペインの [認証の種類] ドロップダウン リストで [SSH] を選択します。

  4. 秘密キーを入力します。 必要に応じて、ホスト キーとホスト キー アルゴリズムを指定します。

  5. Config Server リポジトリには公開キーを含めてください。

  6. [OK] を選択し、[適用] を選択して、Config Server インスタンスの設定を完了します。

    SSH 認証の認証設定の [既定のリポジトリ] セクションを示す Azure portal のスクリーンショット。

追加のリポジトリ

オプションの追加リポジトリを使用してサービスを構成する場合は、次の手順を使用します。

  1. 既定のリポジトリの場合と同様に、[URI][認証] の設定を指定します。 パターンの [名前] 設定を必ず含めてください。。
  2. [適用] を選択して、リポジトリをインスタンスにアタッチします。

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 ファイルをインポートするには、次の手順に従います。

  1. [設定のインポート] を選択し、プロジェクト ディレクトリから YAML ファイルを選択します。 インポート を選択します。

    Config Server の [インポートの設定] ペインのスクリーンショット。

    Config Server の [インポートの設定] ペインのスクリーンショット。

    [通知] ペインに async 操作が表示されます。 1、2 分後に、成功したことが示されるはずです。 YAML ファイルの情報が Azure portal に表示されます。

  2. [適用] を選択してインポートを完了します。

Config Server に対して 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 資格情報の生成] を選択して、ユーザー名とパスワードを表示します。 次のセクションで使用するため、このユーザー名とパスワードを保存します。

Config Server に対して Git リポジトリを構成する

リポジトリを構成するには、次の手順に従います。

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

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

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

  4. サービス ページの左ペインの [設定] で、[Spring Cloud Config Server] タブを選択します。

  5. 作成したリポジトリを構成するには、次の手順に従います。

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

    [URI] と [認証の種類] が強調表示されている既定のリポジトリ構成設定を示す Azure portal のスクリーンショット。

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 からアプリのバインドを設定することもできます。

Azure portal の [Spring Cloud Config Server] ページが示されたスクリーンショット。[アプリ バインド] ドロップダウンが強調表示されています。

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 にアプリケーションをバインドすることもできます。

[バインド] ドロップダウンが強調表示された [アプリの作成] ページを示す Azure portal のスクリーンショット。

構成を削除する

既存の設定を消去するには、[Spring Cloud 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 seconds に設定されています。

    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 サンプルを参照してください。

既存の Enterprise プラン インスタンスで Spring Cloud Config Server を管理する

サービスの作成後に、Azure portal または Azure CLI を使用して Spring Cloud Config Server を有効または無効にすることができます。 Spring Cloud Config Server を無効にする前に、すべてのアプリをバインド解除する必要があります。

Spring Cloud Config Server を有効または無効にするには、次の手順に従います。

  1. サービス インスタンスに移動し、[Spring Cloud Config Server] を選択します。

  2. [管理] を選択します。

  3. [Spring Cloud Config Server を有効にする] を選択または選択解除し、[保存] を選択します。

    [Config Server を有効にする] オプションが強調表示された [管理] ペインを示す Azure portal のスクリーンショット。

  4. [Spring Cloud Config Server] ページで、 Spring Cloud Config Server の状態を表示できるようになりました。

Azure Spring Apps