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

Enterprise Distributed Application Service:EDAS 上の Spring Cloud アプリケーションと OSS の統合

最終更新日:Mar 12, 2026

OSS(Object Storage Service)へのファイルのアップロード、ダウンロード、読み取り機能を備えた Spring Cloud アプリケーションを作成し、コードや構成の変更を加えずに Enterprise Distributed Application Service (EDAS) にデプロイします。

OSS を利用する理由

OSS は、Alibaba Cloud が開発した、安全でコスト効率が高く、信頼性の高いストレージサービスであり、クラウドに大量のデータを保存できます。OSS はプラットフォームに依存しない RESTful API オペレーションを提供しているため、Spring Cloud で開発されたアプリケーションであらゆる種類のデータを保存し、アクセスできます。

前提条件

開始する前に、以下の条件を満たしていることを確認してください。

仕組み

Spring Cloud AliCloud OSS は、Spring Cloud アプリケーションと Alibaba Cloud OSS を統合するためのライブラリです。スターター依存関係を追加し、認証情報を設定すると、以下の操作が可能になります。

  • Spring Bean に直接 OSS クライアントをインジェクトできます。

  • Resource インスタンスとして OSS オブジェクトにアクセスできます(@Value("oss://...") を使用)。

  • コードや構成を変更せずに、同一アプリケーションを EDAS にデプロイできます。

Maven プロジェクトのセットアップ

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

  2. pom.xml に以下の依存関係を追加します。

    Spring Boot 1.x は保守終了しています。Spring Boot 1.x を使用する必要がある場合は、Spring Cloud Edgware および Spring Cloud Alibaba 1.5.1.RELEASE とともに、バージョン 1.5.x を使用してください。
       <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-alicloud-oss</artifactId>
               <version>2.1.1.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>Finchley.SR1</version>
                   <type>pom</type>
                   <scope>import</scope>
               </dependency>
           </dependencies>
       </dependencyManagement>
  3. src/main/java 配下に、spring.cloud.alicloud.oss というパッケージを作成します。

アプリケーションのエントリーポイントの作成

spring.cloud.alicloud.oss パッケージ内に、起動クラス OssApplication を作成します。起動時に、対象のバケットが存在するかを確認し、存在しない場合は自動的に作成します。

package spring.cloud.alicloud.oss;

import com.aliyun.oss.OSS;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;

import java.net.URISyntaxException;

@SpringBootApplication
public class OssApplication {

    // 実際のバケット名に置き換えてください
    public static final String BUCKET_NAME = "test-bucket";

    public static void main(String[] args) throws URISyntaxException {
        SpringApplication.run(OssApplication.class, args);
    }

    @Bean
    public AppRunner appRunner() {
        return new AppRunner();
    }

    class AppRunner implements ApplicationRunner {
        @Autowired
        private OSS ossClient;

        @Override
        public void run(ApplicationArguments args) throws Exception {
            try {
                if (!ossClient.doesBucketExist(BUCKET_NAME)) {
                    ossClient.createBucket(BUCKET_NAME);
                }
            } catch (Exception e) {
                System.err.println("oss handle bucket error: " + e.getMessage());
                System.exit(-1);
            }
        }
    }
}

サンプルファイルの追加

src/main/resources 配下に、oss-test.json というファイルを作成します。

{
  "name": "oss-test"
}

REST コントローラーの作成

spring.cloud.alicloud.oss パッケージ内に、OssController を作成します。このコントローラーは、Spring Resource インターフェイスを介してファイルのアップロード、ダウンロード、読み取りを行う 3 つのエンドポイントを公開します。

package spring.cloud.alicloud.oss;

import com.aliyun.oss.OSS;
import com.aliyun.oss.common.utils.IOUtils;
import com.aliyun.oss.model.OSSObject;
import org.apache.commons.codec.CharEncoding;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.Resource;
import org.springframework.util.StreamUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.nio.charset.Charset;

@RestController
public class OssController {

    @Autowired
    private OSS ossClient;

    // OSS オブジェクトを Spring Resource としてアクセス
    @Value("oss://" + OssApplication.BUCKET_NAME + "/oss-test.json")
    private Resource file;

