すべてのプロダクト
Search
ドキュメントセンター

Serverless App Engine:Spring Cloud を使用したマイクロサービスアプリケーションの開発と SAE へのデプロイ

最終更新日:Dec 04, 2025

このトピックでは、サービスプロバイダーとサービス利用者を含む Spring Cloud アプリケーションを例に、アプリケーションをローカルで開発・デバッグし、SAE にデプロイし、サービス登録、検出、および利用者からプロバイダーへの呼び出しを有効にする方法を説明します。

背景情報

  • Spring Cloud に精通していないが、Spring と Maven の基本的な知識がある場合、このトピックは Spring Cloud Alibaba Nacos Discovery を使用して Spring Cloud アプリケーションのサービス登録と検出を実装する方法を学ぶのに役立ちます。また、利用者からプロバイダーへの呼び出しを有効にする方法も学びます。

  • Eureka、Consul、ZooKeeper などの Spring Cloud のサービス登録コンポーネントに精通しているが、Spring Cloud Alibaba の Nacos Discovery コンポーネントを使用したことがない場合、既存のサービス登録の依存関係と構成を Spring Cloud Alibaba Nacos Discovery のものに置き換えるだけで済みます。コードの変更は不要です。

    Spring Cloud Alibaba Nacos Discovery は、Spring Cloud Registry の標準インターフェイスと仕様を実装しています。したがって、Spring Cloud を使用してサービスレジストリに接続するプロセスは、ほとんど変わりません。

  • オープンソース版の Spring Cloud Alibaba Nacos Discovery を使用して Spring Cloud アプリケーションでサービス登録と検出を行うことに精通している場合、アプリケーションを直接 SAE にデプロイして、SAE が提供する商用サービス登録・検出機能を利用できます。 詳細については、「アプリケーションホスティングの概要」をご参照ください。

SAE サービスレジストリを使用する理由

SAE サービスレジストリは、オープンソースの Nacos Server の商用版を提供します。オープンソースの Spring Cloud Alibaba Nacos Discovery で開発されたアプリケーションは、SAE が提供する商用サービスレジストリを直接使用できます。

SAE サービスレジストリは、Nacos、Eureka、Consul などの自己管理型レジストリに比べて、いくつかの利点があります:

  • 共有コンポーネント:Nacos、Eureka、または Consul をデプロイまたは維持する必要がなく、コストを削減できます。

  • 暗号化されたリンク:サービス登録と検出の呼び出しは暗号化され、不正なアプリケーションによるサービスの検出から保護されます。

  • SAE サービスレジストリは、他の SAE コンポーネントとシームレスに統合されており、環境分離や段階的リリースなど、包括的なマイクロサービスソリューションを提供します。

アプリケーションを SAE にデプロイすると、SAE サービスレジストリは Nacos Server のアドレス、サービスポート、名前空間、AccessKey、および Context-path を自動的に設定します。これらの設定が優先され、追加の構成は不要です。

