ファイルを Azure Blob Storage にアップロードする

このチュートリアルでは、Spring Boot アプリケーションから Azure Blob Storage アカウント内のコンテナー BLOB をアップロードして読み取る方法について説明します。

Azure Blob Storage は、Microsoft のクラウド用オブジェクト ストレージ ソリューションです。 BLOB ストレージは、テキスト データやバイナリ データなどの大量の非構造化データを格納するために最適化されています。

前提条件

  • Azure サブスクリプション - 無料アカウントを作成します
  • Java Development Kit (JDK) バージョン 8 以降。
  • Apache Maven、バージョン 3.0 以降。
  • cURL または機能をテストするための類似の HTTP ユーティリティ。
  • Azure ストレージ アカウントとコンテナー ストレージ アカウントがない場合は、作成します。
  • Spring Boot アプリケーション。 ない場合は、Spring Initializr で Maven プロジェクトを作成します。 必ず、[Maven プロジェクト] を選択し、[依存関係][Spring Web] 依存関係を追加してから、Java のバージョン 8 以降を選択してください。

Note

アカウント アクセス権をリソースに付与するには、新規作成された Azure Storage アカウントで、Storage Blob Data Contributor ロールを、現在使用している Microsoft Entra アカウントに割り当てます。 詳細については、Azure ポータルを使用した Azure ロールの割り当て を参照してください。

重要

このチュートリアルの手順を完了するには、Spring Boot 2.5 以上のバージョンが必要です。

コンテナーの作成

最初に「クイック スタート: Azure Portal で、BLOB をアップロード、ダウンロード、および一覧表示する」の手順を実行して、testcontainer という名前のコンテナーを作成します。

Azure Storage アカウント コンテナーからの BLOB のアップロードと読み取り

Azure Storage アカウントとコンテナーが作成されたので、Spring Cloud Azure を使用して BLOB からファイルをアップロードして読み取ることができます。

Spring Cloud Azure Storage Blob Starter モジュールをインストールするには、次の依存関係を pom.xml ファイルに追加します。

  • Spring Cloud Azure 部品表 (BOM):

    <dependencyManagement>
      <dependencies>
        <dependency>
          <groupId>com.azure.spring</groupId>
          <artifactId>spring-cloud-azure-dependencies</artifactId>
          <version>5.11.0</version>
          <type>pom</type>
          <scope>import</scope>
        </dependency>
      </dependencies>
    </dependencyManagement>
    

    Note

    Spring Boot 2.xを使用している場合は、spring-cloud-azure-dependenciesバージョンを4.17.0に設定してください。 この部品表(BOM)は、<dependencyManagement>pom.xmlファイルのセクションで設定する必要があります。 これにより、すべてのSpring Cloud Azure依存関係が同じバージョンを使用していることが保証されます。 このBOMに使用されるバージョンの詳細については、「Spring Cloud Azureのどのバージョンを使うべきか」を参照してください。

  • Spring Cloud Azure Storage Blob Starter アーティファクト:

    <dependency>
      <groupId>com.azure.spring</groupId>
      <artifactId>spring-cloud-azure-starter-storage-blob</artifactId>
    </dependency>
    

アプリケーションをコーディングする

Spring Cloud Azure Storage BLOB スターターを使用して BLOB からファイルをアップロードおよび読み取りするには、次の手順を実行してアプリケーションを構成します。

  1. 次の例に示すように、application.properties 構成ファイルで Storage アカウント名とエンドポイントを構成します。

    spring.cloud.azure.storage.blob.account-name=${AZURE_STORAGE_ACCOUNT_NAME}
    spring.cloud.azure.storage.blob.endpoint=${AZURE_STORAGE_ACCOUNT_ENDPOINT}
    
  2. 次の例で示すように、新しい BlobController Java クラスを作成します。 このクラスは、Azure Storage アカウント内のコンテナー BLOB からファイルをアップロードおよび読み取るために使用されます。

    package com.example.demo;
    
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.core.io.Resource;
    import org.springframework.core.io.WritableResource;
    import org.springframework.util.StreamUtils;
    import org.springframework.web.bind.annotation.*;
    
    import java.io.IOException;
    import java.io.OutputStream;
    import java.nio.charset.Charset;
    
    @RestController
    @RequestMapping("blob")
    public class BlobController {
    
        @Value("azure-blob://testcontainer/test.txt")
        private Resource blobFile;
    
        @GetMapping("/readBlobFile")
        public String readBlobFile() throws IOException {
            return StreamUtils.copyToString(
                    this.blobFile.getInputStream(),
                    Charset.defaultCharset());
        }
    
        @PostMapping("/writeBlobFile")
        public String writeBlobFile(@RequestBody String data) throws IOException {
            try (OutputStream os = ((WritableResource) this.blobFile).getOutputStream()) {
                os.write(data.getBytes());
            }
            return "file was updated";
        }
    }
    

    ヒント

    このチュートリアルでは、構成またはコードに認証操作はありません。 ただし、Azure サービスに接続するには認証が必要です。 認証を完了するには、Azure ID を使用する必要があります。 Spring Cloud Azure では、DefaultAzureCredential を使用します。これは、コードを変更せずに資格情報を取得できるようにするために、Azure ID ライブラリで提供されます。

    DefaultAzureCredential は複数の認証方法をサポートしており、実行時に使用する方法が決定されます。 このアプローチを採用すると、環境固有のコードを実装することなく、異なる環境 (ローカルと運用環境など) で異なる認証方法をアプリに使用できます。 詳細については、DefaultAzureCredential を参照してください。

    ローカル開発環境で認証を完了するには、Azure CLI、Visual Studio Code、PowerShell、またはその他の方法を使用できます。 詳細については、「Java 開発環境での Azure 認証」を参照してください。 Azure ホスティング環境で認証を完了するには、ユーザー割り当てマネージド ID を使用することをお勧めします。 詳細については、「Azure リソースのマネージド ID とは」を参照してください。

  3. アプリケーションが実行されたら、次の手順を実行して、curl を使用してアプリケーションをテストします。

    1. 次のコマンドを使用して、POST 要求を送信してファイルの内容を更新します。

      curl http://localhost:8080/blob/writeBlobFile -d "new message" -H "Content-Type: text/plain"
      

      file was updated という応答が表示されます。

    2. 次のコマンドを使用して、POST 要求を送信してファイルの内容を検証します。

      curl -X GET http://localhost:8080/blob/readBlobFile
      

      投稿した "新しいメッセージ" テキストが表示されます。

Azure Spring Apps にデプロイする

Spring Boot アプリケーションがローカルで実行されたので、運用環境に移行します。 Azure Spring Apps では、コードを変更せずに、Spring Boot アプリケーションを Azure に簡単にデプロイできます。 Spring アプリケーションのインフラストラクチャはこのサービスによって管理されるため、開発者はコードに専念できます。 Azure Spring Apps では、包括的な監視と診断、構成管理、サービス検出、CI/CD 統合、ブルー/グリーン デプロイなどを使用して、ライフサイクルを管理できます。 Azure Spring Apps にアプリケーションをデプロイするには、「初めてのアプリケーションを Azure Spring Apps にデプロイする」を参照してください。

次のステップ

Spring および Azure の詳細については、Azure ドキュメント センターで引き続き Spring に関するドキュメントをご確認ください。

関連項目

Microsoft Azure で利用できるその他の Spring Boot Starter の詳細については、「Spring Cloud Azure について」を参照してください。

Spring Boot アプリケーションから呼び出すことができるその他の Azure Storage API の詳細については、次の記事を参照してください。