    /**
     * クラスパスから oss-test.json を OSS バケットにアップロードします。
     */
    @GetMapping("/upload")
    public String upload() {
        try {
            ossClient.putObject(OssApplication.BUCKET_NAME, "oss-test.json", this
                    .getClass().getClassLoader().getResourceAsStream("oss-test.json"));
        } catch (Exception e) {
            e.printStackTrace();
            return "upload fail: " + e.getMessage();
        }
        return "upload success";
    }

    /**
     * Spring Resource インターフェイスを介して OSS オブジェクトを読み取ります。
     */
    @GetMapping("/file-resource")
    public String fileResource() {
        try {
            return "get file resource success. content: " + StreamUtils.copyToString(
                    file.getInputStream(), Charset.forName(CharEncoding.UTF_8));
        } catch (Exception e) {
            e.printStackTrace();
            return "get resource fail: " + e.getMessage();
        }
    }

    /**
     * OSS クライアントを直接使用して OSS オブジェクトをダウンロードします。
     */
    @GetMapping("/download")
    public String download() {
        try {
            OSSObject ossObject = ossClient.getObject(OssApplication.BUCKET_NAME, "oss-test.json");
            return "download success, content: " + IOUtils
                    .readStreamAsString(ossObject.getObjectContent(), CharEncoding.UTF_8);
        } catch (Exception e) {
            e.printStackTrace();
            return "download fail: " + e.getMessage();
        }
    }
}

エンドポイントのまとめ:

エンドポイントメソッド説明
/uploadGEToss-test.json をクラスパスからご利用の OSS バケットにアップロードします
/file-resourceGETSpring の Resource 抽象化(@Value("oss://..."))を介してファイルを読み取ります
/downloadGETOSS クライアントを直接使用してファイルを取得します

認証情報およびエンドポイントの構成

  1. セキュリティ管理ページから、AccessKey ID および AccessKey Secret を取得します。

  2. ご利用のバケットが配置されているリージョンに対応するエンドポイントを取得します。「リージョンとエンドポイント」をご参照ください。

  3. src/main/resources 配下に、application.properties を作成します。以下のプレースホルダーを実際の値に置き換えてください。

    プレースホルダー説明
    <your-access-key>AccessKey IDLTAI5tXxx
    <your-secret-key>AccessKey SecretxXxXxXx
    <your-endpoint>リージョン別エンドポイントのプレフィックスoss-cn-hangzhou
       spring.application.name=oss-example
       server.port=18084
    
       # 実際の認証情報およびエンドポイントに置き換えてください
       spring.cloud.alicloud.access-key=<your-access-key>
       spring.cloud.alicloud.secret-key=<your-secret-key>
       spring.cloud.alicloud.oss.endpoint=<your-endpoint>.aliyuncs.com
       management.endpoints.web.exposure.include=*

結果の検証

  1. OssApplicationmain メソッドを実行して、サービスを起動します。

  2. ブラウザで http://127.0.0.1:18084/upload を開きます。upload success が表示された場合、ファイルのアップロードに成功しています。

  3. OSS コンソール で確認します:ご利用のバケットに移動し、左側ナビゲーションウィンドウの ファイル をクリックして、ファイル一覧に oss-test.json が表示されることを確認します。

  4. http://127.0.0.1:18084/download を開いてファイルをダウンロードします。期待される出力は以下のとおりです。

       {
         "name": "oss-test"
       }
  5. http://127.0.0.1:18084/file-resource を開いて、Spring Resource インターフェイスを介してファイルを読み取ります。期待される出力は以下のとおりです。

       {
         "name": "oss-test"
       }

いずれかのステップで失敗した場合は、コンソールログを確認してエラーを特定し、問題を修正してからアプリケーションを再起動してください。

EDAS へのデプロイ

Spring Cloud AliCloud OSS は、既存の開発環境から EDAS へのアプリケーション移行ニーズに対応するために開発されています。コードや構成を変更せずにアプリケーションをデプロイできます。

デプロイ手順については、以下をご参照ください。

構成リファレンス

プロパティ説明
spring.cloud.alicloud.access-key認証用の AccessKey IDLTAI5tXxx
spring.cloud.alicloud.secret-key認証用の AccessKey SecretxXxXxXx
spring.cloud.alicloud.oss.endpointOSS のリージョン別エンドポイントoss-cn-hangzhou.aliyuncs.com
server.portアプリケーションのポート18084
spring.application.nameSpring アプリケーション名oss-example

次のステップ