マイクロサービスアプリケーションが多数ある場合は、推奨レベルの高い順にリストされている次のいずれかのタイプのサービスレジストリを使用できます:

  • 商用サービスレジストリ (MSE)

    ZF182Dl2pw

    MSE Nacos レジストリの構築とデプロイ方法については、「MSE Nacos レジストリの使用」をご参照ください。

  • 自己管理型サービスレジストリ

    7D79jXUfBL

    自己管理型の Nacos レジストリを構築およびデプロイする際には、次の点に注意してください:

    • SAE のネットワークと自己管理型 Nacos レジストリのネットワークが相互接続されていることを確認してください。

    • コマンドが無効になるのを防ぐため、-D パラメーターと -XX パラメーターを同時に使用しないでください。サンプルコード:

      • 元のコード:

        java -Dalicloud.deployment.mode=EDAS_MANAGED -XX:+UseContainerSupport -XX:InitialRAMPercentage=70.0 -XX:MaxRAMPercentage=70.0 -XX:+UnlockExperimentalVMOptions -XX:+UseWisp2 -Dio.netty.transport.noNative=true -XX:+UseG1GC -Dspring.profiles.active=yace -Dnacos.use.endpoint.parsing.rule=false -Dnacos.use.cloud.namespace.parsing=false -jar /home/admin/app/xx-server.jar
      • 修正後のコード:

        java -XX:+UseContainerSupport -XX:InitialRAMPercentage=70.0 -XX:MaxRAMPercentage=70.0 -XX:+UnlockExperimentalVMOptions -XX:+UseWisp2 -Dio.netty.transport.noNative=true -XX:+UseG1GC -Dspring.profiles.active=yace -Dnacos.use.endpoint.parsing.rule=false -Dnacos.use.cloud.namespace.parsing=false -jar /home/admin/app/xx-server.jar
    • 自己管理型サービスレジストリを使用する場合は、イメージまたは JAR パッケージを使用してアプリケーションをデプロイし、次の起動パラメーターを構成することを推奨します:-Dnacos.use.endpoint.parsing.rule=false および -Dnacos.use.cloud.namespace.parsing=false

      重要

      SAE 組み込み以外のレジストリを使用するには、-jar の前に必要な起動パラメーターを追加する必要があります。

      • イメージを使用してアプリケーションをデプロイする場合、イメージファイルの起動コマンドに -Dnacos.use.endpoint.parsing.rule=false-Dnacos.use.cloud.namespace.parsing=false を追加します。Docker イメージの作成方法については、「イメージ作成の例」をご参照ください。

        サンプルコードは次のとおりです:

        RUN echo 'eval exec java -Dnacos.use.endpoint.parsing.rule=false -Dnacos.use.cloud.namespace.parsing=false -jar $CATALINA_OPTS /home/admin/app/hello-edas-0.0.1-SNAPSHOT.jar'> /home/admin/start.sh && chmod +x /home/admin/start.sh
      • JAR パッケージを使用してアプリケーションをデプロイする場合は、SAE コンソールの [起動コマンド設定] セクションに移動します。 次に、[オプション設定] フィールドに -Dnacos.use.endpoint.parsing.rule=false -Dnacos.use.cloud.namespace.parsing=false を入力します。 次の図は、[Open JDK 8] ランタイム環境で Java アプリケーションをデプロイするように設定されている起動コマンドを示しています。 詳細については、「起動コマンドを設定する」をご参照ください。sc_configure_a_startup_command_for_nacos

  • SAE 組み込みサービスレジストリ

    x6JeUmPTQf

    SAE は、Java マイクロサービスアプリケーション向けに Nacos Server の自動アドレッシング機能を提供します。SAE[サービス登録と検出] 機能を使用して、サービスレジストリを構成できます。詳細については、「SAE 組み込み Nacos レジストリの使用」をご参照ください。

事前準備

  • Maven をダウンロードし、環境変数を設定します。

  • Nacos Server を起動します。

    1. Nacos Server パッケージをダウンロードして解凍します。

    2. nacos/bin ディレクトリに移動し、Nacos Server を起動します。

      • Linux、UNIX、または macOS:sudo sh startup.sh -m standalone コマンドを実行します。

      • Windows:startup.cmd -m standalone コマンドを実行します。

      説明

      standalone は、startup.cmd ファイルがクラスターモードではなくスタンドアロンモードで実行されることを示します。デフォルトでは、startup.cmd ファイルはクラスターモードで起動されます。Windows システムで startup.cmd ファイルをダブルクリックして実行すると、起動に失敗します。この場合、startup.cmd ファイルに MODE="standalone" を設定する必要があります。詳細については、「」Quick Start for Nacos をご参照ください。

ステップ 1:サービスプロバイダーの作成

