このトピックでは、Spring Cloud Alibaba Nacos Config を使用して構成管理を行うデモ Spring Cloud アプリケーションの作成手順を説明し、その後、SAE へのデプロイおよび SAE コンソールを用いた構成管理について解説します。
構成値をコード内に記述すると、デプロイが不安定になります。設定値を 1 つ変更するだけでも、アプリケーションの再ビルドと再デプロイが必要になります。Nacos を用いて構成を外部化することで、コードの変更やサービスの再起動を行わずに、実行時に構成値を更新できます。SAE は、オープンソースの Nacos をアプリケーション構成管理(Application Configuration Management:ACM)を通じて統合しています。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 standaloneWindows の場合:
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利用可能な構成オプションの全一覧については、「構成リファレンス」をご参照ください。
mainメソッドをNacosConfigExampleApplicationから実行し、アプリケーションをローカルで起動します。
ステップ 2:SAE へのアプリケーションデプロイ
ローカルでのテストを終えたら、アプリケーションを SAE にデプロイします。デプロイ手順については、「アプリケーションのデプロイ」をご参照ください。
SAE による Nacos 設定のオーバーライド方法
アプリケーションが SAE 上で実行される場合、SAE は bootstrap.properties の値よりも優先度の高いレベルで、以下の Nacos 接続情報を自動的に注入します:Nacos Server の IP アドレスおよびサービスポート、名前空間、アクセスキー、シークレットキー、コンテキストパス。そのため、bootstrap.properties の変更は不要です。元の値はそのまま保持しても、削除しても構いません。
ランタイム環境
最初に SAE コンソール を使用して「JAR パッケージによるデプロイ」でデプロイする場合、アプリケーションランタイム環境 を 標準 Java アプリケーションランタイム環境 に設定します。

SAE における対応する構成の作成
デプロイ前に、アプリケーションがデプロイ後に構成を読み取れるよう、SAE の構成管理機能で同一の構成を再作成してください。
SAE コンソール にログインします。左側ナビゲーションウィンドウで 名前空間 をクリックし、上部のメニューバーからリージョンを選択します。
名前空間 ページで、対象の名前空間の名前をクリックします。
左側ナビゲーションウィンドウで、分散構成管理 > 構成 を選択します。構成 ページで、構成の作成 をクリックします。
構成の作成 パネルで、パラメーターを設定し、作成 をクリックします。
パラメーター 説明 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を入力します。構成の説明 構成の任意の説明です。 アプリケーション(その他の構成 の下) この構成が属するアプリケーション名です。 ラベル(その他の構成 の下) 構成の整理用ラベルです。1 つの構成につき最大 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 が更新された構成を実行中のアプリケーションにプッシュしたことが確認できます。@RefreshScopeアノテーションがEchoControllerに付与されているため、自動的なリフレッシュがトリガーされます。
構成リファレンス
必要に応じて、以下の項目のいずれかを 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 を活用した暗号化により、機密性の高い構成値を保護します。