このトピックでは、Spring Cloud Alibaba Nacos Config を使用して構成管理を行うデモ Spring Cloud アプリケーションを構築し、SAE にデプロイして SAE コンソールからその構成を管理する方法を説明します。
コード内に構成値を保持すると、デプロイメントの柔軟性が失われます。単一の設定を変更するだけで、アプリケーションの再ビルドと再デプロイが必要になります。Nacos で構成を外部化することにより、コードを変更したりサービスを再起動したりすることなく、ランタイムで値を更新できます。SAE は、アプリケーション構成管理 (ACM) を介してオープンソースの Nacos と連携します。アプリケーションを SAE にデプロイすると、SAE コンソールは構成の変更を管理し、実行中のインスタンスに直接プッシュします。
このトピックでは、nacos-config-example デモアプリケーションを使用します。手順に従うには、nacos-config-example.zip をダウンロードしてください。
前提条件
開始する前に、以下の準備が整っていることを確認してください:
-
Maven をダウンロードし、システムの PATH に追加済みであること
-
スタンドアロンモードで実行されているローカルの Nacos Server (下記の Nacos Server の起動 をご参照ください)
-
ローカルの Nacos Server コンソールで構成が作成済みであること (下記の ローカル Nacos Server での構成の作成 をご参照ください)
Nacos Server の起動
-
Nacos Server パッケージをダウンロードして展開します。
-
nacos/binディレクトリに移動し、お使いの OS に対応する起動コマンドを実行します:-
Linux、Unix、macOS:
sudo sh startup.sh -m standalone -
Windows:
startup.cmd -m standalone
-m standaloneフラグは、Nacos をデフォルトのクラスターモードではなく、スタンドアロンモードで起動します。Windows では、startup.cmdをダブルクリックするとクラスターモードで起動し、失敗します。これを修正するには、ファイルを開き、MODE="standalone"と設定します。詳細については、「Nacos のクイックスタート」をご参照ください。 -
ローカル Nacos Server での構成の作成
-
Nacos Server コンソールにログインします。デフォルトのユーザー名とパスワードは、どちらも
nacosです。 -
左側のナビゲーションペインで、[設定] をクリックします。[設定] ページで、右上隅にある
アイコンをクリックします。 -
[設定の作成] ページで、以下のパラメーターを設定し、[公開] をクリックします:
-
[Data ID]:
nacos-config-example.properties -
[グループ]:
DEFAULT_GROUP -
[構成内容]:
test.name=nacos-config-test
-
ステップ 1: Nacos Config を使用したアプリケーション構成の管理
バージョンの互換性
この例では、Spring Boot 2.1.4.RELEASE と Spring Cloud Greenwich.SR1 を使用します。お使いの Spring Cloud のリリースに一致する Spring Cloud Alibaba のバージョンを選択してください:
| Spring Cloud リリース | Spring Cloud Alibaba バージョン |
|---|---|
| Greenwich | 2.1.1.RELEASE |
| Finchley | 2.0.1.RELEASE |
| Edgware | 1.5.1.RELEASE (廃止。使用しないでください) |
アプリケーションのビルド
-
nacos-config-exampleという名前の Maven プロジェクトを作成します。 -
pom.xmlに次の依存関係を追加します。この例では Spring Cloud Greenwich を使用しているため、spring-cloud-starter-alibaba-nacos-configのバージョンは2.1.1.RELEASEです。<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.4.RELEASE</version> <relativePath/> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> <version>2.1.1.RELEASE</version> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Greenwich.SR1</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> -
src/main/javaにcom.aliware.edasパッケージを作成します。 -
com.aliware.edasパッケージに、NacosConfigExampleApplication起動クラスを作成します:import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class NacosConfigExampleApplication { public static void main(String[] args) { SpringApplication.run(NacosConfigExampleApplication.class, args); } } -
com.aliware.edasパッケージに、EchoControllerコントローラーを作成します:-
@Value("${test.name}")は、Nacos Config からtest.nameキーの値をインジェクトします。 -
@RefreshScopeにより、Nacos が構成変更をプッシュしたときに Bean が再作成されます。これにより、インジェクトされた値が再起動なしで自動的に更新されます。このアノテーションがない場合、アプリケーションは起動時にのみ構成を読み取り、その後の変更は無視します。
import org.springframework.beans.factory.annotation.Value; import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RefreshScope public class EchoController { @Value("${test.name}") private String userName; @RequestMapping(value = "/") public String echo() { return userName; } } -
-
src/main/resourcesにbootstrap.propertiesを作成し、次の構成を追加してアプリケーションをローカルの Nacos Server に接続します。127.0.0.1:8848はデフォルトの Nacos Server アドレス、18081はアプリケーションのサービスポートです。Nacos Server が別の場所で実行されている場合は、アドレスとポートを変更してください。spring.application.name=nacos-config-example server.port=18081 spring.cloud.nacos.config.server-addr=127.0.0.1:8848利用可能なすべての構成オプションについては、「構成リファレンス」をご参照ください。
-
NacosConfigExampleApplicationのmainメソッドを実行して、アプリケーションをローカルで起動します。
ステップ 2: SAE へのアプリケーションのデプロイ
ローカルでテストした後、アプリケーションを SAE にデプロイします。デプロイ手順については、「アプリケーションのデプロイ」をご参照ください。
SAE による Nacos 設定の上書き方法
アプリケーションが SAE 上で実行されると、SAE は Nacos Server の IP アドレスとサービスポート、名前空間、アクセスキー、シークレットキー、コンテキストパスといった Nacos 接続情報を、bootstrap.properties の値よりも高い優先度で自動的にインジェクトします。bootstrap.properties の変更は不要で、元の値を保持することも削除することもできます。
ランタイム環境
SAE コンソール を介して [Deployment with JAR Packages] を使用して初めてデプロイする場合、[Application Runtime Environment] を [Standard Java Application Runtime Environment] に設定します。[Java Environment] には [Open JDK 8] を選択し、[File Upload Method] には [Upload JAR Package] を選択します。
SAE での一致する構成の作成
デプロイする前に、SAE の構成管理で同じ構成を再作成し、デプロイ後にアプリケーションがそれを読み取れるようにします。
-
SAE コンソールにログインします。左側のナビゲーションペインで [Namespace] をクリックし、トップメニューバーからリージョンを選択します。
-
[Namespace] ページで、ターゲットの名前空間の名前をクリックします。
-
左側のナビゲーションペインで、[Distributed Configuration Management] > [Configurations] を選択します。[Configurations] ページで、[Create Configuration] をクリックします。
-
[Create configuration] パネルで、パラメーターを設定し、[Create] をクリックします。
パラメーター 説明 [Data ID] 構成識別子。この例では nacos-config-example.propertiesを使用します。一意性を保つために、package.classの命名規則に従ってください (例:com.taobao.tc.refund.log.level)。[グループ] 構成グループ。この例では DEFAULT_GROUPを使用します。一意性を保つために、product name:module nameの形式を使用してください (例:ACM:Test)。グループは認証をサポートします。[データ暗号化] 機密情報を含む構成の暗号化を有効にします。Key Management Service (KMS) のアクティベーションと ACM の権限付与が必要です。暗号化された構成の Data ID には、 cipher-というプレフィックスが付きます。詳細については、「暗号化された構成の作成と使用」をご参照ください。[構成フォーマット] 構成内容のフォーマット。この例では [TEXT] を選択します。 [構成内容] 構成内容。この例では test.name=nacos-config-testと入力します。[構成の説明] 構成のオプションの説明。 [その他の構成] [アプリケーション] ([More Configuration] 配下) 構成が属するアプリケーション名。 [ラベル] ([More Configuration] 配下) 構成を整理するためのラベル。構成ごとに最大 5 つのラベルを付与できます。
ステップ 3: 結果の検証
アプリケーションが SAE で起動した後、SAE から構成を正しく読み取っていることを確認します。
-
次のコマンドを実行します。
<application instance IP>と<service port>をアプリケーションの実際の値に置き換えてください。curl http://<application instance IP>:<service port>例:
curl http://192.168.0.34:8080アプリケーションが構成を正常にロードした場合、コマンドは
nacos-config-testを返します。[ヒント:] コマンドが期待される値を返さない場合は、SAE コンソールでアプリケーションログを確認し、Nacos が正常に接続されたことを確認し、SAE の Data ID とグループがbootstrap.propertiesの値と一致していることを確認してください。 -
SAE コンソールで、構成内容を
nacos-config-testからnacos-config-test2に更新し、再度curlコマンドを実行します。curl http://192.168.0.34:8080コマンドは
nacos-config-test2を返すようになり、SAE が更新された構成を再起動なしで実行中のアプリケーションにプッシュしたことが確認できます。EchoControllerの@RefreshScopeアノテーションが自動更新をトリガーします。
構成リファレンス
必要に応じて、次の項目を bootstrap.properties に追加できます。
| 設定項目 | キー | デフォルト | 必須 | 説明 |
|---|---|---|---|---|
| サーバーアドレス | spring.cloud.nacos.config.server-addr |
なし | はい | Nacos Server のアドレス。 |
| Data ID プレフィックス | spring.cloud.nacos.config.prefix |
${spring.application.name} |
いいえ | Data ID のプレフィックス。 |
| グループ | spring.cloud.nacos.config.group |
DEFAULT_GROUP |
いいえ | 構成グループ。 |
| Data ID サフィックスと構成フォーマット | spring.cloud.nacos.config.file-extension |
properties |
いいえ | Data ID サフィックスと構成ファイルフォーマット。サポートされている値: properties、yaml、yml。 |
| コンテンツエンコーディング | spring.cloud.nacos.config.encode |
UTF-8 |
いいえ | 構成内容のエンコーディング。 |
| 取得タイムアウト | spring.cloud.nacos.config.timeout |
3000 |
いいえ | 構成を取得するためのタイムアウト (ミリ秒単位)。 |
| 名前空間 | spring.cloud.nacos.config.namespace |
なし | いいえ | 環境 (例:開発、テスト、本番) 間で構成を分離します。 |
| 相対パス | spring.cloud.nacos.config.context-path |
なし | いいえ | サーバー API の相対パス。 |
| エンドポイント | spring.cloud.nacos.config.endpoint |
UTF-8なし |
いいえ | リージョン内のサービスのエンドポイント。これを使用して、サーバーアドレスを動的に解決します。 |
| リスナーと自動更新の有効化 | spring.cloud.nacos.config.refresh.enabled |
true |
いいえ | 構成のリスニングと自動更新を有効にします。これはデフォルト値のままにしてください。 |
構成項目の完全なリストについては、「Spring Cloud Alibaba Nacos Config のドキュメント」をご参照ください。
次のステップ
-
アプリケーションのデプロイ — JAR パッケージやその他の方法を使用して、Spring Cloud アプリケーションを SAE にデプロイできます。
-
暗号化された構成の作成と使用 — KMS に裏付けられた暗号化で機密性の高い構成値を保護できます。