ローカル環境でサービスプロバイダーアプリケーションプロジェクトを作成します。依存関係を追加し、サービス登録と検出を有効にし、Nacos Server をサービスレジストリとして指定します。

  1. nacos-service-provider という名前の Maven プロジェクトを作成します。

  2. pom.xml ファイルに依存関係を追加します。

    具体的な例については、「nacos-service-provider」をご参照ください。このトピックでは、Spring Boot 2.1.4.RELEASE と Spring Cloud Greenwich.SR1 を使用し、次の依存関係があります:

    説明

    Spring Boot 2.4 以降はサポートされていません。Spring Cloud Alibaba 2.2.6.RELEASE (クライアントバージョン 1.4.2) がサポートされています。

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.4.RELEASE</version>
        <relativePath/>
    </parent>
    
    <dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>2.1.0.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </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>                  

    この例では、Spring Cloud Greenwich を使用しています。対応する Spring Cloud Alibaba のバージョンは 2.1.1.RELEASE です。

    • Spring Cloud Finchley を使用する場合、対応する Spring Cloud Alibaba のバージョンは 2.0.1.RELEASE です。

    • Spring Cloud Edgware を使用する場合、対応する Spring Cloud Alibaba のバージョンは 1.5.1.RELEASE です。

      説明

      Spring Cloud Edgware はライフサイクルの終わりに達しています。このバージョンを使用してアプリケーションを開発しないことを推奨します。

  3. src/main/java に、com.aliware.edas パッケージを作成します。

  4. com.aliware.edas パッケージに、ProviderApplication という名前のサービスプロバイダー用の起動クラスを作成し、次のコードを追加します。

    @EnableDiscoveryClient アノテーションは、このアプリケーションのサービス登録と検出を有効にします。

        package com.aliware.edas;
    
        import org.springframework.boot.SpringApplication;
        import org.springframework.boot.autoconfigure.SpringBootApplication;
        import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    
        @SpringBootApplication
        @EnableDiscoveryClient
        public class ProviderApplication {
    
            public static void main(String[] args) {
                SpringApplication.run(ProviderApplication.class, args);
            }
        }             
  5. com.aliware.edas パッケージに、EchoController を作成します。

    EchoController で、URL マッピングを /echo/{string} として指定し、HTTP メソッドを GET に設定し、URL パスからメソッドパラメーターを取得して、受信したパラメーターを返します。

        package com.aliware.edas;
    
        import org.springframework.web.bind.annotation.PathVariable;
        import org.springframework.web.bind.annotation.RequestMapping;
        import org.springframework.web.bind.annotation.RequestMethod;
        import org.springframework.web.bind.annotation.RestController;
    
        @RestController
        public class EchoController {
            @RequestMapping(value = "/echo/{string}", method = RequestMethod.GET)
            public String echo(@PathVariable String string) {
                return string;
            }
        }              
  6. src\main\resources パスに application.properties ファイルを作成します。application.properties に、次の構成を追加して Nacos Server のアドレスを指定します。

        spring.application.name=service-provider
        server.port=18081
        spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848               

    この例では、127.0.0.1 は Nacos Server のアドレスです。Nacos Server が別のマシンにデプロイされている場合は、これを対応する IP アドレスに変更する必要があります。他の要件がある場合は、application.properties ファイルに構成を追加できます。詳細については、「設定項目」をご参照ください。

  7. 結果を検証します。

    1. nacos-service-providerProviderApplicationmain 関数を実行して、アプリケーションを起動します。

    2. ローカル Nacos Server コンソールに http://127.0.0.1:8848/nacos でログインします。

      ローカル Nacos コンソールのデフォルトのユーザー名とパスワードはどちらも nacos です。

    3. 左側のナビゲーションウィンドウで、[サービス管理] > [サービスリスト] を選択します。

      サービスリストに service-provider が表示され、[詳細] をクリックしてこのサービスの詳細を表示できます。

ステップ 2:サービス利用者の作成

このセクションでは、Nacos を使用してサービス検出を行い、RestTemplate と FeignClient を使用してプロバイダーを呼び出すサービス利用者を作成する方法について説明します。

  1. nacos-service-consumer という名前の Maven プロジェクトを作成します。

  2. pom.xml ファイルに依存関係を追加します。

    具体的な例については、「nacos-service-consumer」をご参照ください。

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.4.RELEASE</version>
        <relativePath/>
    </parent>
    
    <dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>2.1.0.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </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>        
  3. src/main/java ディレクトリに、com.aliware.edas パッケージを作成します。

  4. com.aliware.edas パッケージで RestTemplate と FeignClient を構成します。

    1. com.aliware.edas パッケージに、EchoService という名前のインターフェイスを作成し、@FeignClient アノテーションを追加して、対応する HTTP URL とメソッドを構成します。

      package com.aliware.edas;
      
      import org.springframework.cloud.openfeign.FeignClient;
      import org.springframework.web.bind.annotation.PathVariable;
      import org.springframework.web.bind.annotation.RequestMapping;
      import org.springframework.web.bind.annotation.RequestMethod;
      
      @FeignClient(name = "service-provider")
      public interface EchoService {
          @RequestMapping(value = "/echo/{str}", method = RequestMethod.GET)
          String echo(@PathVariable("str") String str);
      }                   
    2. com.aliware.edas パッケージに、ConsumerApplication という名前の起動クラスを作成し、必要な構成を追加します。

      • サービス登録と検出を有効にするには、@EnableDiscoveryClient アノテーションを使用します。

      • @EnableFeignClients アノテーションを使用して FeignClient をアクティブ化します。

      • @LoadBalanced アノテーションを追加して、RestTemplate をサービス検出と統合します。

      package com.aliware.edas;
      
      import org.springframework.boot.SpringApplication;
      import org.springframework.boot.autoconfigure.SpringBootApplication;
      import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
      import org.springframework.cloud.client.loadbalancer.LoadBalanced;
      import org.springframework.cloud.openfeign.EnableFeignClients;
      import org.springframework.context.annotation.Bean;
      import org.springframework.web.client.RestTemplate;
      
      @SpringBootApplication
      @EnableDiscoveryClient
      @EnableFeignClients
      public class ConsumerApplication {
      
          @LoadBalanced
          @Bean
          public RestTemplate restTemplate() {
              return new RestTemplate();
          }
      
          public static void main(String[] args) {
              SpringApplication.run(ConsumerApplication.class, args);
          }
      }
  5. com.aliware.edas パッケージに、サービス検出機能をデモンストレーションおよび検証するための TestController クラスを作成します。

        package com.aliware.edas;
    
        import org.springframework.beans.factory.annotation.Autowired;
        import org.springframework.web.bind.annotation.PathVariable;
        import org.springframework.web.bind.annotation.RequestMapping;
        import org.springframework.web.bind.annotation.RequestMethod;
        import org.springframework.web.bind.annotation.RestController;
        import org.springframework.web.client.RestTemplate;
    
        @RestController
        public class TestController {
    
            @Autowired
            private RestTemplate restTemplate;
            @Autowired
            private EchoService echoService;
    
            @RequestMapping(value = "/echo-rest/{str}", method = RequestMethod.GET)
            public String rest(@PathVariable String str) {
                return restTemplate.getForObject("http://service-provider/echo/" + str,
                        String.class);
            }
    
            @RequestMapping(value = "/echo-feign/{str}", method = RequestMethod.GET)
            public String feign(@PathVariable String str) {
                return echoService.echo(str);
            }
    
        }           
  6. src\main\resources パスに、application.properties という名前のファイルを作成します。application.properties ファイルに、次の構成を追加して Nacos Server のアドレスを指定します。

        spring.application.name=service-consumer
        server.port=18082
        spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

    この例では、127.0.0.1 は Nacos Server のアドレスです。Nacos Server が別のマシンにデプロイされている場合は、そのマシンの IP アドレスに値を変更する必要があります。他の要件がある場合は、application.properties ファイルに構成を追加できます。詳細については、「設定項目」をご参照ください。

  7. 結果を検証します。

    1. nacos-service-consumer プロジェクトの ConsumerApplication クラスの main 関数を実行して、アプリケーションを起動します。

    2. ローカル Nacos Server コンソールに http://127.0.0.1:8848/nacos でログインします。

      ローカル Nacos コンソールのデフォルトのユーザー名とパスワードはどちらも nacos です。

    3. 左側のナビゲーションウィンドウで、[サービス管理] > [サービスリスト] を選択します。サービスリストに service-consumer が表示され、[詳細] をクリックしてこのサービスの詳細を表示できます。

ステップ 3:ローカルテスト

ローカル環境で、利用者からプロバイダーへのサービス呼び出しをテストします。

  • Linux、UNIX、macOS の場合:次のコマンドを実行します。

    curl http://127.0.0.1:18082/echo-rest/rest-rest
    curl http://127.0.0.1:18082/echo-feign/feign-rest
  • Windows の場合:ブラウザに http://127.0.0.1:18082/echo-rest/rest-resthttp://127.0.0.1:18082/echo-feign/feign-rest を入力します。

ステップ 4:アプリケーションの SAE へのデプロイ

アプリケーションのローカルでの開発とテストが完了したら、パッケージ化して SAE にデプロイできます。

nacos-service-providernacos-service-consumer は 2 つの別々のアプリケーションとしてデプロイされ、同じリージョンと名前空間にデプロイする必要があります。詳細については、「Java アプリケーションのデプロイ」をご参照ください。

  • JAR パッケージをデプロイする場合、アプリケーションのデプロイ構成で [アプリケーション実行環境][標準 Java アプリケーション実行環境] に設定します。

  • WAR パッケージをデプロイする場合、アプリケーションのデプロイ構成で [アプリケーション実行環境][apache-tomcat-XXX] に設定します。

アプリケーションを SAE にデプロイすると、SAE サービスレジストリは Nacos Server のアドレス、サービスポート、名前空間、AccessKey、および Context-path 情報を高い優先度で自動的に設定します。追加の構成を行う必要はありません。元の構成を保持または削除できます。

ステップ 5:結果の検証

  1. SAE にデプロイされた nacos-service-consumer アプリケーションにパブリック CLB をバインドします。CLB のパブリックアクセスを構成する際、[ネットワークプロトコル][HTTP] を選択し、[HTTP ポート]80 に、[コンテナポート]18082 に設定します。詳細については、「アプリケーションへの CLB のバインド」をご参照ください。

  2. ブラウザのアドレスバーに、アプリケーションのパブリック IP アドレスを http://<Public IP address>/echo-rest/rest-rest または http://<Public IP address>/echo-feign/feign-rest の形式で入力し、Enter キーを押します。ページに応答が返された場合、アプリケーションは正常にデプロイされています。

設定項目

設定項目

キー

デフォルト値

説明

サーバーアドレス

spring.cloud.nacos.discovery.server-addr

なし

Nacos Server がリッスンする IP アドレスとポート。

サービス名

spring.cloud.nacos.discovery.service

${spring.application.name}

現在のサービスの名前。

ネットワークインターフェース名

spring.cloud.nacos.discovery.network-interface

なし

IP アドレスが構成されていない場合、このネットワークインターフェースに対応する IP アドレスが登録されます。ネットワークインターフェース名が構成されていない場合、デフォルトで最初のネットワークインターフェースの IP アドレスが使用されます。

登録済み IP アドレス

spring.cloud.nacos.discovery.ip

なし

高い優先度。

登録済みポート

spring.cloud.nacos.discovery.port

-1

このパラメーターを構成する必要はありません。システムが自動的にポートを検出します。

名前空間

spring.cloud.nacos.discovery.namespace

なし

異なる環境の登録を論理的に分離します。たとえば、構成やサービスなどのリソースは、開発環境と本番環境の間で分離されます。

メタデータ

spring.cloud.nacos.discovery.metadata

なし

このパラメーターをマップ形式で構成します。要件に応じて、サービス関連のメタデータをカスタマイズできます。

クラスター

spring.cloud.nacos.discovery.cluster-name

DEFAULT

Nacos クラスターの名前。

エンドポイント

spring.cloud.nacos.discovery.endpoint

なし

リージョン内のサービスのドメイン名。このドメイン名を通じてサーバーアドレスを動的に取得できます。この構成は SAE にデプロイする場合には不要です。

Ribbon との統合

ribbon.nacos.enabled

true

必要な場合を除き、値を変更しないでください。

Spring Cloud Alibaba Nacos Discovery の詳細については、「Nacos Discovery」をご参照ください。